Example #1
0
 private RobustTabooSearch(RobustTabooSearch original, Cloner cloner)
     : base(original, cloner)
 {
     solutionsCreator = cloner.Clone(original.solutionsCreator);
     mainOperator     = cloner.Clone(original.mainOperator);
     qualityAnalyzer  = cloner.Clone(original.qualityAnalyzer);
     RegisterEventHandlers();
 }
    public RobustTabooSearch() {
      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
      Parameters.Add(new FixedValueParameter<IntValue>("Seed", "The seed value of the random number generator.", new IntValue(0)));
      Parameters.Add(new FixedValueParameter<BoolValue>("SetSeedRandomly", "True whether the seed should be set randomly for each run, false if it should be fixed.", new BoolValue(true)));
      Parameters.Add(new FixedValueParameter<IntValue>("MaximumIterations", "The number of iterations that the algorithm should run.", new IntValue(10000)));
      Parameters.Add(new FixedValueParameter<IntValue>("MinimumTabuTenure", "The minimum tabu tenure.", new IntValue(10)));
      Parameters.Add(new FixedValueParameter<IntValue>("MaximumTabuTenure", "The maximum tabu tenure.", new IntValue(20)));
      Parameters.Add(new FixedValueParameter<BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others.", new BoolValue(false)));
      Parameters.Add(new FixedValueParameter<IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition.", new IntValue(int.MaxValue)));
      Parameters.Add(new FixedValueParameter<BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(false)));
      Parameters.Add(new FixedValueParameter<BoolValue>("UseNewTabuTenureAdaptionScheme", @"In an updated version of his implementation, Eric Taillard introduced a different way to change the tabu tenure.
Instead of setting it uniformly between min and max, it will be set between 0 and max according to a right-skewed distribution.
Set this option to false if you want to optimize using the earlier 1991 version, and set to true if you want to optimize using the newer version.
Please note that the MinimumTabuTenure parameter has no effect in the new version.", new BoolValue(true)));

      TerminateOnOptimalSolutionParameter.Hidden = true;

      qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
      qualityAnalyzer.ResultsParameter.ActualName = "Results";
      AnalyzerParameter.Value.Operators.Add(qualityAnalyzer);

      RandomCreator randomCreator = new RandomCreator();
      randomCreator.RandomParameter.ActualName = "Random";
      randomCreator.SeedParameter.Value = null;
      randomCreator.SeedParameter.ActualName = SeedParameter.Name;
      randomCreator.SetSeedRandomlyParameter.Value = null;
      randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;

      VariableCreator variableCreator = new VariableCreator();
      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Iterations", new IntValue(0)));
      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("EvaluatedSolutions", new IntValue(1)));
      variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("EvaluatedSolutionEquivalents", new DoubleValue(1)));

      ResultsCollector resultsCollector = new ResultsCollector();
      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Iterations", "The actual iteration."));
      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("EvaluatedSolutions", "Number of evaluated solutions."));

      solutionsCreator = new SolutionsCreator();
      solutionsCreator.NumberOfSolutions = new IntValue(1);

      Placeholder analyzer = new Placeholder();
      analyzer.Name = "(Analyzer)";
      analyzer.OperatorParameter.ActualName = AnalyzerParameter.Name;

      UniformSubScopesProcessor ussp = new UniformSubScopesProcessor();

      mainOperator = new RobustTabooSeachOperator();
      mainOperator.AlternativeAspirationTenureParameter.ActualName = AlternativeAspirationTenureParameter.Name;
      mainOperator.BestQualityParameter.ActualName = "BestSoFarQuality";
      mainOperator.IterationsParameter.ActualName = "Iterations";
      mainOperator.LastMoveParameter.ActualName = "LastMove";
      mainOperator.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
      mainOperator.MaximumTabuTenureParameter.ActualName = MaximumTabuTenureParameter.Name;
      mainOperator.MinimumTabuTenureParameter.ActualName = MinimumTabuTenureParameter.Name;
      mainOperator.MoveQualityMatrixParameter.ActualName = "MoveQualityMatrix";
      mainOperator.RandomParameter.ActualName = "Random";
      mainOperator.ResultsParameter.ActualName = "Results";
      mainOperator.ShortTermMemoryParameter.ActualName = "ShortTermMemory";
      mainOperator.UseAlternativeAspirationParameter.ActualName = UseAlternativeAspirationParameter.Name;
      mainOperator.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
      mainOperator.EvaluatedSolutionEquivalentsParameter.ActualName = "EvaluatedSolutionEquivalents";

      ConditionalBranch qualityStopBranch = new ConditionalBranch();
      qualityStopBranch.Name = "Terminate on optimal quality?";
      qualityStopBranch.ConditionParameter.ActualName = "TerminateOnOptimalSolution";

      Comparator qualityComparator = new Comparator();
      qualityComparator.Comparison = new Comparison(ComparisonType.Greater);
      qualityComparator.LeftSideParameter.ActualName = "BestQuality";
      qualityComparator.RightSideParameter.ActualName = "BestKnownQuality";
      qualityComparator.ResultParameter.ActualName = "ContinueByQuality";

      ConditionalBranch continueByQualityBranch = new ConditionalBranch();
      continueByQualityBranch.ConditionParameter.ActualName = "ContinueByQuality";

      IntCounter iterationsCounter = new IntCounter();
      iterationsCounter.ValueParameter.ActualName = "Iterations";
      iterationsCounter.Increment = new IntValue(1);

      Comparator comparator = new Comparator();
      comparator.Name = "Iterations < MaximumIterations ?";
      comparator.LeftSideParameter.ActualName = "Iterations";
      comparator.RightSideParameter.ActualName = MaximumIterationsParameter.Name;
      comparator.Comparison = new Comparison(ComparisonType.Less);
      comparator.ResultParameter.ActualName = "ContinueByIteration";

      ConditionalBranch continueByIterationBranch = new ConditionalBranch();
      continueByIterationBranch.ConditionParameter.ActualName = "ContinueByIteration";

      OperatorGraph.InitialOperator = randomCreator;
      randomCreator.Successor = variableCreator;
      variableCreator.Successor = resultsCollector;
      resultsCollector.Successor = solutionsCreator;
      solutionsCreator.Successor = analyzer;
      analyzer.Successor = ussp;
      ussp.Operator = mainOperator;
      ussp.Successor = qualityStopBranch;
      qualityStopBranch.FalseBranch = iterationsCounter;
      qualityStopBranch.TrueBranch = qualityComparator;
      qualityStopBranch.Successor = null;
      qualityComparator.Successor = continueByQualityBranch;
      continueByQualityBranch.TrueBranch = iterationsCounter;
      continueByQualityBranch.FalseBranch = null;
      continueByQualityBranch.Successor = null;
      iterationsCounter.Successor = comparator;
      comparator.Successor = continueByIterationBranch;
      continueByIterationBranch.TrueBranch = analyzer;
      continueByIterationBranch.FalseBranch = null;
      continueByIterationBranch.Successor = null;

      RegisterEventHandlers();
      Problem = new QuadraticAssignmentProblem();
    }
 private RobustTabooSearch(RobustTabooSearch original, Cloner cloner)
   : base(original, cloner) {
   solutionsCreator = cloner.Clone(original.solutionsCreator);
   mainOperator = cloner.Clone(original.mainOperator);
   qualityAnalyzer = cloner.Clone(original.qualityAnalyzer);
   RegisterEventHandlers();
 }
 private RobustTabooSeachOperator(RobustTabooSeachOperator original, Cloner cloner)
   : base(original, cloner) {
 }
Example #5
0
 private RobustTabooSeachOperator(RobustTabooSeachOperator original, Cloner cloner)
     : base(original, cloner)
 {
 }
Example #6
0
        public RobustTabooSearch()
        {
            Parameters.Add(new ValueParameter <MultiAnalyzer>("Analyzer", "The analyzers that are applied after each iteration.", new MultiAnalyzer()));
            Parameters.Add(new FixedValueParameter <IntValue>("Seed", "The seed value of the random number generator.", new IntValue(0)));
            Parameters.Add(new FixedValueParameter <BoolValue>("SetSeedRandomly", "True whether the seed should be set randomly for each run, false if it should be fixed.", new BoolValue(true)));
            Parameters.Add(new FixedValueParameter <IntValue>("MaximumIterations", "The number of iterations that the algorithm should run.", new IntValue(10000)));
            Parameters.Add(new FixedValueParameter <IntValue>("MinimumTabuTenure", "The minimum tabu tenure.", new IntValue(10)));
            Parameters.Add(new FixedValueParameter <IntValue>("MaximumTabuTenure", "The maximum tabu tenure.", new IntValue(20)));
            Parameters.Add(new FixedValueParameter <BoolValue>("UseAlternativeAspiration", "True if the alternative aspiration condition should be used that takes moves that have not been made for some time above others.", new BoolValue(false)));
            Parameters.Add(new FixedValueParameter <IntValue>("AlternativeAspirationTenure", "The time t that a move will be remembered for the alternative aspiration condition.", new IntValue(int.MaxValue)));
            Parameters.Add(new FixedValueParameter <BoolValue>("TerminateOnOptimalSolution", "True when the algorithm should stop if it reached a quality equal or smaller to the BestKnownQuality.", new BoolValue(false)));
            Parameters.Add(new FixedValueParameter <BoolValue>("UseNewTabuTenureAdaptionScheme", @"In an updated version of his implementation, Eric Taillard introduced a different way to change the tabu tenure.
Instead of setting it uniformly between min and max, it will be set between 0 and max according to a right-skewed distribution.
Set this option to false if you want to optimize using the earlier 1991 version, and set to true if you want to optimize using the newer version.
Please note that the MinimumTabuTenure parameter has no effect in the new version.", new BoolValue(true)));

            TerminateOnOptimalSolutionParameter.Hidden = true;

            qualityAnalyzer = new BestAverageWorstQualityAnalyzer();
            qualityAnalyzer.ResultsParameter.ActualName = "Results";
            AnalyzerParameter.Value.Operators.Add(qualityAnalyzer);

            RandomCreator randomCreator = new RandomCreator();

            randomCreator.RandomParameter.ActualName          = "Random";
            randomCreator.SeedParameter.Value                 = null;
            randomCreator.SeedParameter.ActualName            = SeedParameter.Name;
            randomCreator.SetSeedRandomlyParameter.Value      = null;
            randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name;

            VariableCreator variableCreator = new VariableCreator();

            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("Iterations", new IntValue(0)));
            variableCreator.CollectedValues.Add(new ValueParameter <IntValue>("EvaluatedSolutions", new IntValue(1)));
            variableCreator.CollectedValues.Add(new ValueParameter <DoubleValue>("EvaluatedSolutionEquivalents", new DoubleValue(1)));

            ResultsCollector resultsCollector = new ResultsCollector();

            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("Iterations", "The actual iteration."));
            resultsCollector.CollectedValues.Add(new LookupParameter <IntValue>("EvaluatedSolutions", "Number of evaluated solutions."));

            solutionsCreator = new SolutionsCreator();
            solutionsCreator.NumberOfSolutions = new IntValue(1);

            Placeholder analyzer = new Placeholder();

            analyzer.Name = "(Analyzer)";
            analyzer.OperatorParameter.ActualName = AnalyzerParameter.Name;

            UniformSubScopesProcessor ussp = new UniformSubScopesProcessor();

            mainOperator = new RobustTabooSeachOperator();
            mainOperator.AlternativeAspirationTenureParameter.ActualName = AlternativeAspirationTenureParameter.Name;
            mainOperator.BestQualityParameter.ActualName                  = "BestSoFarQuality";
            mainOperator.IterationsParameter.ActualName                   = "Iterations";
            mainOperator.LastMoveParameter.ActualName                     = "LastMove";
            mainOperator.MaximumIterationsParameter.ActualName            = MaximumIterationsParameter.Name;
            mainOperator.MaximumTabuTenureParameter.ActualName            = MaximumTabuTenureParameter.Name;
            mainOperator.MinimumTabuTenureParameter.ActualName            = MinimumTabuTenureParameter.Name;
            mainOperator.MoveQualityMatrixParameter.ActualName            = "MoveQualityMatrix";
            mainOperator.RandomParameter.ActualName                       = "Random";
            mainOperator.ResultsParameter.ActualName                      = "Results";
            mainOperator.ShortTermMemoryParameter.ActualName              = "ShortTermMemory";
            mainOperator.UseAlternativeAspirationParameter.ActualName     = UseAlternativeAspirationParameter.Name;
            mainOperator.EvaluatedSolutionsParameter.ActualName           = "EvaluatedSolutions";
            mainOperator.EvaluatedSolutionEquivalentsParameter.ActualName = "EvaluatedSolutionEquivalents";

            ConditionalBranch qualityStopBranch = new ConditionalBranch();

            qualityStopBranch.Name = "Terminate on optimal quality?";
            qualityStopBranch.ConditionParameter.ActualName = "TerminateOnOptimalSolution";

            Comparator qualityComparator = new Comparator();

            qualityComparator.Comparison = new Comparison(ComparisonType.Greater);
            qualityComparator.LeftSideParameter.ActualName  = "BestQuality";
            qualityComparator.RightSideParameter.ActualName = "BestKnownQuality";
            qualityComparator.ResultParameter.ActualName    = "ContinueByQuality";

            ConditionalBranch continueByQualityBranch = new ConditionalBranch();

            continueByQualityBranch.ConditionParameter.ActualName = "ContinueByQuality";

            IntCounter iterationsCounter = new IntCounter();

            iterationsCounter.ValueParameter.ActualName = "Iterations";
            iterationsCounter.Increment = new IntValue(1);

            Comparator comparator = new Comparator();

            comparator.Name = "Iterations < MaximumIterations ?";
            comparator.LeftSideParameter.ActualName  = "Iterations";
            comparator.RightSideParameter.ActualName = MaximumIterationsParameter.Name;
            comparator.Comparison = new Comparison(ComparisonType.Less);
            comparator.ResultParameter.ActualName = "ContinueByIteration";

            ConditionalBranch continueByIterationBranch = new ConditionalBranch();

            continueByIterationBranch.ConditionParameter.ActualName = "ContinueByIteration";

            OperatorGraph.InitialOperator = randomCreator;
            randomCreator.Successor       = variableCreator;
            variableCreator.Successor     = resultsCollector;
            resultsCollector.Successor    = solutionsCreator;
            solutionsCreator.Successor    = analyzer;
            analyzer.Successor            = ussp;
            ussp.Operator  = mainOperator;
            ussp.Successor = qualityStopBranch;
            qualityStopBranch.FalseBranch       = iterationsCounter;
            qualityStopBranch.TrueBranch        = qualityComparator;
            qualityStopBranch.Successor         = null;
            qualityComparator.Successor         = continueByQualityBranch;
            continueByQualityBranch.TrueBranch  = iterationsCounter;
            continueByQualityBranch.FalseBranch = null;
            continueByQualityBranch.Successor   = null;
            iterationsCounter.Successor         = comparator;
            comparator.Successor = continueByIterationBranch;
            continueByIterationBranch.TrueBranch  = analyzer;
            continueByIterationBranch.FalseBranch = null;
            continueByIterationBranch.Successor   = null;

            RegisterEventHandlers();
            Problem = new QuadraticAssignmentProblem();
        }