Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
08/05/20 04:37:37 (4 years ago)
Author:
abeham
Message:

#2521: working on VRP (refactoring all the capabilities, features, and operator discovery)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs

    r17711 r17717  
    153153    }
    154154
    155     [Storable(OldName = "operators")]
    156     private List<IOperator> StorableOperators {
    157       set { Operators.AddRange(value); }
    158     }
    159 
    160155    private void AttachEventHandlers() {
    161156      ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged);
     
    166161      if (ProblemInstance != null) {
    167162        ProblemInstance.EvaluationChanged += new EventHandler(ProblemInstance_EvaluationChanged);
     163      }
     164    }
     165
     166    void BestKnownSolutionParameter_ValueChanged(object sender, EventArgs e) {
     167      EvalBestKnownSolution();
     168    }
     169
     170    void ProblemInstance_EvaluationChanged(object sender, EventArgs e) {
     171      BestKnownQuality = double.NaN;
     172      if (BestKnownSolution != null) {
     173        // the tour is not valid if there are more vehicles in it than allowed
     174        if (ProblemInstance.Vehicles.Value < BestKnownSolution.Solution.GetTours().Count) {
     175          BestKnownSolution = null;
     176        } else EvalBestKnownSolution();
    168177      }
    169178    }
     
    182191    }
    183192
    184     void BestKnownSolutionParameter_ValueChanged(object sender, EventArgs e) {
    185       EvalBestKnownSolution();
    186     }
    187 
    188     void ProblemInstance_EvaluationChanged(object sender, EventArgs e) {
    189       BestKnownQuality = double.NaN;
    190       if (BestKnownSolution != null) {
    191         // the tour is not valid if there are more vehicles in it than allowed
    192         if (ProblemInstance.Vehicles.Value < BestKnownSolution.Solution.GetTours().Count) {
    193           BestKnownSolution = null;
    194         } else EvalBestKnownSolution();
    195       }
    196     }
    197 
    198193    void ProblemInstanceParameter_ValueChanged(object sender, EventArgs e) {
    199194      InitializeOperators();
    200195      AttachProblemInstanceEventHandlers();
    201 
    202       OnOperatorsChanged();
    203     }
    204 
    205     public void SetProblemInstance(IVRPProblemInstance instance) {
    206       ProblemInstanceParameter.ValueChanged -= new EventHandler(ProblemInstanceParameter_ValueChanged);
    207 
    208       ProblemInstance = instance;
    209       AttachProblemInstanceEventHandlers();
    210 
    211       ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged);
     196    }
     197
     198    protected override void OnEncodingChanged() {
     199      base.OnEncodingChanged();
     200      InitializeOperators();
    212201    }
    213202
     
    215204      Encoding.FilterOperators(ProblemInstance);
    216205
    217       Operators.Add(new VRPSimilarityCalculator());
    218       Operators.Add(new QualitySimilarityCalculator());
    219       Operators.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
    220       //Operators.AddRange(ProblemInstance.Operators.OfType<IAnalyzer>());
     206      var newOps = new List<IItem>();
     207      var operatorTypes = new HashSet<Type>(Operators.Select(x => x.GetType()));
     208      if (operatorTypes.Add(typeof(VRPSimilarityCalculator)))
     209        newOps.Add(new VRPSimilarityCalculator());
     210      if (operatorTypes.Add(typeof(QualitySimilarityCalculator)))
     211        newOps.Add(new QualitySimilarityCalculator());
     212      if (operatorTypes.Add(typeof(PopulationSimilarityAnalyzer)))
     213        newOps.Add(new PopulationSimilarityAnalyzer(Operators.OfType<ISolutionSimilarityCalculator>()));
     214
     215      var assembly = typeof(VehicleRoutingProblem).Assembly;
     216      var operators = ApplicationManager.Manager.GetTypes(new[] { typeof(IAnalyzer) }, assembly, true, false, false)
     217        .Where(x => operatorTypes.Add(x)).Select(t => (IOperator)Activator.CreateInstance(t)).ToList();
     218      newOps.AddRange(ProblemInstance.FilterOperators(operators));
     219
     220      Operators.AddRange(newOps);
    221221    }
    222222
     
    305305      BestKnownSolution = null;
    306306
    307       if (ProblemInstance != null && instance.ProblemInstance != null &&
    308         instance.ProblemInstance.GetType() == ProblemInstance.GetType())
    309         SetProblemInstance(instance.ProblemInstance);
    310       else
    311         ProblemInstance = instance.ProblemInstance;
     307      ProblemInstance = instance.ProblemInstance;
    312308
    313309      OnReset();
Note: See TracChangeset for help on using the changeset viewer.