Changeset 17517
- Timestamp:
- 04/20/20 17:31:31 (4 years ago)
- Location:
- branches/2521_ProblemRefactoring
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring/HeuristicLab.Algorithms.ParameterlessPopulationPyramid/3.3/HillClimber.cs
r17382 r17517 46 46 private IRandom random; 47 47 48 private const string IterationsParameterName = "Iterations";49 private const string BestQualityResultName = "Best quality";50 private const string IterationsResultName = "Iterations";48 [Storable] public IFixedValueParameter<IntValue> MaximumIterationsParameter { get; private set; } 49 [Storable] public IResultParameter<DoubleValue> BestQualityResultParameter { get; private set; } 50 [Storable] public IResultParameter<IntValue> IterationsResultParameter { get; private set; } 51 51 52 52 public override Type ProblemType { … … 60 60 public override bool SupportsPause { get { return false; } } 61 61 62 public IFixedValueParameter<IntValue> IterationsParameter { 63 get { return (IFixedValueParameter<IntValue>)Parameters[IterationsParameterName]; } 62 public int MaximumIterations { 63 get { return MaximumIterationsParameter.Value.Value; } 64 set { MaximumIterationsParameter.Value.Value = value; } 64 65 } 65 66 public int Iterations {67 get { return IterationsParameter.Value.Value; }68 set { IterationsParameter.Value.Value = value; }69 }70 71 #region ResultsProperties72 private double ResultsBestQuality {73 get { return ((DoubleValue)Results[BestQualityResultName].Value).Value; }74 set { ((DoubleValue)Results[BestQualityResultName].Value).Value = value; }75 }76 private int ResultsIterations {77 get { return ((IntValue)Results[IterationsResultName].Value).Value; }78 set { ((IntValue)Results[IterationsResultName].Value).Value = value; }79 }80 #endregion81 66 82 67 [StorableConstructor] … … 84 69 protected HillClimber(HillClimber original, Cloner cloner) 85 70 : base(original, cloner) { 71 MaximumIterationsParameter = cloner.Clone(original.MaximumIterationsParameter); 72 BestQualityResultParameter = cloner.Clone(original.BestQualityResultParameter); 73 IterationsResultParameter = cloner.Clone(original.IterationsResultParameter); 86 74 } 87 75 public override IDeepCloneable Clone(Cloner cloner) { … … 92 80 : base() { 93 81 random = new MersenneTwister(); 94 Parameters.Add(new FixedValueParameter<IntValue>(IterationsParameterName, "", new IntValue(100))); 82 Parameters.Add(MaximumIterationsParameter = new FixedValueParameter<IntValue>("Maximum Iterations", "", new IntValue(100))); 83 Parameters.Add(BestQualityResultParameter = new ResultParameter<DoubleValue>("Best Quality", "", "Results", new DoubleValue(double.NaN))); 84 Parameters.Add(IterationsResultParameter = new ResultParameter<IntValue>("Iterations", "", "Results", new IntValue(0))); 95 85 } 96 86 97 98 protected override void Initialize(CancellationToken cancellationToken) {99 Results.Add(new Result(BestQualityResultName, new DoubleValue(double.NaN)));100 Results.Add(new Result(IterationsResultName, new IntValue(0)));101 base.Initialize(cancellationToken);102 }103 87 protected override void Run(CancellationToken cancellationToken) { 104 while ( ResultsIterations <Iterations) {88 while (IterationsResultParameter.ActualValue.Value < MaximumIterations) { 105 89 cancellationToken.ThrowIfCancellationRequested(); 106 90 … … 114 98 115 99 fitness = ImproveToLocalOptimum(Problem, solution, fitness, random); 116 if (double.IsNaN(ResultsBestQuality) || Problem.IsBetter(fitness, ResultsBestQuality)) { 117 ResultsBestQuality = fitness; 100 var bestSoFar = BestQualityResultParameter.ActualValue.Value; 101 if (double.IsNaN(bestSoFar) || Problem.IsBetter(fitness, bestSoFar)) { 102 BestQualityResultParameter.ActualValue.Value = fitness; 118 103 } 119 104 120 ResultsIterations++;105 IterationsResultParameter.ActualValue.Value++; 121 106 } 122 107 } -
branches/2521_ProblemRefactoring/HeuristicLab.Clients.OKB/3.3/RunCreation/EmptyAlgorithm.cs
r17226 r17517 21 21 22 22 using System; 23 using HEAL.Attic; 23 24 using HeuristicLab.Common; 24 25 using HeuristicLab.Core; 25 using HeuristicLab.Optimization;26 using HEAL.Attic;27 26 using HeuristicLab.PluginInfrastructure; 28 27 … … 41 40 } 42 41 43 private ResultCollection results;44 public override Optimization.ResultCollection Results {45 get { return results; }46 }47 48 42 #region Persistence Properties 49 43 [Storable(Name = "ExceptionMessage")] … … 56 50 [StorableConstructor] 57 51 private EmptyAlgorithm(StorableConstructorFlag _) : base(_) { 58 this.results = new ResultCollection();59 52 } 60 53 private EmptyAlgorithm(EmptyAlgorithm original, Cloner cloner) 61 54 : base(original, cloner) { 62 55 this.exceptionMessage = original.exceptionMessage; 63 this.results = new ResultCollection();64 56 } 65 57 public EmptyAlgorithm() 66 58 : base() { 67 results = new ResultCollection();68 59 } 69 60 public EmptyAlgorithm(string exceptionMessage) -
branches/2521_ProblemRefactoring/HeuristicLab.Encodings.BinaryVectorEncoding/3.3/BinaryVectorProblem.cs
r17229 r17517 33 33 [StorableType("2F6FEB34-BD19-47AF-9484-7F48565C0C43")] 34 34 public abstract class BinaryVectorProblem : SingleObjectiveProblem<BinaryVectorEncoding, BinaryVector> { 35 [Storable] public IResultParameter<BinaryVector> BestSolutionParameter { get; private set; } 36 35 37 public int Length { 36 38 get { return Encoding.Length; } … … 47 49 protected BinaryVectorProblem(BinaryVectorProblem original, Cloner cloner) 48 50 : base(original, cloner) { 51 BestSolutionParameter = cloner.Clone(original.BestSolutionParameter); 49 52 RegisterEventHandlers(); 50 53 } … … 53 56 protected BinaryVectorProblem(BinaryVectorEncoding encoding) : base(encoding) { 54 57 EncodingParameter.ReadOnly = true; 58 BestSolutionParameter = new ResultParameter<BinaryVector>("Best Solution", "The best solution."); 59 Parameters.Add(BestSolutionParameter); 55 60 56 61 Operators.Add(new HammingSimilarityCalculator()); … … 65 70 base.Analyze(vectors, qualities, results, random); 66 71 var best = GetBestSolution(vectors, qualities); 67 68 results.AddOrUpdateResult("Best Solution", (IItem)best.Item1.Clone()); 72 BestSolutionParameter.ActualValue = (BinaryVector)best.Item1.Clone(); 69 73 } 70 74 -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Algorithms/Algorithm.cs
r17513 r17517 95 95 } 96 96 97 public abstract ResultCollection Results { get; } 97 [Storable] 98 private readonly ResultCollection results = new ResultCollection(); 99 public ResultCollection Results { 100 get { return results; } 101 } 98 102 99 103 [Storable] … … 185 189 storeAlgorithmInEachRun = original.storeAlgorithmInEachRun; 186 190 runsCounter = original.runsCounter; 191 results = cloner.Clone(original.Results); 187 192 runs = cloner.Clone(original.runs); 188 193 Initialize(); … … 197 202 if ((ExecutionState != ExecutionState.Prepared) && (ExecutionState != ExecutionState.Paused) && (ExecutionState != ExecutionState.Stopped)) 198 203 throw new InvalidOperationException(string.Format("Prepare not allowed in execution state \"{0}\".", ExecutionState)); 204 results.Clear(); 199 205 } 200 206 public void Prepare(bool clearRuns) { … … 286 292 public event EventHandler Started; 287 293 protected virtual void OnStarted() { 294 foreach (var param in Parameters.Concat(Problem.Parameters).OfType<IResultParameter>()) 295 param.ResultCollection = results; 288 296 ExecutionState = ExecutionState.Started; 289 297 EventHandler handler = Started; … … 292 300 public event EventHandler Paused; 293 301 protected virtual void OnPaused() { 302 foreach (var param in Parameters.Concat(Problem.Parameters).OfType<IResultParameter>()) 303 param.ResultCollection = null; 294 304 ExecutionState = ExecutionState.Paused; 295 305 EventHandler handler = Paused; … … 311 321 } 312 322 } finally { 323 foreach (var param in Parameters.Concat(Problem.Parameters).OfType<IResultParameter>()) 324 param.ResultCollection = null; 313 325 ExecutionState = ExecutionState.Stopped; 314 326 EventHandler handler = Stopped; -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Algorithms/BasicAlgorithm.cs
r17226 r17517 22 22 using System; 23 23 using System.Threading; 24 using HEAL.Attic; 24 25 using HeuristicLab.Common; 25 26 using HeuristicLab.Core; 26 using HEAL.Attic;27 27 28 28 namespace HeuristicLab.Optimization { … … 42 42 [Storable] 43 43 private bool initialized; 44 [Storable]45 private readonly ResultCollection results;46 public override ResultCollection Results {47 get { return results; }48 }49 44 50 45 private CancellationTokenSource cancellationTokenSource; … … 58 53 protected BasicAlgorithm(BasicAlgorithm original, Cloner cloner) 59 54 : base(original, cloner) { 60 results = cloner.Clone(original.Results);61 55 initialized = original.initialized; 62 56 } 63 57 protected BasicAlgorithm() 64 58 : base() { 65 results = new ResultCollection();66 59 } 67 60 … … 69 62 if (Problem == null) return; 70 63 base.Prepare(); 71 results.Clear();72 64 initialized = false; 73 65 OnPrepared(); -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Algorithms/EngineAlgorithm.cs
r17513 r17517 76 76 } 77 77 78 public override ResultCollection Results {79 get {80 return (ResultCollection)globalScope.Variables["Results"].Value;81 }82 }83 84 78 protected EngineAlgorithm() 85 79 : base() { 86 80 globalScope = new Scope("Global Scope"); 87 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));81 globalScope.Variables.Add(new Variable("Results", Results)); 88 82 operatorGraph = new OperatorGraph(); 89 83 Initialize(); … … 92 86 : base(name) { 93 87 globalScope = new Scope("Global Scope"); 94 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));88 globalScope.Variables.Add(new Variable("Results", Results)); 95 89 operatorGraph = new OperatorGraph(); 96 90 Initialize(); … … 99 93 : base(name, parameters) { 100 94 globalScope = new Scope("Global Scope"); 101 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));95 globalScope.Variables.Add(new Variable("Results", Results)); 102 96 operatorGraph = new OperatorGraph(); 103 97 Initialize(); … … 106 100 : base(name, description) { 107 101 globalScope = new Scope("Global Scope"); 108 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));102 globalScope.Variables.Add(new Variable("Results", Results)); 109 103 operatorGraph = new OperatorGraph(); 110 104 Initialize(); … … 113 107 : base(name, description, parameters) { 114 108 globalScope = new Scope("Global Scope"); 115 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));109 globalScope.Variables.Add(new Variable("Results", Results)); 116 110 operatorGraph = new OperatorGraph(); 117 111 Initialize(); … … 160 154 base.Prepare(); 161 155 globalScope.Clear(); 162 globalScope.Variables.Add(new Variable("Results", new ResultCollection()));156 globalScope.Variables.Add(new Variable("Results", Results)); 163 157 164 158 if ((engine != null) && (operatorGraph.InitialOperator != null)) { -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/IResultParameter.cs
r17226 r17517 28 28 public interface IResultParameter : ILookupParameter { 29 29 string ResultCollectionName { get; set; } 30 ResultCollection ResultCollection { get; set; } 31 30 32 event EventHandler ResultCollectionNameChanged; 31 33 } -
branches/2521_ProblemRefactoring/HeuristicLab.Optimization/3.3/Results/ResultParameter.cs
r17257 r17517 60 60 } 61 61 62 [Storable] 63 public ResultCollection ResultCollection { get; set; } 64 62 65 [StorableConstructor] 63 66 private ResultParameter(StorableConstructorFlag _) : base(_) { } … … 66 69 resultCollectionName = original.resultCollectionName; 67 70 defaultValue = cloner.Clone(original.defaultValue); 71 ResultCollection = cloner.Clone(original.ResultCollection); 68 72 } 69 73 public override IDeepCloneable Clone(Cloner cloner) { … … 89 93 90 94 protected override IItem GetActualValue() { 91 ResultCollection results; 92 if (CachedActualValue != null) { 93 results = CachedActualValue as ResultCollection; 94 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 95 } else { 96 var tmp = ResultCollectionName; 97 // verifyType has to be disabled, because the ResultCollection may not be identical to the generic type of the parameter 98 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 99 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 100 CachedActualValue = results; 95 ResultCollection results = ResultCollection; 96 if (results == null) { 97 if (CachedActualValue != null) { 98 results = CachedActualValue as ResultCollection; 99 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 100 } else { 101 var tmp = ResultCollectionName; 102 // verifyType has to be disabled, because the ResultCollection may not be identical to the generic type of the parameter 103 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 104 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 105 CachedActualValue = results; 106 } 101 107 } 102 108 103 109 IResult result; 104 110 if (!results.TryGetValue(ActualName, out result)) { 105 if (DefaultValue == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): Result not found and no default value specified.");111 if (DefaultValue == null) return null; 106 112 result = ItemDescription == Description ? new Result(ActualName, (T)DefaultValue.Clone()) : new Result(ActualName, Description, (T)DefaultValue.Clone()); 107 113 results.Add(result); … … 116 122 117 123 protected override void SetActualValue(IItem value) { 118 ResultCollection results; 119 if (CachedActualValue != null) { 120 results = CachedActualValue as ResultCollection; 121 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 122 } else { 123 var tmp = ResultCollectionName; 124 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 125 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 126 CachedActualValue = results; 124 ResultCollection results = ResultCollection; 125 if (results == null) { 126 if (CachedActualValue != null) { 127 results = CachedActualValue as ResultCollection; 128 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection not found."); 129 } else { 130 var tmp = ResultCollectionName; 131 results = GetValue(ExecutionContext, ref tmp) as ResultCollection; 132 if (results == null) throw new InvalidOperationException("ResultParameter (" + ActualName + "): ResultCollection with name " + tmp + " not found."); 133 CachedActualValue = results; 134 } 127 135 } 128 136 -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
r17462 r17517 107 107 set { ObjectiveParameter.Value.Value = value; } 108 108 } 109 110 public new IScheduleEncoding Encoding { 111 get { return base.Encoding; } 112 set { base.Encoding = value; } 113 } 109 114 #endregion 110 115 -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.TravelingSalesman/3.3/TSP.cs
r17382 r17517 47 47 [Storable] public IValueParameter<ITSPData> TSPDataParameter { get; private set; } 48 48 [Storable] public IValueParameter<ITSPSolution> BestKnownSolutionParameter { get; private set; } 49 [Storable] public IResultParameter<ITSPSolution> BestTSPSolutionParameter { get; private set; } 49 50 50 51 public ITSPData TSPData { … … 64 65 TSPDataParameter = cloner.Clone(original.TSPDataParameter); 65 66 BestKnownSolutionParameter = cloner.Clone(original.BestKnownSolutionParameter); 67 BestTSPSolutionParameter = cloner.Clone(original.BestTSPSolutionParameter); 66 68 } 67 69 … … 70 72 Parameters.Add(TSPDataParameter = new ValueParameter<ITSPData>("TSPData", "The main parameters of the TSP.")); 71 73 Parameters.Add(BestKnownSolutionParameter = new OptionalValueParameter<ITSPSolution>("BestKnownSolution", "The best known solution.")); 72 74 Parameters.Add(BestTSPSolutionParameter = new ResultParameter<ITSPSolution>("Best TSP Solution", "The best so far solution found.")); 75 73 76 TSPData = new EuclideanTSPData(); 74 77 Encoding.Length = TSPData.Cities; … … 112 115 } 113 116 114 IResult bestSolutionResult; 115 if (results.TryGetValue("Best TSP Solution", out bestSolutionResult)) { 116 var bestSolution = bestSolutionResult.Value as ITSPSolution; 117 if (bestSolution == null || Maximization && bestSolution.TourLength.Value < qualities[i] 118 || !Maximization && bestSolution.TourLength.Value > qualities[i]) { 119 bestSolutionResult.Value = TSPData.GetSolution(solutions[i], qualities[i]); 120 } 121 } else results.Add(new Result("Best TSP Solution", TSPData.GetSolution(solutions[i], qualities[i]))); 117 var bestSolution = BestTSPSolutionParameter.ActualValue; 118 if (bestSolution == null || IsBetter(qualities[i], bestSolution.TourLength.Value)) { 119 BestTSPSolutionParameter.ActualValue = TSPData.GetSolution(solutions[i], qualities[i]); 120 } 122 121 } 123 122
Note: See TracChangeset
for help on using the changeset viewer.