Bilevel optimization involves two levels of optimization where one optimization level acts as a constraint to another optimization level. There are enormous applications that are bilevel in nature; however, given the difficulties associated with solving this difficult class of problem, the area still lacks efficient solution methods capable of handling complex application problems. Most of the available solution methods can either be applied to highly restrictive class of problems, or are computationally very expensive such that they do not scale for large scale bilevel problems. The difficulties in bilevel programming arise primarily from the nested structure of the problem. Evolutionary algorithms have been able to demonstrate its potential in solving single-level optimization problems. In this chapter, we provide an introduction to the progress made by the evolutionary computation community towards handling bilevel problems. The chapter highlights past research and future research directions both on single as well as multiobjective bilevel programming. Some of the immediate application areas of bilevel programming have also been highlighted.