- Timestamp:
- 11/11/12 22:57:09 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs
r8886 r8887 20 20 #endregion 21 21 22 using System; 22 23 using System.Drawing; 24 using System.Linq; 23 25 using HeuristicLab.Common; 24 26 using HeuristicLab.Core; … … 71 73 #endregion 72 74 75 public string Filename { get; set; } 76 public override Image ItemImage { 77 get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; } 78 } 79 73 80 #region Parameter Properties 74 public ValueParameter<ItemList<Job>> JobDataParameter {75 get { return ( ValueParameter<ItemList<Job>>)Parameters["JobData"]; }81 public IValueParameter<ItemList<Job>> JobDataParameter { 82 get { return (IValueParameter<ItemList<Job>>)Parameters["JobData"]; } 76 83 } 77 84 public OptionalValueParameter<Schedule> BestKnownSolutionParameter { … … 85 92 get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; } 86 93 } 87 public ValueParameter<SchedulingEvaluator> SolutionEvaluatorParameter { 88 get { return (ValueParameter<SchedulingEvaluator>)Parameters["SolutionEvaluator"]; } 94 public IValueParameter<IScheduleEvaluator> ScheduleEvaluatorParameter { 95 get { return (IValueParameter<IScheduleEvaluator>)Parameters["ScheduleEvaluator"]; } 96 } 97 public OptionalValueParameter<IScheduleDecoder> ScheduleDecoderParameter { 98 get { return (OptionalValueParameter<IScheduleDecoder>)Parameters["ScheduleDecoder"]; } 89 99 } 90 100 #endregion … … 107 117 set { ResourcesParameter.Value.Value = value; } 108 118 } 109 public SchedulingEvaluator SolutionEvaluator { 110 get { return SolutionEvaluatorParameter.Value; } 111 set { SolutionEvaluatorParameter.Value = value; } 112 } 113 public override Image ItemImage { 114 get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; } 115 } 116 public string Filename { get; set; } 117 #endregion 118 119 public JobShopSchedulingProblem() 120 : base(new SchedulingEvaluationAlgorithm(), new JSMRandomCreator()) { 121 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>())); 122 Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance.")); 123 124 Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue())); 125 Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue())); 126 Parameters.Add(new ValueParameter<SchedulingEvaluator>("SolutionEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator())); 127 128 InitializeOperators(); 129 Load(DefaultInstance); 130 } 119 public IScheduleEvaluator ScheduleEvaluator { 120 get { return ScheduleEvaluatorParameter.Value; } 121 set { ScheduleEvaluatorParameter.Value = value; } 122 } 123 public IScheduleDecoder ScheduleDecoder { 124 get { return ScheduleDecoderParameter.Value; } 125 set { ScheduleDecoderParameter.Value = value; } 126 } 127 #endregion 131 128 132 129 [StorableConstructor] … … 134 131 private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner) 135 132 : base(original, cloner) { 136 } 133 RegisterEventHandlers(); 134 } 135 public JobShopSchedulingProblem() 136 : base(new SchedulingEvaluator(), new JSMRandomCreator()) { 137 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>())); 138 Parameters.Add(new OptionalValueParameter<Schedule>("BestKnownSolution", "The best known solution of this JSSP instance.")); 139 140 Parameters.Add(new FixedValueParameter<IntValue>("Jobs", "The number of jobs used in this JSSP instance.", new IntValue())); 141 Parameters.Add(new FixedValueParameter<IntValue>("Resources", "The number of resources used in this JSSP instance.", new IntValue())); 142 Parameters.Add(new ValueParameter<IScheduleEvaluator>("ScheduleEvaluator", "The evaluator used to determine the quality of a solution.", new MakespanEvaluator())); 143 Parameters.Add(new OptionalValueParameter<IScheduleDecoder>("ScheduleDecoder", "The operator that decodes the representation and creates a schedule.", new JSMDecoder())); 144 145 EvaluatorParameter.GetsCollected = false; 146 EvaluatorParameter.Hidden = true; 147 ScheduleDecoderParameter.Hidden = true; 148 149 InitializeOperators(); 150 Load(DefaultInstance); 151 RegisterEventHandlers(); 152 } 153 137 154 public override IDeepCloneable Clone(Cloner cloner) { 138 155 return new JobShopSchedulingProblem(this, cloner); 156 } 157 158 [StorableHook(HookType.AfterDeserialization)] 159 private void AfterDeserialization() { 160 RegisterEventHandlers(); 161 } 162 163 private void RegisterEventHandlers() { 164 ScheduleEvaluatorParameter.ValueChanged += ScheduleEvaluatorParameter_ValueChanged; 165 ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 166 SolutionCreatorParameter.ValueChanged += SolutionCreatorParameter_ValueChanged; 167 SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 168 ScheduleDecoderParameter.ValueChanged += ScheduleDecoderParameter_ValueChanged; 169 if (ScheduleDecoder != null) ScheduleDecoder.ScheduleParameter.ActualNameChanged += ScheduleDecoder_ScheduleParameter_ActualNameChanged; 139 170 } 140 171 … … 142 173 protected override void OnSolutionCreatorChanged() { 143 174 InitializeOperators(); 175 } 176 protected override void OnEvaluatorChanged() { 177 base.OnEvaluatorChanged(); 178 ParameterizeOperators(); 179 } 180 private void ScheduleEvaluatorParameter_ValueChanged(object sender, EventArgs eventArgs) { 181 ScheduleEvaluator.QualityParameter.ActualNameChanged += ScheduleEvaluator_QualityParameter_ActualNameChanged; 182 ParameterizeOperators(); 183 } 184 private void ScheduleEvaluator_QualityParameter_ActualNameChanged(object sender, EventArgs eventArgs) { 185 ParameterizeOperators(); 186 } 187 private void SolutionCreatorParameter_ValueChanged(object sender, EventArgs eventArgs) { 188 SolutionCreator.ScheduleEncodingParameter.ActualNameChanged += SolutionCreator_SchedulingEncodingParameter_ActualNameChanged; 189 ParameterizeOperators(); 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(); 144 200 } 145 201 #endregion … … 156 212 } 157 213 158 if (data.BestKnownQuality.HasValue) BestKnownQuality = new DoubleValue(data.BestKnownQuality.Value); 159 else BestKnownQuality = null; 214 BestKnownQuality = data.BestKnownQuality.HasValue ? new DoubleValue(data.BestKnownQuality.Value) : null; 160 215 if (data.BestKnownSchedule != null) { 161 216 var enc = new JSMEncoding(); … … 168 223 } 169 224 BestKnownSolution = new JSMDecoder().CreateScheduleFromEncoding(enc, jobData); 170 if (S olutionEvaluator is MeanTardinessEvaluator)225 if (ScheduleEvaluator is MeanTardinessEvaluator) 171 226 BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData)); 172 else if (S olutionEvaluator is MakespanEvaluator)227 else if (ScheduleEvaluator is MakespanEvaluator) 173 228 BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution)); 174 229 } … … 208 263 ApplyEncoding(); 209 264 Operators.Add(new BestSchedulingSolutionAnalyzer()); 265 ParameterizeOperators(); 210 266 } 211 267 … … 213 269 if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) { 214 270 Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>()); 215 var decoder = new JSMDecoder(); 216 ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder); 271 ScheduleDecoder = new JSMDecoder(); 217 272 } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) { 218 273 Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>()); 219 var decoder = new PRVDecoder(); 220 ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder); 274 ScheduleDecoder = new PRVDecoder(); 221 275 } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) { 222 276 Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>()); 223 var decoder = new PWRDecoder(); 224 ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder); 277 ScheduleDecoder = new PWRDecoder(); 225 278 } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) { 226 279 Operators.AddRange(ApplicationManager.Manager.GetInstances<IDirectScheduleOperator>()); 227 ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph<Schedule>(); 280 ScheduleDecoder = null; 281 } 282 } 283 284 private void ParameterizeOperators() { 285 Evaluator.ScheduleDecoderParameter.ActualName = ScheduleDecoderParameter.Name; 286 Evaluator.ScheduleDecoderParameter.Hidden = true; 287 Evaluator.ScheduleEvaluatorParameter.ActualName = ScheduleEvaluatorParameter.Name; 288 Evaluator.ScheduleEvaluatorParameter.Hidden = true; 289 Evaluator.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 290 Evaluator.QualityParameter.Hidden = true; 291 292 if (ScheduleDecoder != null) 293 ScheduleDecoder.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 294 295 if (ScheduleDecoder != null) { 296 ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 297 ScheduleEvaluator.ScheduleParameter.Hidden = true; 298 } else if (SolutionCreator is DirectScheduleRandomCreator) { 299 var directEvaluator = (DirectScheduleRandomCreator)SolutionCreator; 300 ScheduleEvaluator.ScheduleParameter.ActualName = directEvaluator.ScheduleEncodingParameter.ActualName; 301 ScheduleEvaluator.ScheduleParameter.Hidden = true; 302 } else { 303 ScheduleEvaluator.ScheduleParameter.ActualName = ScheduleEvaluator.ScheduleParameter.Name; 304 ScheduleEvaluator.ScheduleParameter.Hidden = false; 305 } 306 307 foreach (var op in Operators.OfType<IScheduleManipulator>()) { 308 op.ScheduleEncodingParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 309 op.ScheduleEncodingParameter.Hidden = true; 310 } 311 312 foreach (var op in Operators.OfType<IScheduleCrossover>()) { 313 op.ChildParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 314 op.ChildParameter.Hidden = true; 315 op.ParentsParameter.ActualName = SolutionCreator.ScheduleEncodingParameter.ActualName; 316 op.ParentsParameter.Hidden = true; 317 } 318 319 foreach (var op in Operators.OfType<BestSchedulingSolutionAnalyzer>()) { 320 op.QualityParameter.ActualName = ScheduleEvaluator.QualityParameter.ActualName; 321 if (ScheduleDecoder != null) { 322 op.ScheduleParameter.ActualName = ScheduleDecoder.ScheduleParameter.ActualName; 323 op.ScheduleParameter.Hidden = true; 324 } else if (SolutionCreator is DirectScheduleRandomCreator) { 325 op.ScheduleParameter.ActualName = ((DirectScheduleRandomCreator)SolutionCreator).ScheduleEncodingParameter.ActualName; 326 op.ScheduleParameter.Hidden = true; 327 } else { 328 op.ScheduleParameter.ActualName = op.ScheduleParameter.Name; 329 op.ScheduleParameter.Hidden = false; 330 } 228 331 } 229 332 }
Note: See TracChangeset
for help on using the changeset viewer.