Exemplo n.º 1
0
        public void Run()
        {
            var func = new MyObjecticeFunctionForSA();
            var opt  = new LibOptimization.Optimization.clsOptSimulatedAnnealing(func);

            //initial position using random
            var rng = new LibOptimization.Util.clsRandomXorshift((UInt32)DateTime.Now.Millisecond);

            opt.InitialPosition = new double[] { rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2) };

            //parameter for SA
            opt.Temperature     = 1;
            opt.StopTemperature = 0.0001;
            opt.CoolingRatio    = 0.9995;
            opt.IsUseCriterion  = false;
            opt.Iteration       = 50000;

            //neighbor function
            {
                //default neightbor function(default)
                //var myNeighborFunc = new LocalRandomSearch();
                //myNeighborFunc.NeighborRange = 0.0001;
                //opt.Neighbor = myNeighborFunc;
            }
            {
                //designed neightbor function
                var myNeighborFunc = new MyNeighborFunc();
                myNeighborFunc.Range = 1;
                opt.Neighbor         = myNeighborFunc;
            }
            //init
            opt.Init();
            clsUtil.DebugValue(opt);

            //do optimization
            while (opt.DoIteration(2000) == false)
            {
                clsUtil.DebugValue(opt);
            }
            clsUtil.DebugValue(opt);

            //restart
            opt.Init(opt.Result);
            clsUtil.DebugValue(opt);

            //do optimization
            while (opt.DoIteration(2000) == false)
            {
                clsUtil.DebugValue(opt);
            }
            clsUtil.DebugValue(opt);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            //Simulated Annealing
            {
                var func = new SphereFunction();
                var opt  = new LibOptimization.Optimization.clsOptSimulatedAnnealing(func);

                //initial position using random
                var rng = new LibOptimization.Util.clsRandomXorshift((UInt32)DateTime.Now.Millisecond);
                opt.InitialPosition = new double[] { rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2), rng.NextDouble(-2, 2) };

                //parameter for SA
                opt.Temperature     = 1;
                opt.StopTemperature = 0.0001;
                opt.CoolingRatio    = 0.99;
                opt.Iteration       = 30000; //default 20000

                //neighbor
                ((LocalRandomSearch)opt.Neighbor).NeighborRange = 0.001; //neghbor function

                //init
                opt.Init();
                clsUtil.DebugValue(opt);

                //do optimization
                while (opt.DoIteration(2000) == false)
                {
                    clsUtil.DebugValue(opt);

                    //my criterion

                    /*
                     * if (Result.Eval < 0.01)
                     * {
                     *  break;
                     * }
                     * else
                     * {
                     *  Console.WriteLine("Eval:{0}", opt.Result.Eval);
                     * }
                     */
                }
                clsUtil.DebugValue(opt);
            }

            //Typical use
            {
                //Target Function
                var func = new RosenBrock(2);

                //Set Function
                var opt = new LibOptimization.Optimization.clsOptNelderMead(func);
                opt.Init();

                //Optimization
                opt.DoIteration();

                //Check Error
                if (opt.IsRecentError() == true)
                {
                    return;
                }
                else
                {
                    //Get Result
                    clsUtil.DebugValue(opt);
                }
            }

            //Evaluate optimization result per 100 iteration
            {
                var opt = new LibOptimization.Optimization.clsOptDEJADE(new RosenBrock(10));
                opt.Init();
                clsUtil.DebugValue(opt);

                while (opt.DoIteration(100) == false)
                {
                    clsUtil.DebugValue(opt, ai_isOutValue: false);
                }
                clsUtil.DebugValue(opt);
            }

            //Evaluate optimization result per 100 iteration with check my criterion.
            {
                var opt = new LibOptimization.Optimization.clsOptDEJADE(new RosenBrock(10));
                //Disable Internal criterion
                opt.IsUseCriterion = false;

                //Init
                opt.Init();
                clsUtil.DebugValue(opt);

                //do optimization!
                while (opt.DoIteration(100) == false)
                {
                    var eval = opt.Result.Eval;

                    //my criterion
                    if (eval < 0.01)
                    {
                        break;
                    }
                    else
                    {
                        clsUtil.DebugValue(opt, ai_isOutValue: false);
                    }
                }
                clsUtil.DebugValue(opt);
            }

            //Set boundary variable.
            //-20<x1<-1, -15<x2<0
            {
                var opt = new LibOptimization.Optimization.clsOptDEJADE(new RosenBrock(2));
                //move initial position
                opt.InitialPosition = new double[] { -10, -10 };

                //Set boundary variable
                opt.LowerBounds = new double[] { -20, -15 };
                opt.UpperBounds = new double[] { -1, 0 };

                //Init
                opt.Init();
                clsUtil.DebugValue(opt);

                //do optimization!
                while (opt.DoIteration(100) == false)
                {
                    var eval = opt.Result.Eval;

                    //my criterion
                    if (eval < 0.01)
                    {
                        break;
                    }
                    else
                    {
                        clsUtil.DebugValue(opt, ai_isOutValue: false);
                    }
                }
                clsUtil.DebugValue(opt);
            }

            //Optimiztion problem using MyObjectiveFunction
            // min f(x)
            //  s.t. x>0, 170<=x1<=200, 200<=x2<=300, 250<=x3<=400, 370<=x4<=580, 380<=x5<=600
            {
                var func = new MyObjectiveFunction();
                var opt  = new LibOptimization.Optimization.clsOptDEJADE(func);

                //Set boundary variable
                opt.LowerBounds = new double[] { 170, 200, 250, 370, 380 };
                opt.UpperBounds = new double[] { 200, 300, 400, 580, 600 };

                //move initial position
                double[] initialPosition = new double[] { 0, 0, 0, 0, 0 };
                for (int i = 0; i < initialPosition.Length; i++)
                {
                    //center of boundary range.
                    initialPosition[i] = (opt.LowerBounds[i] + opt.UpperBounds[i]) / 2.0;
                }
                opt.InitialPosition = initialPosition;

                //Init
                opt.Init();
                clsUtil.DebugValue(opt);

                //do optimization!
                while (opt.DoIteration(100) == false)
                {
                    var eval = opt.Result.Eval;

                    //my criterion
                    if (eval < 0.01)
                    {
                        break;
                    }
                    else
                    {
                        Console.WriteLine("Eval:{0}", opt.Result.Eval);
                    }
                }
                clsUtil.DebugValue(opt);
                //return;
            }
        }