using Accord; using Accord.Genetic; namespace IStation { public abstract class OptimizationFunctionForPump : IFitnessFunction { public enum Modes { Maximization, Minimization } private DoubleRange range = new DoubleRange(40.0, 50.0); private Modes mode; public DoubleRange Range { get { return range; } set { range = value; } } public Modes Mode { get { return mode; } set { mode = value; } } public OptimizationFunctionForPump(DoubleRange range) { this.range = range; } public double Evaluate(IChromosome chromosome) { double num = OptimizationFunction(Translate(chromosome)); if (mode != 0) { return 1.0 / num; } return num; } public double Translate(IChromosome chromosome) { double num = ((BinaryChromosomeForPumps)chromosome).Value; double num2 = ((BinaryChromosomeForPumps)chromosome).MaxValue; return num * range.Length / num2 + range.Min; } public abstract double OptimizationFunction(double x); } }