Given a problem we try to create an solution algorithm suitable for the problem. At the start there is an empty solution and an solution algorithm. The solution algorithm can be empty and therefore create an empty and invalid solution. During the rest of the method the solution algorithm is steadily improved until the optimizer is able to solve the given problem.

The algorithm is improved iteratively. At the start of each iteration the developer determines a good subset of the solution. It then analysis the solution, creates a changed version of it and verifies the changed version. When the changed version meets its needs, the developer extends the solution algorithm in such a way, that it is capable to do the same thing as the developer has done. After that the developer applies the new algorithm to the solution at the start of this iteration. It uses this new solution as the current solution for the next iteration.

After a while the solution should be optimal. The developer repeats the process multiple times with different problem instances and thereby improves the algorithm with each instance until the optimizer is good enough.