Introduction

Software applications fall into two categories; analysis and synthesis. Analysis applications are represented by the traditional input / output model of data processing whereby input data is processed procedurally or heuristically to generate the output data. Synthesis applications involve the reverse process of deriving the input data required to generate certain desired outputs. This is a difficult task since there are, in most cases, no formulae or rules to derive inputs from outputs. This is further complicated by constraints imposed on the acceptable values of input data. Optimization is the process of deriving values of input data that satisfy constraints and which results in the desired output data.

In a typical optimization problem we have an output variable o1 which is calculated from other input variables i1, i2, i3..., etc. The requirement is often to find a set of values for i1, i2, i3 that will result in a maximum, minimum or 'desired' value for o1. Furthermore, the requirements restrict (constrain) the acceptable values of the input variables.

Optimization problems can be solved by iterative trial and error whereby different combinations of input values are tried in an attempt to arrive at the desired output value. However, as the number of possible combinations grows, it can become impractical to try all combinations to arrive at a solution in a reasonable time. The problem becomes one of searching a massive space of solutions looking for the optimal solution. For example in the problem of optimizing the order with which to manufacture 12 products there are over 40,000,000 possible sequences to consider. Rules of thumb can be used to narrow down the combinations worth considering. However, in most cases, good rules are either not available or it is difficult to capture the rule based trial and error strategy of experts.

Numerical optimization techniques have been used to solve optimization problems and are now available in most advanced spreadsheet programs. These techniques have the following limitations:

·They lend themselves to optimizing independent numeric inputs from which a desired output is calculated. They are less capable of optimizing problems involving sequencing or scheduling.

·They are "exploitation" and not "exploration" techniques. This means that given a reasonable starting solution (a set of input values), the numeric optimization will converge to a near optimal solution. However, they are not capable of exploring areas of space where good solutions exist. This is because numeric optimization techniques can often get trapped in local optimal solutions.

·They are not suitable if the outcome cannot be explicitly calculated. For example, when the outcome is a subjective assessment by an expert or an observed performance.