Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/10 22:57:22 (14 years ago)
Author:
abeham
Message:

Fixed changing of MoveTabuParameter and added two different tabu criteria for a move: One prevents only readding deleted edges, the other prevents both readding deleted edges and deleting added edges. #840

Location:
trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3
Files:
2 edited

Legend:

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

    r3100 r3104  
    180180        op.MoveQualityParameter.ActualNameChanged += new EventHandler(MoveEvaluator_MoveQualityParameter_ActualNameChanged);
    181181      }
     182      foreach (ITabuMoveEvaluator op in Problem.Operators.OfType<ITabuMoveEvaluator>()) {
     183        op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
     184      }
    182185      ParameterizeSolutionsCreator();
    183       ParameterizeTSMainLoop();
     186      ParameterizeMainLoop();
    184187      ParameterizeMoveEvaluator();
    185188      ParameterizeMoveMaker();
     
    196199      ParameterizeStochasticOperator(Problem.Evaluator);
    197200      ParameterizeSolutionsCreator();
    198       ParameterizeTSMainLoop();
     201      ParameterizeMainLoop();
    199202      ParameterizeMoveEvaluator();
    200203      ParameterizeMoveMaker();
     
    210213        op.MoveQualityParameter.ActualNameChanged += new EventHandler(MoveEvaluator_MoveQualityParameter_ActualNameChanged);
    211214      }
     215      foreach (ITabuMoveEvaluator op in Problem.Operators.OfType<ITabuMoveEvaluator>()) {
     216        op.MoveTabuParameter.ActualNameChanged -= new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
     217        op.MoveTabuParameter.ActualNameChanged += new EventHandler(TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged);
     218      }
    212219      IMoveGenerator oldMoveGenerator = MoveGenerator;
    213220      UpdateMoveGenerator();
    214221      if (oldMoveGenerator == MoveGenerator) // in this case MoveGeneratorParameter_ValueChanged did not fire
    215222        UpdateMoveParameters();
    216       ParameterizeTSMainLoop();
     223      ParameterizeMainLoop();
    217224      ParameterizeMoveEvaluator();
    218225      ParameterizeMoveMaker();
     
    220227    }
    221228    private void Evaluator_QualityParameter_ActualNameChanged(object sender, EventArgs e) {
    222       ParameterizeTSMainLoop();
     229      ParameterizeMainLoop();
    223230      ParameterizeMoveEvaluator();
    224231      ParameterizeMoveMaker();
     
    228235    }
    229236    private void MoveEvaluatorParameter_ValueChanged(object sender, EventArgs e) {
    230       ParameterizeTSMainLoop();
     237      ParameterizeMainLoop();
    231238      ParameterizeMoveEvaluator();
    232239      ParameterizeMoveMaker();
    233240    }
    234241    private void MoveEvaluator_MoveQualityParameter_ActualNameChanged(object sender, EventArgs e) {
    235       ParameterizeTSMainLoop();
    236       ParameterizeMoveEvaluator();
    237       ParameterizeMoveMaker();
     242      ParameterizeMainLoop();
     243      ParameterizeMoveEvaluator();
     244      ParameterizeMoveMaker();
     245    }
     246    private void TabuMoveEvaluatorParameter_ValueChanged(object sender, EventArgs e) {
     247      ParameterizeMainLoop();
     248    }
     249    private void TabuMoveEvaluator_MoveTabuParameter_ActualNameChanged(object sender, EventArgs e) {
     250      ParameterizeMainLoop();
    238251    }
    239252    #endregion
     
    250263      MoveGeneratorParameter.ValueChanged += new EventHandler(MoveGeneratorParameter_ValueChanged);
    251264      MoveEvaluatorParameter.ValueChanged += new EventHandler(MoveEvaluatorParameter_ValueChanged);
     265      TabuMoveEvaluatorParameter.ValueChanged += new EventHandler(TabuMoveEvaluatorParameter_ValueChanged);
    252266    }
    253267    private void UpdateMoveGenerator() {
     
    313327      SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
    314328    }
    315     private void ParameterizeTSMainLoop() {
     329    private void ParameterizeMainLoop() {
    316330      MainLoop.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
    317331      MainLoop.QualityParameter.ActualName = Problem.Evaluator.QualityParameter.ActualName;
    318332      if (MoveEvaluator != null)
    319333        MainLoop.MoveQualityParameter.ActualName = MoveEvaluator.MoveQualityParameter.ActualName;
     334      if (TabuMoveEvaluator != null)
     335        MainLoop.MoveTabuParameter.ActualName = TabuMoveEvaluator.MoveTabuParameter.ActualName;
    320336    }
    321337    private void ParameterizeStochasticOperator(IOperator op) {
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs

    r3100 r3104  
    4848      get { return (LookupParameter<DoubleValue>)Parameters["MoveQuality"]; }
    4949    }
     50    public LookupParameter<BoolValue> MoveTabuParameter {
     51      get { return (LookupParameter<BoolValue>)Parameters["MoveTabu"]; }
     52    }
    5053    public ValueLookupParameter<IntValue> MaximumIterationsParameter {
    5154      get { return (ValueLookupParameter<IntValue>)Parameters["MaximumIterations"]; }
     
    8891      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
    8992      Parameters.Add(new LookupParameter<DoubleValue>("MoveQuality", "The value which represents the quality of a move."));
     93      Parameters.Add(new LookupParameter<BoolValue>("MoveTabu", "The value that indicates if a move is tabu or not."));
    9094      Parameters.Add(new ValueLookupParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed."));
    9195      Parameters.Add(new ValueLookupParameter<IntValue>("TabuTenure", "The length of the tabu list, and also means the number of iterations a move is kept tabu"));
Note: See TracChangeset for help on using the changeset viewer.