/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem.</param> /// <param name="lowerBound">Lower boundary for entire search-space.</param> /// <param name="upperBound">Upper boundary for entire search-space.</param> /// <param name="lowerInit">Lower boundary for initialization.</param> /// <param name="upperInit">Upper boundary for initialization.</param> /// <param name="displaceValue">Displace optimum by this amount.</param> /// <param name="displaceOptimum">Use optimum displacement?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Benchmark( int dimensionality, double lowerBound, double upperBound, double lowerInit, double upperInit, double displaceValue, bool displaceOptimum, IRunCondition runCondition) : base(runCondition) { _dimensionality = dimensionality; DisplaceOptimum = displaceOptimum; DisplaceValue = displaceValue; _lowerBound = new double[Dimensionality]; _upperBound = new double[Dimensionality]; _lowerInit = new double[Dimensionality]; _upperInit = new double[Dimensionality]; for (int i = 0; i < Dimensionality; i++) { _lowerBound[i] = lowerBound; _upperBound[i] = upperBound; _lowerInit[i] = lowerInit; _upperInit[i] = upperInit; } }
/// <summary> /// Create a new instance of a benchmark problem. /// </summary> /// <param name="id">Benchmark problem ID.</param> /// <param name="dimensionality">Dimensionality of problem.</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <returns></returns> public static Benchmark CreateInstance(this ID id, int dimensionality, bool displaceOptimum, IRunCondition runCondition) { Benchmark benchmark; switch (id) { case ID.Ackley: benchmark = new Ackley(dimensionality, displaceOptimum, runCondition); break; case ID.Griewank: benchmark = new Griewank(dimensionality, displaceOptimum, runCondition); break; case ID.Penalized1: benchmark = new Penalized1(dimensionality, displaceOptimum, runCondition); break; case ID.Penalized2: benchmark = new Penalized2(dimensionality, displaceOptimum, runCondition); break; case ID.QuarticNoise: benchmark = new QuarticNoise(dimensionality, displaceOptimum, runCondition); break; case ID.Rastrigin: benchmark = new Rastrigin(dimensionality, displaceOptimum, runCondition); break; case ID.Rosenbrock: benchmark = new Rosenbrock(dimensionality, displaceOptimum, runCondition); break; case ID.Schwefel12: benchmark = new Schwefel12(dimensionality, displaceOptimum, runCondition); break; case ID.Schwefel221: benchmark = new Schwefel221(dimensionality, displaceOptimum, runCondition); break; case ID.Schwefel222: benchmark = new Schwefel222(dimensionality, displaceOptimum, runCondition); break; case ID.Sphere: benchmark = new Sphere(dimensionality, displaceOptimum, runCondition); break; case ID.Step: benchmark = new Step(dimensionality, displaceOptimum, runCondition); break; default: throw new ArgumentException(); } return benchmark; }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Schwefel221(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -100, 100, 50, 100, -25, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Rastrigin(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -5.12, 5.12, 2.56, 5.12, 1.28, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Step(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -100, 100, 50, 100, 25, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="problem">Problem to optimize.</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Optimizer(Problem problem, IRunCondition runCondition) : base(runCondition) { Problem = problem; }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Ackley(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -30, 30, 15, 30, -7.5, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> /// <remarks> /// Optimum displacement disabled for this problem because /// of the penalty function. /// </remarks> public Penalized2(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -50, 50, -5, 50, 0, false, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Rosenbrock(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -100, 100, 15, 30, 25, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public QuarticNoise(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -1.28, 1.28, 0.64, 1.28, -0.32, displaceOptimum, runCondition) { }
/// <summary> /// Construct the object. /// </summary> /// <param name="dimensionality">Dimensionality of the problem (e.g. 20)</param> /// <param name="displaceOptimum">Displace optimum?</param> public Griewank(int dimensionality, bool displaceOptimum, IRunCondition runCondition) : base(dimensionality, -600, 600, 300, 600, -150, displaceOptimum, runCondition) { }
/// <summary> /// Create the object. /// </summary> /// <param name="runCondition"> /// Determines for how long to continue optimization. /// </param> public Problem(IRunCondition runCondition) { RunCondition = runCondition; }