Energy system performance may differ from the expected one during actual operation because of the effects of faults, anomalies, wear and tear due to normal use. One of the main issues of diagnosis, i.e. the procedure to discover the causes of malfunctions, is to find the way back from measured altered performance to the original cause. Several procedures were proposed in the literature to solve the diagnostic problem, usually based on the comparison between a reference nonmalfunctioning condition and an actual, possibly malfunctioning, condition. A different strategy is suggested in the paper. A direct search of the possible causes of malfunctions is performed by means of an evolutionary algorithm: a component fault is arbitrarily introduced in a model of the healthy system by substituting the reference characteristic curve with an altered one, and the algorithm is used to search for a combination of different kinds of performance modifiers that generates the same measured effects of the actual anomaly. A global and a local approach are proposed and applied to a real test case plant, also in presence of measurement noise. The local approach demonstrates to be more effective in terms of accuracy and computational effort