In the spring of 2001, I took an artificial intelligence class at UBC. We learned of a number of AI techniques, but our big project was based on genetic algorithms.
The basic idea behind genetic algorithms is that you can search through a complicated data set or set of restrictions for an optimal solution without needing to try every single combination of inputs. You are not necessarily guaranteed to get the completely ideal solution, but you can minimize your search time by using the gentic algorithm approach. Some basics are explained in the paper we published, others are available on Wikipedia.