Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/11/12 22:57:09 (11 years ago)
Author:
abeham
Message:

#1329:

  • Moved decoders and evaluators from encoding to problem
  • Removed unnecessary state variables in operators
  • Introduced parameters in interfaces and added wiring code
  • Removed ConcreteScheduleManipulator as it does not perform any manipulation
  • Made ErrorPolicy and ForcingStrategy configurable and added views for them
  • Renamed the SchedulingEvaluationAlgorithm and also converted the AlgorithmOperator to a SingleSuccessorOperator
  • Fixed Plugin- and AssemblyFileVersion
  • Added missing license headers
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.Scheduling/3.3/JobShopSchedulingProblem.cs

    r8886 r8887  
    2020#endregion
    2121
     22using System;
    2223using System.Drawing;
     24using System.Linq;
    2325using HeuristicLab.Common;
    2426using HeuristicLab.Core;
     
    7173    #endregion
    7274
     75    public string Filename { get; set; }
     76    public override Image ItemImage {
     77      get { return HeuristicLab.Common.Resources.VSImageLibrary.Type; }
     78    }
     79
    7380    #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"]; }
    7683    }
    7784    public OptionalValueParameter<Schedule> BestKnownSolutionParameter {
     
    8592      get { return (IFixedValueParameter<IntValue>)Parameters["Resources"]; }
    8693    }
    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"]; }
    8999    }
    90100    #endregion
     
    107117      set { ResourcesParameter.Value.Value = value; }
    108118    }
    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
    131128
    132129    [StorableConstructor]
     
    134131    private JobShopSchedulingProblem(JobShopSchedulingProblem original, Cloner cloner)
    135132      : 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
    137154    public override IDeepCloneable Clone(Cloner cloner) {
    138155      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;
    139170    }
    140171
     
    142173    protected override void OnSolutionCreatorChanged() {
    143174      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();
    144200    }
    145201    #endregion
     
    156212      }
    157213
    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;
    160215      if (data.BestKnownSchedule != null) {
    161216        var enc = new JSMEncoding();
     
    168223        }
    169224        BestKnownSolution = new JSMDecoder().CreateScheduleFromEncoding(enc, jobData);
    170         if (SolutionEvaluator is MeanTardinessEvaluator)
     225        if (ScheduleEvaluator is MeanTardinessEvaluator)
    171226          BestKnownQuality = new DoubleValue(MeanTardinessEvaluator.GetMeanTardiness(BestKnownSolution, jobData));
    172         else if (SolutionEvaluator is MakespanEvaluator)
     227        else if (ScheduleEvaluator is MakespanEvaluator)
    173228          BestKnownQuality = new DoubleValue(MakespanEvaluator.GetMakespan(BestKnownSolution));
    174229      }
     
    208263      ApplyEncoding();
    209264      Operators.Add(new BestSchedulingSolutionAnalyzer());
     265      ParameterizeOperators();
    210266    }
    211267
     
    213269      if (SolutionCreator.GetType() == typeof(JSMRandomCreator)) {
    214270        Operators.AddRange(ApplicationManager.Manager.GetInstances<IJSMOperator>());
    215         var decoder = new JSMDecoder();
    216         ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
     271        ScheduleDecoder = new JSMDecoder();
    217272      } else if (SolutionCreator.GetType() == typeof(PRVRandomCreator)) {
    218273        Operators.AddRange(ApplicationManager.Manager.GetInstances<IPRVOperator>());
    219         var decoder = new PRVDecoder();
    220         ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
     274        ScheduleDecoder = new PRVDecoder();
    221275      } else if (SolutionCreator.GetType() == typeof(PWRRandomCreator)) {
    222276        Operators.AddRange(ApplicationManager.Manager.GetInstances<IPWROperator>());
    223         var decoder = new PWRDecoder();
    224         ((SchedulingEvaluationAlgorithm)EvaluatorParameter.ActualValue).InitializeOperatorGraph(decoder);
     277        ScheduleDecoder = new PWRDecoder();
    225278      } else if (SolutionCreator.GetType() == typeof(DirectScheduleRandomCreator)) {
    226279        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        }
    228331      }
    229332    }
Note: See TracChangeset for help on using the changeset viewer.