The process of designing and/or tuning an automated search, design or optimization algorithm to suit a particular combination of
search problem,
representation or algorithmic toolkit, and
performance measure.
This is a big issue in building and implementing
EvolutionaryAlgorithms such as
GeneticAlgorithms,
GeneticProgramming, EvolutionStrategies
?, or
EvolutionaryProgramming, and in
ConstraintProgramming. Of course, it's also a problem that applies in general to all forms of design....
For instance, in crafting a GeneticAlgorithm to schedule jobs in a manufacturing setting, you would need to
- define the class of problems you're trying to optimize, say as "minimizing the MakeTime?s of 5 jobs with particular requirements and durations, given 3 machines they all have to share";
- decide on how to represent the prospective solutions and how they would be used to select new ones as search progresses, for instance you might choose to represent schedules in memory as a sort of GanttChart and allow crossover between them;
- decide when to quit, for instance you might choose to proceed with search until no further improvements are found in 1000 consecutive tries.
When it turns out that these choices don't really do any better than random guessing, it's time to do some
MetaOptimization. --
BillTozier