コード例 #1
0
        public override IOperation Apply()
        {
            IVRPMove move = VRPMoveParameter.ActualValue as IVRPMove;

            ITabuMaker moveTabuMaker = move.GetTabuMaker();

            (moveTabuMaker as IVRPMoveOperator).VRPMoveParameter.ActualName = VRPMoveParameter.Name;

            OperationCollection next = new OperationCollection(base.Apply());

            next.Insert(0, ExecutionContext.CreateOperation(moveTabuMaker));

            return(next);
        }
コード例 #2
0
        private void UpdateMoveParameters()
        {
            IMoveMaker oldMoveMaker = MoveMaker;
            ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator;
            ITabuChecker oldTabuChecker   = TabuChecker;
            ITabuMaker   oldTabuMoveMaker = TabuMaker;

            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();
                ITabuChecker defaultTabuChecker = operators.OfType <ITabuChecker>().FirstOrDefault();
                ITabuMaker   defaultTabuMaker   = operators.OfType <ITabuMaker>().FirstOrDefault();

                foreach (IMoveMaker moveMaker in operators.OfType <IMoveMaker>())
                {
                    MoveMakerParameter.ValidValues.Add(moveMaker);
                }
                foreach (ISingleObjectiveMoveEvaluator moveEvaluator in operators.OfType <ISingleObjectiveMoveEvaluator>())
                {
                    MoveEvaluatorParameter.ValidValues.Add(moveEvaluator);
                }
                foreach (ITabuChecker tabuMoveEvaluator in operators.OfType <ITabuChecker>())
                {
                    TabuCheckerParameter.ValidValues.Add(tabuMoveEvaluator);
                }
                foreach (ITabuMaker tabuMoveMaker in operators.OfType <ITabuMaker>())
                {
                    TabuMakerParameter.ValidValues.Add(tabuMoveMaker);
                }

                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;
                }

                if (oldTabuMoveMaker != null)
                {
                    ITabuMaker tmm = TabuMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuMoveMaker.GetType());
                    if (tmm != null)
                    {
                        TabuMaker = tmm;
                    }
                    else
                    {
                        oldTabuMoveMaker = null;
                    }
                }
                if (oldTabuMoveMaker == null && defaultTabuMaker != null)
                {
                    TabuMaker = defaultTabuMaker;
                }

                if (oldTabuChecker != null)
                {
                    ITabuChecker tme = TabuCheckerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuChecker.GetType());
                    if (tme != null)
                    {
                        TabuChecker = tme;
                    }
                    else
                    {
                        oldTabuChecker = null;
                    }
                }
                if (oldTabuChecker == null && defaultTabuChecker != null)
                {
                    TabuChecker = defaultTabuChecker;
                }
            }
        }