- Timestamp:
- 03/18/19 17:24:30 (6 years ago)
- Location:
- branches/2521_ProblemRefactoring
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2521_ProblemRefactoring
- Property svn:ignore
-
old new 24 24 protoc.exe 25 25 obj 26 .vs
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs
r13435 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Analyzers/SchedulingAnalyzer.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/ScheduleEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 26 26 using HeuristicLab.Encodings.ScheduleEncoding; 27 27 using HeuristicLab.Operators; 28 using HeuristicLab.Optimization; 28 29 using HeuristicLab.Parameters; 29 30 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; … … 32 33 [Item("SchedulingEvaluator", "First applies the decoder operator to obtain a schedule from an encoding and then applies the evaluator to obtain a quality.")] 33 34 [StorableClass] 34 public class SchedulingEvaluator : InstrumentedOperator, ISchedulingEvaluator {35 public class SchedulingEvaluator : InstrumentedOperator, ISchedulingEvaluator, IStochasticOperator { 35 36 36 37 public IValueLookupParameter<IScheduleDecoder> ScheduleDecoderParameter { … … 49 50 get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; } 50 51 } 52 // ABE: This parameter exists purely, because some IScheduleDecoders are stochastic... 53 // ... which could be solved by letting the algorithm parameterize them ... 54 // ... but they have to use the same RNG as the evaluator (due to parallel execution)... 55 // ... in particular relevant for Island-GA and ALPS (Local- vs GlobalRandom). 56 public ILookupParameter<IRandom> RandomParameter { 57 get { return (ILookupParameter<IRandom>)Parameters["Random"]; } 58 } 51 59 52 60 [StorableConstructor] … … 58 66 Parameters.Add(new ValueLookupParameter<IScheduleEvaluator>("ScheduleEvaluator", "The actual schedule evaluation operator.")); 59 67 Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality value aka fitness value of the solution.")); 68 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use.")); 60 69 QualityParameter.Hidden = true; 61 70 } … … 63 72 public override IDeepCloneable Clone(Cloner cloner) { 64 73 return new SchedulingEvaluator(this, cloner); 74 } 75 76 [StorableHook(HookType.AfterDeserialization)] 77 private void AfterDeserialization() { 78 // BackwardsCompatibility3.3 79 #region Backwards compatible code, remove with 3.4 80 if (!Parameters.ContainsKey("Random")) { 81 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use.")); 82 } 83 #endregion 65 84 } 66 85 -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs
r12012 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
r13443 r16692 1 //#region License Information 2 ///* HeuristicLab 3 // * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 // * 5 // * This file is part of HeuristicLab. 6 // * 7 // * HeuristicLab is free software: you can redistribute it and/or modify 8 // * it under the terms of the GNU General Public License as published by 9 // * the Free Software Foundation, either version 3 of the License, or 10 // * (at your option) any later version. 11 // * 12 // * HeuristicLab is distributed in the hope that it will be useful, 13 // * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 // * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 // * GNU General Public License for more details. 16 // * 17 // * You should have received a copy of the GNU General Public License 18 // * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 // */ 20 //#endregion 21 22 //using System; 23 //using System.Drawing; 24 //using System.Linq; 25 //using HeuristicLab.Common; 26 //using HeuristicLab.Core; 27 //using HeuristicLab.Data; 28 //using HeuristicLab.Encodings.PermutationEncoding; 29 //using HeuristicLab.Encodings.ScheduleEncoding; 30 //using HeuristicLab.Parameters; 31 //using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 32 //using HeuristicLab.PluginInfrastructure; 33 //using HeuristicLab.Problems.Instances; 34 35 //namespace HeuristicLab.Problems.Scheduling { 36 // [Item("Job Shop Scheduling Problem (JSSP)", "Represents a standard Job Shop Scheduling Problem")] 37 // [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 120)] 38 // [StorableClass] 39 // public sealed class JobShopSchedulingProblem : SchedulingProblem, IProblemInstanceConsumer<JSSPData>, IProblemInstanceExporter<JSSPData>, IStorableContent { 40 // #region Default Instance 41 // private static readonly JSSPData DefaultInstance = new JSSPData() { 42 // Jobs = 10, 43 // Resources = 10, 44 // BestKnownQuality = 930, 45 // ProcessingTimes = new double[,] { 46 // { 29, 78, 9, 36, 49, 11, 62, 56, 44, 21 }, 47 // { 43, 90, 75, 11, 69, 28, 46, 46, 72, 30 }, 48 // { 91, 85, 39, 74, 90, 10, 12, 89, 45, 33 }, 49 // { 81, 95, 71, 99, 9, 52, 85, 98, 22, 43 }, 50 // { 14, 6, 22, 61, 26, 69, 21, 49, 72, 53 }, 51 // { 84, 2, 52, 95, 48, 72, 47, 65, 6, 25 }, 52 // { 46, 37, 61, 13, 32, 21, 32, 89, 30, 55 }, 53 // { 31, 86, 46, 74, 32, 88, 19, 48, 36, 79 }, 54 // { 76, 69, 76, 51, 85, 11, 40, 89, 26, 74 }, 55 // { 85, 13, 61, 7, 64, 76, 47, 52, 90, 45 } 56 // }, 57 // Demands = new int[,] { 58 // { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 59 // { 0, 2, 4, 9, 3, 1, 6, 5, 7, 8 }, 60 // { 1, 0, 3, 2, 8, 5, 7, 6, 9, 4 }, 61 // { 1, 2, 0, 4, 6, 8, 7, 3, 9, 5 }, 62 // { 2, 0, 1, 5, 3, 4, 8, 7, 9, 6 }, 63 // { 2, 1, 5, 3, 8, 9, 0, 6, 4, 7 }, 64 // { 1, 0, 3, 2, 6, 5, 9, 8, 7, 4 }, 65 // { 2, 0, 1, 5, 4, 6, 8, 9, 7, 3 }, 66 // { 0, 1, 3, 5, 2, 9, 6, 7, 4, 8 }, 67 // { 1, 0, 2, 6, 8, 9, 5, 3, 4, 7 } 68 // } 69 // }; 70 // #endregion 71 72 // public string Filename { get; set; } 73 // public override Image ItemImage { 74 // get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; } 75 // } 76 77 // #region Parameter Properties 78 // public IValueParameter<ItemList<Job>> JobDataParameter { 79 // get { return (IValueParameter<ItemList<Job>>)Parameters["JobData"]; } 80 // } 81 // public OptionalValueParameter<Schedule> BestKnownSolutionParameter { 82 // get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; } 83 // } 84 85 // public IFixedValueParameter<IntValue> JobsParameter { 86 // get { return (IFixedValueParameter<IntValue>)Parameters["Jobs"]; } 87 // } 88 // public IFixedValueParameter<IntValue> ResourcesParameter { 89 // get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; } 90 // } 91 // public IValueParameter<IScheduleEvaluator> ScheduleEvaluatorParameter { 92 // get { return (IValueParameter<IScheduleEvaluator>)Parameters["ScheduleEvaluator"]; } 93 // } 94 // public OptionalValueParameter<IScheduleDecoder> ScheduleDecoderParameter { 95 // get { return (OptionalValueParameter<IScheduleDecoder>)Parameters["ScheduleDecoder"]; } 96 // } 97 // #endregion 98 99 // #region Properties 100 // public ItemList<Job> JobData { 101 // get { return JobDataParameter.Value; } 102 // set { JobDataParameter.Value = value; } 103 // } 104 // public Schedule BestKnownSolution { 105 // get { return BestKnownSolutionParameter.Value; } 106 // set { BestKnownSolutionParameter.Value = value; } 107 // } 108 // public int Jobs { 109 // get { return JobsParameter.Value.Value; } 110 // set { JobsParameter.Value.Value = value; } 111 // } 112 // public int Resources { 113 // get { return ResourcesParameter.Value.Value; } 114 // set { ResourcesParameter.Value.Value = value; } 115 // } 116 // public IScheduleEvaluator ScheduleEvaluator { 117 // get { return ScheduleEvaluatorParameter.Value; } 118 // set { ScheduleEvaluatorParameter.Value = value; } 119 // } 120 // public IScheduleDecoder ScheduleDecoder { 121 // get { return ScheduleDecoderParameter.Value; } 122 // set { ScheduleDecoderParameter.Value = value; } 123 // } 124 // #endregion 125 126 // [StorableConstructor] 127 // private JobShopSchedulingProblem(bool deserializing) : base(deserializing) { } 128 // private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner) 129 // : base(original, cloner) { 130 // RegisterEventHandlers(); 131 // } 132 // public JobShopSchedulingProblem() 133 // : base(new SchedulingEvaluator(), new JSMRandomCreator()) { 134 // Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>())); 135 // Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance.")); 136 137 // Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue())); 138 // Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue())); 139 // Parameters.Add(new ValueParameter<IScheduleEvaluator>("ScheduleEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator())); 140 // Parameters.Add(new OptionalValueParameter<IScheduleDecoder>("ScheduleDecoder", "The operator that decodes the representation and creates a schedule.", new JSMDecoder())); 141 142 // EvaluatorParameter.GetsCollected = false; 143 // EvaluatorParameter.Hidden = true; 144 // ScheduleDecoderParameter.Hidden = true; 145 146 // InitializeOperators(); 147 // Load(DefaultInstance); 148 // RegisterEventHandlers(); 149 // } 150 151 // public override IDeepCloneable Clone(Cloner cloner) { 152 // return new JobShopSchedulingProblem(this, cloner); 153 // } 154 155 // [StorableHook(HookType.AfterDeserialization)] 156 // private void AfterDeserialization() { 157 // RegisterEventHandlers(); 158 // } 159 160 // private void RegisterEventHandlers() { 161 // ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged; 162 // ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 163 // SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 164 // ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged; 165 // if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged; 166 // } 167 168 // #region Events 169 // protected override void OnSolutionCreatorChanged() { 170 // SolutionCreator.ScheduleParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 171 // InitializeOperators(); 172 // } 173 // protected override void OnEvaluatorChanged() { 174 // base.OnEvaluatorChanged(); 175 // ParameterizeOperators(); 176 // } 177 // private void ScheduleEvaluatorParameter_ValueChanged(object sender, EventArgs eventArgs) { 178 // ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 179 // ParameterizeOperators(); 180 // } 181 // private void ScheduleEvaluator_QualityParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 182 // ParameterizeOperators(); 183 // } 184 185 // private void SolutionCreator_SchedulingEncodingParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 186 // ParameterizeOperators(); 187 // } 188 // private void ScheduleDecoderParameter_ValueChanged(object sender, EventArgs eventArgs) { 189 // if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged; 190 // ParameterizeOperators(); 191 // } 192 // private void ScheduleDecoder_ScheduleParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 193 // ParameterizeOperators(); 194 // } 195 // #endregion 196 197 // #region Problem Instance Handling 198 // public void Load(JSSPData data) { 199 // var jobData = new ItemList<Job>(data.Jobs); 200 // for (int j = 0; j < data.Jobs; j++) { 201 // var job = new Job(j, data.DueDates != null ? data.DueDates[j] : double.MaxValue); 202 // for (int t = 0; t < data.Resources; t++) { 203 // job.Tasks.Add(new Task(t, data.Demands[j, t], j, data.ProcessingTimes[j, t])); 204 // } 205 // jobData.Add(job); 206 // } 207 208 // BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null; 209 // if (data.BestKnownSchedule != null) { 210 // var enc = new JSMEncoding(0); 211 // for (int i = 0; i < data.Resources; i++) { 212 // enc.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, new int[data.Jobs])); 213 // for (int j = 0; j < data.Jobs; j++) { 214 // enc.JobSequenceMatrix[i][j] = data.BestKnownSchedule[i, j]; 215 // } 216 // } 217 // BestKnownSolution = JSMDecoder.DecodeSchedule(enc, jobData, JSMDecodingErrorPolicyTypes.RandomPolicy, JSMForcingStrategyTypes.SwapForcing); 218 // if (ScheduleEvaluator is MeanTardinessEvaluator) 219 // BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData)); 220 // else if (ScheduleEvaluator is MakespanEvaluator) 221 // BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution)); 222 // } 223 224 // JobData = jobData; 225 // Jobs = data.Jobs; 226 // Resources = data.Resources; 227 // } 228 229 // public JSSPData Export() { 230 // var result = new JSSPData { 231 // Name = Name, 232 // Description = Description, 233 // Jobs = Jobs, 234 // Resources = Resources, 235 // ProcessingTimes = new double[Jobs, Resources], 236 // Demands = new int[Jobs, Resources], 237 // DueDates = new double[Jobs] 238 // }; 239 240 // foreach (var job in JobData) { 241 // var counter = 0; 242 // result.DueDates[job.Index] = job.DueDate; 243 // foreach (var task in job.Tasks) { 244 // result.ProcessingTimes[task.JobNr, counter] = task.Duration; 245 // result.Demands[task.JobNr, counter] = task.ResourceNr; 246 // counter++; 247 // } 248 // } 249 // return result; 250 // } 251 // #endregion 252 253 // #region Helpers 254 // private void InitializeOperators() { 255 // Operators.Clear(); 256 // ApplyEncoding(); 257 // Operators.Add(new BestSchedulingSolutionAnalyzer()); 258 // ParameterizeOperators(); 259 // } 260 261 // private void ApplyEncoding() { 262 // if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) { 263 // Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>()); 264 // ScheduleDecoder = new JSMDecoder(); 265 // } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) { 266 // Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>()); 267 // ScheduleDecoder = new PRVDecoder(); 268 // } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) { 269 // Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>()); 270 // ScheduleDecoder = new PWRDecoder(); 271 // } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) { 272 // Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>()); 273 // ScheduleDecoder = null; 274 // } 275 // } 276 277 // private void ParameterizeOperators() { 278 // Evaluator.ScheduleDecoderParameter.ActualName = ScheduleDecoderParameter.Name; 279 // Evaluator.ScheduleDecoderParameter.Hidden = true; 280 // Evaluator.ScheduleEvaluatorParameter.ActualName = ScheduleEvaluatorParameter.Name; 281 // Evaluator.ScheduleEvaluatorParameter.Hidden = true; 282 // Evaluator.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 283 // Evaluator.QualityParameter.Hidden = true; 284 285 // if (ScheduleDecoder != null) 286 // ScheduleDecoder.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName; 287 288 // if (ScheduleDecoder != null) { 289 // ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 290 // ScheduleEvaluator.ScheduleParameter.Hidden = true; 291 // } else if (SolutionCreator is DirectScheduleRandomCreator) { 292 // var directEvaluator = (DirectScheduleRandomCreator)SolutionCreator; 293 // ScheduleEvaluator.ScheduleParameter.ActualName = directEvaluator.ScheduleParameter.ActualName; 294 // ScheduleEvaluator.ScheduleParameter.Hidden = true; 295 // } else { 296 // ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleEvaluator.ScheduleParameter.Name; 297 // ScheduleEvaluator.ScheduleParameter.Hidden = false; 298 // } 299 300 // foreach (var op in Operators.OfType<IScheduleManipulator>()) { 301 // op.ScheduleParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName; 302 // op.ScheduleParameter.Hidden = true; 303 // } 304 305 // foreach (var op in Operators.OfType<IScheduleCrossover>()) { 306 // op.ChildParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName; 307 // op.ChildParameter.Hidden = true; 308 // op.ParentsParameter.ActualName = SolutionCreator.ScheduleParameter.ActualName; 309 // op.ParentsParameter.Hidden = true; 310 // } 311 312 // foreach (var op in Operators.OfType<BestSchedulingSolutionAnalyzer>()) { 313 // op.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 314 // if (ScheduleDecoder != null) { 315 // op.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 316 // op.ScheduleParameter.Hidden = true; 317 // } else if (SolutionCreator is DirectScheduleRandomCreator) { 318 // op.ScheduleParameter.ActualName = ((DirectScheduleRandomCreator)SolutionCreator).ScheduleParameter.ActualName; 319 // op.ScheduleParameter.Hidden = true; 320 // } else { 321 // op.ScheduleParameter.ActualName = op.ScheduleParameter.Name; 322 // op.ScheduleParameter.Hidden = false; 323 // } 324 // } 325 // } 326 // #endregion 327 328 // } 329 //} 1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 22 using System; 23 using System.Drawing; 24 using System.Linq; 25 using HeuristicLab.Common; 26 using HeuristicLab.Core; 27 using HeuristicLab.Data; 28 using HeuristicLab.Encodings.PermutationEncoding; 29 using HeuristicLab.Encodings.ScheduleEncoding; 30 using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix; 31 using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition; 32 using HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector; 33 using HeuristicLab.Parameters; 34 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 35 using HeuristicLab.PluginInfrastructure; 36 using HeuristicLab.Problems.Instances; 37 38 namespace HeuristicLab.Problems.Scheduling { 39 [Item("Job Shop Scheduling Problem (JSSP)", "Represents a standard Job Shop Scheduling Problem")] 40 [Creatable(CreatableAttribute.Categories.CombinatorialProblems, Priority = 120)] 41 [StorableClass] 42 public sealed class JobShopSchedulingProblem : SchedulingProblem, IProblemInstanceConsumer<JSSPData>, IProblemInstanceExporter<JSSPData>, IStorableContent { 43 #region Default Instance 44 private static readonly JSSPData DefaultInstance = new JSSPData() { 45 Name = "Job Shop Scheduling Problem (JSSP)", 46 Description = "The default instance of the JSSP problem in HeuristicLab", 47 Jobs = 10, 48 Resources = 10, 49 BestKnownQuality = 930, 50 ProcessingTimes = new double[,] { 51 { 29, 78, 9, 36, 49, 11, 62, 56, 44, 21 }, 52 { 43, 90, 75, 11, 69, 28, 46, 46, 72, 30 }, 53 { 91, 85, 39, 74, 90, 10, 12, 89, 45, 33 }, 54 { 81, 95, 71, 99, 9, 52, 85, 98, 22, 43 }, 55 { 14, 6, 22, 61, 26, 69, 21, 49, 72, 53 }, 56 { 84, 2, 52, 95, 48, 72, 47, 65, 6, 25 }, 57 { 46, 37, 61, 13, 32, 21, 32, 89, 30, 55 }, 58 { 31, 86, 46, 74, 32, 88, 19, 48, 36, 79 }, 59 { 76, 69, 76, 51, 85, 11, 40, 89, 26, 74 }, 60 { 85, 13, 61, 7, 64, 76, 47, 52, 90, 45 } 61 }, 62 Demands = new int[,] { 63 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }, 64 { 0, 2, 4, 9, 3, 1, 6, 5, 7, 8 }, 65 { 1, 0, 3, 2, 8, 5, 7, 6, 9, 4 }, 66 { 1, 2, 0, 4, 6, 8, 7, 3, 9, 5 }, 67 { 2, 0, 1, 5, 3, 4, 8, 7, 9, 6 }, 68 { 2, 1, 5, 3, 8, 9, 0, 6, 4, 7 }, 69 { 1, 0, 3, 2, 6, 5, 9, 8, 7, 4 }, 70 { 2, 0, 1, 5, 4, 6, 8, 9, 7, 3 }, 71 { 0, 1, 3, 5, 2, 9, 6, 7, 4, 8 }, 72 { 1, 0, 2, 6, 8, 9, 5, 3, 4, 7 } 73 } 74 }; 75 #endregion 76 77 public string Filename { get; set; } 78 public override Image ItemImage { 79 get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; } 80 } 81 82 #region Parameter Properties 83 public IValueParameter<ItemList<Job>> JobDataParameter { 84 get { return (IValueParameter<ItemList<Job>>)Parameters["JobData"]; } 85 } 86 public OptionalValueParameter<Schedule> BestKnownSolutionParameter { 87 get { return (OptionalValueParameter<Schedule>)Parameters["BestKnownSolution"]; } 88 } 89 90 public IFixedValueParameter<IntValue> JobsParameter { 91 get { return (IFixedValueParameter<IntValue>)Parameters["Jobs"]; } 92 } 93 public IFixedValueParameter<IntValue> ResourcesParameter { 94 get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; } 95 } 96 public IValueParameter<IScheduleEvaluator> ScheduleEvaluatorParameter { 97 get { return (IValueParameter<IScheduleEvaluator>)Parameters["ScheduleEvaluator"]; } 98 } 99 public OptionalValueParameter<IScheduleDecoder> ScheduleDecoderParameter { 100 get { return (OptionalValueParameter<IScheduleDecoder>)Parameters["ScheduleDecoder"]; } 101 } 102 #endregion 103 104 #region Properties 105 public ItemList<Job> JobData { 106 get { return JobDataParameter.Value; } 107 set { JobDataParameter.Value = value; } 108 } 109 public Schedule BestKnownSolution { 110 get { return BestKnownSolutionParameter.Value; } 111 set { BestKnownSolutionParameter.Value = value; } 112 } 113 public int Jobs { 114 get { return JobsParameter.Value.Value; } 115 set { JobsParameter.Value.Value = value; } 116 } 117 public int Resources { 118 get { return ResourcesParameter.Value.Value; } 119 set { ResourcesParameter.Value.Value = value; } 120 } 121 public IScheduleEvaluator ScheduleEvaluator { 122 get { return ScheduleEvaluatorParameter.Value; } 123 set { ScheduleEvaluatorParameter.Value = value; } 124 } 125 public IScheduleDecoder ScheduleDecoder { 126 get { return ScheduleDecoderParameter.Value; } 127 set { ScheduleDecoderParameter.Value = value; } 128 } 129 #endregion 130 131 [StorableConstructor] 132 private JobShopSchedulingProblem(bool deserializing) : base(deserializing) { } 133 private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner) 134 : base(original, cloner) { 135 RegisterEventHandlers(); 136 } 137 public JobShopSchedulingProblem() 138 : base(new SchedulingEvaluator(), new JSMRandomCreator()) { 139 Parameters.Add(new ValueParameter<ItemList<Job>>("JobData", "Jobdata defining the precedence relationships and the duration of the tasks in this JSSP-Instance.", new ItemList<Job>())); 140 Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance.")); 141 142 Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue())); 143 Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue())); 144 Parameters.Add(new ValueParameter<IScheduleEvaluator>("ScheduleEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator())); 145 Parameters.Add(new OptionalValueParameter<IScheduleDecoder>("ScheduleDecoder", "The operator that decodes the representation and creates a schedule.", new JSMDecoder())); 146 147 EvaluatorParameter.GetsCollected = false; 148 EvaluatorParameter.Hidden = true; 149 ScheduleDecoderParameter.Hidden = true; 150 151 InitializeOperators(); 152 Load(DefaultInstance); 153 RegisterEventHandlers(); 154 } 155 156 public override IDeepCloneable Clone(Cloner cloner) { 157 return new JobShopSchedulingProblem(this, cloner); 158 } 159 160 [StorableHook(HookType.AfterDeserialization)] 161 private void AfterDeserialization() { 162 RegisterEventHandlers(); 163 } 164 165 private void RegisterEventHandlers() { 166 ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged; 167 ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 168 SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 169 ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged; 170 if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged; 171 } 172 173 #region Events 174 protected override void OnSolutionCreatorChanged() { 175 base.OnSolutionCreatorChanged(); 176 SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 177 InitializeOperators(); 178 } 179 protected override void OnEvaluatorChanged() { 180 base.OnEvaluatorChanged(); 181 ParameterizeOperators(); 182 } 183 private void ScheduleEvaluatorParameter_ValueChanged(object sender, EventArgs eventArgs) { 184 ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 185 ParameterizeOperators(); 186 } 187 private void ScheduleEvaluator_QualityParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 188 ParameterizeOperators(); 189 } 190 191 private void SolutionCreator_SchedulingEncodingParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 192 ParameterizeOperators(); 193 } 194 private void ScheduleDecoderParameter_ValueChanged(object sender, EventArgs eventArgs) { 195 if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged; 196 ParameterizeOperators(); 197 } 198 private void ScheduleDecoder_ScheduleParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 199 ParameterizeOperators(); 200 } 201 #endregion 202 203 #region Problem Instance Handling 204 public void Load(JSSPData data) { 205 var jobData = new ItemList<Job>(data.Jobs); 206 for (int j = 0; j < data.Jobs; j++) { 207 var job = new Job(j, data.DueDates != null ? data.DueDates[j] : double.MaxValue); 208 for (int t = 0; t < data.Resources; t++) { 209 job.Tasks.Add(new Task(t, data.Demands[j, t], j, data.ProcessingTimes[j, t])); 210 } 211 jobData.Add(job); 212 } 213 214 BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null; 215 if (data.BestKnownSchedule != null) { 216 var enc = new JSMEncoding(); 217 enc.JobSequenceMatrix = new ItemList<Permutation>(data.Resources); 218 for (int i = 0; i < data.Resources; i++) { 219 enc.JobSequenceMatrix[i] = new Permutation(PermutationTypes.Absolute, new int[data.Jobs]); 220 for (int j = 0; j < data.Jobs; j++) { 221 enc.JobSequenceMatrix[i][j] = data.BestKnownSchedule[i, j]; 222 } 223 } 224 BestKnownSolution = new JSMDecoder().CreateScheduleFromEncoding(enc, jobData); 225 if (ScheduleEvaluator is MeanTardinessEvaluator) 226 BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData)); 227 else if (ScheduleEvaluator is MakespanEvaluator) 228 BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution)); 229 } 230 Name = data.Name; 231 Description = data.Description; 232 JobData = jobData; 233 Jobs = data.Jobs; 234 Resources = data.Resources; 235 } 236 237 public JSSPData Export() { 238 var result = new JSSPData { 239 Name = Name, 240 Description = Description, 241 Jobs = Jobs, 242 Resources = Resources, 243 ProcessingTimes = new double[Jobs, Resources], 244 Demands = new int[Jobs, Resources], 245 DueDates = new double[Jobs] 246 }; 247 248 foreach (var job in JobData) { 249 var counter = 0; 250 result.DueDates[job.Index] = job.DueDate; 251 foreach (var task in job.Tasks) { 252 result.ProcessingTimes[task.JobNr, counter] = task.Duration; 253 result.Demands[task.JobNr, counter] = task.ResourceNr; 254 counter++; 255 } 256 } 257 return result; 258 } 259 #endregion 260 261 #region Helpers 262 private void InitializeOperators() { 263 Operators.Clear(); 264 ApplyEncoding(); 265 Operators.Add(new BestSchedulingSolutionAnalyzer()); 266 ParameterizeOperators(); 267 } 268 269 private void ApplyEncoding() { 270 if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) { 271 Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>()); 272 ScheduleDecoder = new JSMDecoder(); 273 } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) { 274 Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>()); 275 ScheduleDecoder = new PRVDecoder(); 276 } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) { 277 Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>()); 278 ScheduleDecoder = new PWRDecoder(); 279 } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) { 280 Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>()); 281 ScheduleDecoder = null; 282 } 283 } 284 285 private void ParameterizeOperators() { 286 Evaluator.ScheduleDecoderParameter.ActualName = ScheduleDecoderParameter.Name; 287 Evaluator.ScheduleDecoderParameter.Hidden = true; 288 Evaluator.ScheduleEvaluatorParameter.ActualName = ScheduleEvaluatorParameter.Name; 289 Evaluator.ScheduleEvaluatorParameter.Hidden = true; 290 Evaluator.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 291 Evaluator.QualityParameter.Hidden = true; 292 293 if (ScheduleDecoder != null) 294 ScheduleDecoder.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 295 296 if (ScheduleDecoder != null) { 297 ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 298 ScheduleEvaluator.ScheduleParameter.Hidden = true; 299 } else if (SolutionCreator is DirectScheduleRandomCreator) { 300 var directEvaluator = (DirectScheduleRandomCreator)SolutionCreator; 301 ScheduleEvaluator.ScheduleParameter.ActualName = directEvaluator.ScheduleEncodingParameter.ActualName; 302 ScheduleEvaluator.ScheduleParameter.Hidden = true; 303 } else { 304 ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleEvaluator.ScheduleParameter.Name; 305 ScheduleEvaluator.ScheduleParameter.Hidden = false; 306 } 307 308 foreach (var op in Operators.OfType<IScheduleManipulator>()) { 309 op.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 310 op.ScheduleEncodingParameter.Hidden = true; 311 } 312 313 foreach (var op in Operators.OfType<IScheduleCrossover>()) { 314 op.ChildParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 315 op.ChildParameter.Hidden = true; 316 op.ParentsParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 317 op.ParentsParameter.Hidden = true; 318 } 319 320 foreach (var op in Operators.OfType<BestSchedulingSolutionAnalyzer>()) { 321 op.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 322 if (ScheduleDecoder != null) { 323 op.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 324 op.ScheduleParameter.Hidden = true; 325 } else if (SolutionCreator is DirectScheduleRandomCreator) { 326 op.ScheduleParameter.ActualName = ((DirectScheduleRandomCreator)SolutionCreator).ScheduleEncodingParameter.ActualName; 327 op.ScheduleParameter.Hidden = true; 328 } else { 329 op.ScheduleParameter.ActualName = op.ScheduleParameter.Name; 330 op.ScheduleParameter.Hidden = false; 331 } 332 } 333 } 334 #endregion 335 336 } 337 } -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Plugin.cs.frame
r13469 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 23 23 24 24 namespace HeuristicLab.Problems.Scheduling { 25 [Plugin("HeuristicLab.Problems.Scheduling", "3.3.1 3.$WCREV$")]25 [Plugin("HeuristicLab.Problems.Scheduling", "3.3.15.$WCREV$")] 26 26 [PluginFile("HeuristicLab.Problems.Scheduling-3.3.dll", PluginFileType.Assembly)] 27 27 [PluginDependency("HeuristicLab.Collections", "3.3")] -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Properties/AssemblyInfo.cs.frame
r13321 r16692 1 1 #region License Information 2 2 /* HeuristicLab 3 * Copyright (C) 2002-201 5Heuristic and Evolutionary Algorithms Laboratory (HEAL)3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 4 * 5 5 * This file is part of HeuristicLab. … … 31 31 [assembly: AssemblyCompany("")] 32 32 [assembly: AssemblyProduct("HeuristicLab")] 33 [assembly: AssemblyCopyright("(c) 2002-201 5HEAL")]33 [assembly: AssemblyCopyright("(c) 2002-2018 HEAL")] 34 34 [assembly: AssemblyTrademark("")] 35 35 [assembly: AssemblyCulture("")] … … 53 53 // by using the '*' as shown below: 54 54 [assembly: AssemblyVersion("3.3.0.0")] 55 [assembly: AssemblyFileVersion("3.3.1 3.$WCREV$")]55 [assembly: AssemblyFileVersion("3.3.15.$WCREV$")] -
branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.cs
r13443 r16692 1 //#region License Information2 / //* HeuristicLab3 // * Copyright (C) 2002-2015Heuristic and Evolutionary Algorithms Laboratory (HEAL)4 //*5 //* This file is part of HeuristicLab.6 //*7 //* HeuristicLab is free software: you can redistribute it and/or modify8 //* it under the terms of the GNU General Public License as published by9 //* the Free Software Foundation, either version 3 of the License, or10 //* (at your option) any later version.11 //*12 //* HeuristicLab is distributed in the hope that it will be useful,13 //* but WITHOUT ANY WARRANTY; without even the implied warranty of14 //* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the15 //* GNU General Public License for more details.16 //*17 //* You should have received a copy of the GNU General Public License18 //* along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.19 //*/20 //#endregion1 #region License Information 2 /* HeuristicLab 3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL) 4 * 5 * This file is part of HeuristicLab. 6 * 7 * HeuristicLab is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 * 12 * HeuristicLab is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 #endregion 21 21 22 22 //using HeuristicLab.Common;
Note: See TracChangeset
for help on using the changeset viewer.