1. A method for estimating the performance of components of a multi-component system, the performance of each component in the system being defined by one or more performance parameters x, and the performance parameters x being related to measurement parameters z which can be expressed as a function h() of the performance parameters x and operating parameters w defining an operating condition of the system; the method comprising: (a) setting an assumed maximum number of fault affected components and, based on this, defining a series of fault classes corresponding to possible outcomes in terms of faulty components, (b) creating an initial population of strings for each fault class, each string comprising a plurality of elements corresponding to the performance parameters x and operating parameters w, values being assigned to the string elements which represent estimated values of said parameters and which are constrained only to indicate fault affected values for performance parameters defining the performance of the fault affected component or components of the respective class, (c) optimising for each class an objective function J(x,w) which gives a measure of the consistency between measured values of the measurement parameters z collected from the system and calculated values of the measurement parameters calculated using said function of the performance parameters and the operating parameters h(x,w), and (d) selecting the class or classes having the best value or values of the objective function; said optimisation being performed for each class independently of the optimisations for the other classes and being an Evolutionary Program based method comprising the steps of: (i) evaluating the objective function for each of the strings in the respective population and, on the basis of this evaluation, assigning a fitness value to each string, and (ii) creating a next generation population of strings using a selection operator and at least one of a cross-over operator and a mutation operator, the selection operator employing the assigned fitness values to determine the strings that survive to the next generation, the cross-over operator, if used, being constrained to operate on pairs of strings from the same fault class, and the mutation operator, if used, being constrained so that it does not operate on string elements representing performance parameters other than those performance parameters associated with the fault affected components within the respective class.