This is a programming paradigm (a framework of approaches and methods of programming) in which a large number of constraint conditions are declared and a solution that satisfied those conditions is found. It is one optimization technique that is applicable to a widely diverse range of problems that involve complex conditions.