示例#1
0
        /// <summary>
        /// Converts optimization execution status to SolidColorBrush for indication of status
        /// </summary>
        /// <param name="value">StrategyStatus</param>
        /// <param name="targetType">not used</param>
        /// <param name="parameter">not used</param>
        /// <param name="culture">not used</param>
        /// <returns>System.Windows.Media.SolidColorBrush</returns>
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value != null && value != DependencyProperty.UnsetValue)
            {
                OptimizationStatus status = (OptimizationStatus)value;

                // Return certain brush depending on StrategyStatus
                if (status.Equals(OptimizationStatus.Working))
                {
                    return(Application.Current.Resources["GreenBrush"]);
                }
                else if (status.Equals(OptimizationStatus.Completed))
                {
                    return(Application.Current.Resources["BlueBrush"]);
                }
                else if (status.Equals(OptimizationStatus.Stopped))
                {
                    return(Application.Current.Resources["RedBrush"]);
                }
                else if (status.Equals(OptimizationStatus.None))
                {
                    return(Application.Current.Resources["GrayBrush"]);
                }
            }

            // Initial state is None, so the color is Gray
            return(Application.Current.Resources["GrayBrush"]);
        }
 /// <summary>
 /// Initializes an instance of the optimization summary.
 /// </summary>
 /// <param name="status">Status of the completed optimization.</param>
 /// <param name="nf">Number of function evaluations.</param>
 /// <param name="x">Optimized variable array.</param>
 /// <param name="f">Optimal value of the objective function.</param>
 /// <param name="g">If defined, values of constraint functions at optimum.</param>
 internal OptimizationSummary(OptimizationStatus status, int nf, double[] x, double f, double[] g = null)
 {
     Status = status;
     Evals = nf;
     X = x;
     F = f;
     G = g;
 }
示例#3
0
        public void FindMinimum_BobyqaTestCase_ReturnStatusNormal(int m, int npt)
        {
            //     Test problem for BOBYQA, the objective function being the sum of
            //     the reciprocals of all pairwise distances between the points P_I,
            //     I=1,2,...,M in two dimensions, where M=N/2 and where the components
            //     of P_I are X(2*I-1) and X(2*I). Thus each vector X of N variables
            //     defines the M points P_I. The initial X gives equally spaced points
            //     on a circle. Four different choices of the pairs (N,NPT) are tried,
            //     namely (10,16), (10,21), (20,26) and (20,41). Convergence to a local
            //     minimum that is not global occurs in both the N=10 cases. The details
            //     of the results are highly sensitive to computer rounding errors. The
            //     choice IPRINT=2 provides the current X and optimal F so far whenever
            //     RHO is reduced. The bound constraints of the problem require every
            //     component of X to be in the interval [-1,1].

            var n  = 2 * m;
            var x0 = new double[n];
            var xl = new double[n];
            var xu = new double[n];

            const double bdl = -1.0;
            const double bdu = 1.0;

            for (var i = 0; i < n; ++i)
            {
                xl[i] = bdl;
                xu[i] = bdu;
            }

            Console.WriteLine("{0}2D output with M ={1,4},  N ={2,4}  and  NPT ={3,4}", Environment.NewLine, m, n, npt);

            for (var j = 1; j <= m; ++j)
            {
                var temp = 2.0 * Math.PI * j / m;
                x0[2 * j - 2] = Math.Cos(temp);
                x0[2 * j - 1] = Math.Sin(temp);
            }

            const int    iprint = 2;
            const int    maxfun = 500000;
            const double rhobeg = 1.0E-1;
            const double rhoend = 1.0E-6;

            var optimizer = new Bobyqa(n, this.BobyqaTestCalfun, xl, xu)
            {
                InterpolationConditions = npt,
                TrustRegionRadiusStart  = rhobeg,
                TrustRegionRadiusEnd    = rhoend,
                PrintLevel           = iprint,
                MaximumFunctionCalls = maxfun
            };

            const OptimizationStatus expected = OptimizationStatus.Normal;
            var actual = optimizer.FindMinimum(x0).Status;

            Assert.AreEqual(expected, actual);
        }
示例#4
0
 /// <summary>
 /// Sets the current optimization status
 /// </summary>
 /// <param name="optimizationStatus">The new optimization status</param>
 protected virtual void SetOptimizationStatus(OptimizationStatus optimizationStatus)
 {
     lock (_statusLock)
     {
         // we never come back from an aborted/ended status
         if (Status != OptimizationStatus.Aborted && Status != OptimizationStatus.Completed)
         {
             Status = optimizationStatus;
         }
     }
 }
示例#5
0
        public virtual MazeCycleOutcome Travel(int?timerTimeout = null, CancellationToken?token = null)
        {
            const int START_RANDOM = 30;
            const int END_RANDOM   = 5;

            OptimizationStatus?.Invoke("Initializing...");

            int      sessions  = simSettings.SimType == SimulationType.Sessions ? simSettings.Sessions.Value : 100;
            DateTime startedOn = simSettings.StartedOn = DateTime.Now;

            if (simSettings.SimType == SimulationType.Time)
            {
                simSettings.EndsOn = startedOn.AddHours(simSettings.Hours.Value);
            }

            CreateOrLoadNetwork(simSettings.DBIdentifier, sessions, START_RANDOM, END_RANDOM);

            OptimizationStatus?.Invoke("Training...");

            MazeCycleOutcome outcome      = null;
            bool             stopTraining = false;

            do
            {
                for (int i = 0; i < sessions; i++)
                {
                    outcome = Travel(true, token: token, perMoveDisplay: simSettings.EnableSimDisplay);

                    if ((simSettings.SimType == SimulationType.Score && outcome.FinalScore >= simSettings.Score.Value) ||
                        (simSettings.SimType == SimulationType.Time && simSettings.EndsOn < DateTime.Now) ||
                        (token.HasValue && token.Value.IsCancellationRequested))
                    {
                        stopTraining = true;
                        break;
                    }
                }

                if (simSettings.SimType == SimulationType.Sessions)
                {
                    stopTraining = true;
                }

                ResetRLM();
            } while (!stopTraining);

            if (!token.HasValue || (token.HasValue && !token.Value.IsCancellationRequested))
            {
                if (simSettings.SimType == SimulationType.Score)
                {
                    for (int i = 0; i < SimulationSettings.NUM_SCORE_HITS - 1; i++)
                    {
                        Travel(false, token: token, perMoveDisplay: simSettings.EnableSimDisplay);
                    }
                }

                Travel(false, timerTimeout, token, true);

                TrainingDone();

                OptimizationStatus?.Invoke("Done");
            }

            return(outcome);
        }
示例#6
0
 /// <summary>
 /// Argument Constructor
 /// </summary>
 /// <param name="strategyType">Strategy Type containing TradeHubStrategy</param>
 public BruteForceParameters(Type strategyType)
 {
     _status           = OptimizationStatus.None;
     _strategyType     = strategyType;
     _parameterDetails = new ObservableCollection <BruteForceParameterDetail>();
 }