Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/14/10 03:52:07 (14 years ago)
Author:
abeham
Message:

Updated Tabu search, permutation move operators, real vector move operators, binary vector move operators #840
Added a Tabu Search TSP workbench

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs

    r3280 r3340  
    6363      get { return (ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>)Parameters["MoveEvaluator"]; }
    6464    }
    65     private ConstrainedValueParameter<ITabuChecker> TabuMoveEvaluatorParameter {
    66       get { return (ConstrainedValueParameter<ITabuChecker>)Parameters["TabuMoveEvaluator"]; }
    67     }
    68     private ConstrainedValueParameter<ITabuMaker> TabuMoveMakerParameter {
    69       get { return (ConstrainedValueParameter<ITabuMaker>)Parameters["TabuMoveMaker"]; }
     65    private ConstrainedValueParameter<ITabuChecker> TabuCheckerParameter {
     66      get { return (ConstrainedValueParameter<ITabuChecker>)Parameters["TabuChecker"]; }
     67    }
     68    private ConstrainedValueParameter<ITabuMaker> TabuMakerParameter {
     69      get { return (ConstrainedValueParameter<ITabuMaker>)Parameters["TabuMaker"]; }
    7070    }
    7171    private ValueParameter<IntValue> TabuTenureParameter {
     
    101101      set { MoveEvaluatorParameter.Value = value; }
    102102    }
    103     public ITabuChecker TabuMoveEvaluator {
    104       get { return TabuMoveEvaluatorParameter.Value; }
    105       set { TabuMoveEvaluatorParameter.Value = value; }
    106     }
    107     public ITabuMaker TabuMoveMaker {
    108       get { return TabuMoveMakerParameter.Value; }
    109       set { TabuMoveMakerParameter.Value = value; }
     103    public ITabuChecker TabuChecker {
     104      get { return TabuCheckerParameter.Value; }
     105      set { TabuCheckerParameter.Value = value; }
     106    }
     107    public ITabuMaker TabuMaker {
     108      get { return TabuMakerParameter.Value; }
     109      set { TabuMakerParameter.Value = value; }
    110110    }
    111111    public IntValue TabuTenure {
     
    135135      Parameters.Add(new ConstrainedValueParameter<IMoveMaker>("MoveMaker", "The operator used to perform a move."));
    136136      Parameters.Add(new ConstrainedValueParameter<ISingleObjectiveMoveEvaluator>("MoveEvaluator", "The operator used to evaluate a move."));
    137       Parameters.Add(new ConstrainedValueParameter<ITabuChecker>("TabuMoveEvaluator", "The operator to evaluate whether a move is tabu or not."));
    138       Parameters.Add(new ConstrainedValueParameter<ITabuMaker>("TabuMoveMaker", "The operator used to insert attributes of a move into the tabu list."));
     137      Parameters.Add(new ConstrainedValueParameter<ITabuChecker>("TabuChecker", "The operator to check whether a move is tabu or not."));
     138      Parameters.Add(new ConstrainedValueParameter<ITabuMaker>("TabuMaker", "The operator used to insert attributes of a move into the tabu list."));
    139139      Parameters.Add(new ValueParameter<IntValue>("TabuTenure", "The length of the tabu list.", new IntValue(10)));
    140140      Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    141       Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(20)));
     141      Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(100)));
    142142
    143143      RandomCreator randomCreator = new RandomCreator();
     
    159159      tsMainLoop.MoveMakerParameter.ActualName = MoveMakerParameter.Name;
    160160      tsMainLoop.MoveEvaluatorParameter.ActualName = MoveEvaluatorParameter.Name;
    161       tsMainLoop.TabuMoveEvaluatorParameter.ActualName = TabuMoveEvaluatorParameter.Name;
    162       tsMainLoop.TabuMoveMakerParameter.ActualName = TabuMoveMakerParameter.Name;
     161      tsMainLoop.TabuCheckerParameter.ActualName = TabuCheckerParameter.Name;
     162      tsMainLoop.TabuMakerParameter.ActualName = TabuMakerParameter.Name;
    163163      tsMainLoop.MaximumIterationsParameter.ActualName = MaximumIterationsParameter.Name;
    164164      tsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
     
    178178    public override void Prepare() {
    179179      if (Problem != null && MoveGenerator != null && MoveMaker != null && MoveEvaluator != null &&
    180           TabuMoveEvaluator != null && TabuMoveMaker != null)
     180          TabuChecker != null && TabuMaker != null)
    181181        base.Prepare();
    182182    }
     
    191191      }
    192192      foreach (ITabuChecker op in Problem.Operators.OfType<ITabuChecker>()) {
    193         op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
     193        op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuChecker_MoveTabuParameter_ActualNameChanged);
    194194      }
    195195      ParameterizeSolutionsCreator();
     
    200200      ParameterizeMoveEvaluator();
    201201      ParameterizeMoveMaker();
     202      ParameterizeTabuMaker();
     203      ParameterizeTabuChecker();
    202204      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    203205      base.OnProblemChanged();
     
    214216      ParameterizeMoveEvaluator();
    215217      ParameterizeMoveMaker();
     218      ParameterizeTabuMaker();
     219      ParameterizeTabuChecker();
    216220      Problem.Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    217221      base.Problem_EvaluatorChanged(sender, e);
     
    232236      }
    233237      foreach (ITabuChecker op in Problem.Operators.OfType<ITabuChecker>()) {
    234         op.MoveTabuParameter.ActualNameChanged -= new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
    235         op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
     238        op.MoveTabuParameter.ActualNameChanged -= new EventHandler(TabuChecker_MoveTabuParameter_ActualNameChanged);
     239        op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuChecker_MoveTabuParameter_ActualNameChanged);
    236240      }
    237241      UpdateMoveGenerator();
     
    241245      ParameterizeMoveEvaluator();
    242246      ParameterizeMoveMaker();
     247      ParameterizeTabuMaker();
     248      ParameterizeTabuChecker();
    243249      base.Problem_OperatorsChanged(sender, e);
    244250    }
     
    247253      ParameterizeMoveEvaluator();
    248254      ParameterizeMoveMaker();
     255      ParameterizeTabuMaker();
     256      ParameterizeTabuChecker();
    249257    }
    250258    private void MoveGeneratorParameter_ValueChanged(object sender, EventArgs e) {
     
    255263      ParameterizeMoveEvaluator();
    256264      ParameterizeMoveMaker();
     265      ParameterizeTabuMaker();
     266      ParameterizeTabuChecker();
    257267    }
    258268    private void MoveEvaluator_MoveQualityParameter_ActualNameChanged(object sender, EventArgs e) {
     
    260270      ParameterizeMoveEvaluator();
    261271      ParameterizeMoveMaker();
    262     }
    263     private void TabuMoveEvaluatorParameter_ValueChanged(object sender, EventArgs e) {
    264       ParameterizeMainLoop();
    265     }
    266     private void TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged(object sender, EventArgs e) {
     272      ParameterizeTabuMaker();
     273      ParameterizeTabuChecker();
     274    }
     275    private void TabuCheckerParameter_ValueChanged(object sender, EventArgs e) {
     276      ParameterizeMainLoop();
     277    }
     278    private void TabuChecker_MoveTabuParameter_ActualNameChanged(object sender, EventArgs e) {
    267279      ParameterizeMainLoop();
    268280    }
     
    287299      MoveGeneratorParameter.ValueChanged += new EventHandler(MoveGeneratorParameter_ValueChanged);
    288300      MoveEvaluatorParameter.ValueChanged += new EventHandler(MoveEvaluatorParameter_ValueChanged);
    289       TabuMoveEvaluatorParameter.ValueChanged += new EventHandler(TabuMoveEvaluatorParameter_ValueChanged);
     301      TabuCheckerParameter.ValueChanged += new EventHandler(TabuCheckerParameter_ValueChanged);
    290302      SampleSizeParameter.NameChanged += new EventHandler(SampleSizeParameter_NameChanged);
    291303    }
     
    307319      IMoveMaker oldMoveMaker = MoveMaker;
    308320      ISingleObjectiveMoveEvaluator oldMoveEvaluator = MoveEvaluator;
    309       ITabuChecker oldTabuMoveEvaluator = TabuMoveEvaluator;
    310       ITabuMaker oldTabuMoveMaker = TabuMoveMaker;
     321      ITabuChecker oldTabuMoveEvaluator = TabuChecker;
     322      ITabuMaker oldTabuMoveMaker = TabuMaker;
    311323      ClearMoveParameters();
    312324      if (MoveGenerator != null) {
     
    323335            MoveEvaluatorParameter.ValidValues.Add(moveEvaluator);
    324336          foreach (ITabuChecker tabuMoveEvaluator in operators.OfType<ITabuChecker>())
    325             TabuMoveEvaluatorParameter.ValidValues.Add(tabuMoveEvaluator);
     337            TabuCheckerParameter.ValidValues.Add(tabuMoveEvaluator);
    326338          foreach (ITabuMaker tabuMoveMaker in operators.OfType<ITabuMaker>())
    327             TabuMoveMakerParameter.ValidValues.Add(tabuMoveMaker);
     339            TabuMakerParameter.ValidValues.Add(tabuMoveMaker);
    328340        }
    329341        if (oldMoveMaker != null) {
     
    336348        }
    337349        if (oldTabuMoveMaker != null) {
    338           ITabuMaker tmm = TabuMoveMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuMoveMaker.GetType());
    339           if (tmm != null) TabuMoveMaker = tmm;
     350          ITabuMaker tmm = TabuMakerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuMoveMaker.GetType());
     351          if (tmm != null) TabuMaker = tmm;
    340352        }
    341353        if (oldTabuMoveEvaluator != null) {
    342           ITabuChecker tme = TabuMoveEvaluatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuMoveEvaluator.GetType());
    343           if (tme != null) TabuMoveEvaluator = tme;
     354          ITabuChecker tme = TabuCheckerParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldTabuMoveEvaluator.GetType());
     355          if (tme != null) TabuChecker = tme;
    344356        }
    345357      }
     
    348360      MoveMakerParameter.ValidValues.Clear();
    349361      MoveEvaluatorParameter.ValidValues.Clear();
    350       TabuMoveEvaluatorParameter.ValidValues.Clear();
    351       TabuMoveMakerParameter.ValidValues.Clear();
     362      TabuCheckerParameter.ValidValues.Clear();
     363      TabuMakerParameter.ValidValues.Clear();
    352364    }
    353365    private void ParameterizeSolutionsCreator() {
     
    361373      if (MoveEvaluator != null)
    362374        MainLoop.MoveQualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
    363       if (TabuMoveEvaluator != null)
    364         MainLoop.MoveTabuParameter.ActualName = TabuMoveEvaluator.MoveTabuParameter.ActualName;
     375      if (TabuChecker != null)
     376        MainLoop.MoveTabuParameter.ActualName = TabuChecker.MoveTabuParameter.ActualName;
    365377      MainLoop.VisualizerParameter.ActualName = Problem.VisualizerParameter.Name;
    366378      if (Problem.Visualizer != null)
     
    389401      }
    390402    }
     403    private void ParameterizeTabuMaker() {
     404      foreach (ITabuMaker op in Problem.Operators.OfType<ITabuMaker>()) {
     405        op.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
     406        if (MoveEvaluator != null)
     407          op.MoveQualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
     408      }
     409    }
     410    private void ParameterizeTabuChecker() {
     411      foreach (ITabuChecker op in Problem.Operators.OfType<ITabuChecker>()) {
     412        if (MoveEvaluator != null)
     413          op.MoveQualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
     414        if (TabuChecker != null)
     415          op.MoveTabuParameter.ActualName = TabuChecker.MoveTabuParameter.ActualName;
     416      }
     417    }
    391418    #endregion
    392419  }
Note: See TracChangeset for help on using the changeset viewer.