Example #1
0
        private void UpdateMoveParameters()
        {
            IMoveMaker oldMoveMaker = MoveMaker;
            ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator;

            ClearMoveParameters();
            if (MoveGenerator != null)
            {
                List <Type> moveTypes = MoveGenerator.GetType().GetInterfaces().Where(x => typeof(IMoveOperator).IsAssignableFrom(x)).ToList();
                foreach (Type type in moveTypes.ToList())
                {
                    if (moveTypes.Any(t => t != type && type.IsAssignableFrom(t)))
                    {
                        moveTypes.Remove(type);
                    }
                }

                var        operators        = Problem.Operators.Where(op => moveTypes.Any(m => m.IsInstanceOfType(op))).ToList();
                IMoveMaker defaultMoveMaker = operators.OfType <IMoveMaker>().FirstOrDefault();
                ISingleObjectiveMoveEvaluator defaultMoveEvaluator = operators.OfType <ISingleObjectiveMoveEvaluator>().FirstOrDefault();
                foreach (IMoveMaker moveMaker in operators.OfType <IMoveMaker>().OrderBy(op => op.Name))
                {
                    MoveMakerParameter.ValidValues.Add(moveMaker);
                }
                foreach (ISingleObjectiveMoveEvaluator moveEvaluator in operators.OfType <ISingleObjectiveMoveEvaluator>().OrderBy(op => op.Name))
                {
                    MoveEvaluatorParameter.ValidValues.Add(moveEvaluator);
                }

                if (oldMoveMaker != null)
                {
                    IMoveMaker mm = MoveMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveMaker.GetType());
                    if (mm != null)
                    {
                        MoveMaker = mm;
                    }
                    else
                    {
                        oldMoveMaker = null;
                    }
                }
                if (oldMoveMaker == null && defaultMoveMaker != null)
                {
                    MoveMaker = defaultMoveMaker;
                }

                if (oldMoveEvaluator != null)
                {
                    ISingleObjectiveMoveEvaluator me = MoveEvaluatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMoveEvaluator.GetType());
                    if (me != null)
                    {
                        MoveEvaluator = me;
                    }
                    else
                    {
                        oldMoveEvaluator = null;
                    }
                }
                if (oldMoveEvaluator == null && defaultMoveEvaluator != null)
                {
                    MoveEvaluator = defaultMoveEvaluator;
                }
            }
        }