Changeset 17717 for branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
- Timestamp:
- 08/05/20 04:37:37 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Problems.VehicleRouting/3.4/VehicleRoutingProblem.cs
r17711 r17717 153 153 } 154 154 155 [Storable(OldName = "operators")]156 private List<IOperator> StorableOperators {157 set { Operators.AddRange(value); }158 }159 160 155 private void AttachEventHandlers() { 161 156 ProblemInstanceParameter.ValueChanged += new EventHandler(ProblemInstanceParameter_ValueChanged); … … 166 161 if (ProblemInstance != null) { 167 162 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(); 168 177 } 169 178 } … … 182 191 } 183 192 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 allowed192 if (ProblemInstance.Vehicles.Value < BestKnownSolution.Solution.GetTours().Count) {193 BestKnownSolution = null;194 } else EvalBestKnownSolution();195 }196 }197 198 193 void ProblemInstanceParameter_ValueChanged(object sender, EventArgs e) { 199 194 InitializeOperators(); 200 195 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(); 212 201 } 213 202 … … 215 204 Encoding.FilterOperators(ProblemInstance); 216 205 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); 221 221 } 222 222 … … 305 305 BestKnownSolution = null; 306 306 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; 312 308 313 309 OnReset();
Note: See TracChangeset
for help on using the changeset viewer.