Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/18/19 17:24:30 (6 years ago)
Author:
abeham
Message:

#2521: merged trunk changes up to r15681 into branch (removal of trunk/sources)

Location:
branches/2521_ProblemRefactoring
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • branches/2521_ProblemRefactoring

  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Analyzers/BestSchedulingSolutionAnalyzer.cs

    r13435 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Analyzers/SchedulingAnalyzer.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MakespanEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/MeanTardinessEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/ScheduleEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Evaluators/SchedulingEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    2626using HeuristicLab.Encodings.ScheduleEncoding;
    2727using HeuristicLab.Operators;
     28using HeuristicLab.Optimization;
    2829using HeuristicLab.Parameters;
    2930using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3233  [Item("SchedulingEvaluator", "First applies the decoder operator to obtain a schedule from an encoding and then applies the evaluator to obtain a quality.")]
    3334  [StorableClass]
    34   public class SchedulingEvaluator : InstrumentedOperator, ISchedulingEvaluator {
     35  public class SchedulingEvaluator : InstrumentedOperator, ISchedulingEvaluator, IStochasticOperator {
    3536
    3637    public IValueLookupParameter<IScheduleDecoder> ScheduleDecoderParameter {
     
    4950      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
    5051    }
     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    }
    5159
    5260    [StorableConstructor]
     
    5866      Parameters.Add(new ValueLookupParameter<IScheduleEvaluator>("ScheduleEvaluator", "The actual schedule evaluation operator."));
    5967      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."));
    6069      QualityParameter.Hidden = true;
    6170    }
     
    6372    public override IDeepCloneable Clone(Cloner cloner) {
    6473      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
    6584    }
    6685
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IJSSPOperator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/IScheduleEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Interfaces/ISchedulingEvaluator.cs

    r12012 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * 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
     22using System;
     23using System.Drawing;
     24using System.Linq;
     25using HeuristicLab.Common;
     26using HeuristicLab.Core;
     27using HeuristicLab.Data;
     28using HeuristicLab.Encodings.PermutationEncoding;
     29using HeuristicLab.Encodings.ScheduleEncoding;
     30using HeuristicLab.Encodings.ScheduleEncoding.JobSequenceMatrix;
     31using HeuristicLab.Encodings.ScheduleEncoding.PermutationWithRepetition;
     32using HeuristicLab.Encodings.ScheduleEncoding.PriorityRulesVector;
     33using HeuristicLab.Parameters;
     34using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     35using HeuristicLab.PluginInfrastructure;
     36using HeuristicLab.Problems.Instances;
     37
     38namespace 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  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    2323
    2424namespace HeuristicLab.Problems.Scheduling {
    25   [Plugin("HeuristicLab.Problems.Scheduling", "3.3.13.$WCREV$")]
     25  [Plugin("HeuristicLab.Problems.Scheduling", "3.3.15.$WCREV$")]
    2626  [PluginFile("HeuristicLab.Problems.Scheduling-3.3.dll", PluginFileType.Assembly)]
    2727  [PluginDependency("HeuristicLab.Collections", "3.3")]
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/Properties/AssemblyInfo.cs.frame

    r13321 r16692  
    11#region License Information
    22/* HeuristicLab
    3  * Copyright (C) 2002-2015 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
     3 * Copyright (C) 2002-2018 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
    44 *
    55 * This file is part of HeuristicLab.
     
    3131[assembly: AssemblyCompany("")]
    3232[assembly: AssemblyProduct("HeuristicLab")]
    33 [assembly: AssemblyCopyright("(c) 2002-2015 HEAL")]
     33[assembly: AssemblyCopyright("(c) 2002-2018 HEAL")]
    3434[assembly: AssemblyTrademark("")]
    3535[assembly: AssemblyCulture("")]
     
    5353// by using the '*' as shown below:
    5454[assembly: AssemblyVersion("3.3.0.0")]
    55 [assembly: AssemblyFileVersion("3.3.13.$WCREV$")]
     55[assembly: AssemblyFileVersion("3.3.15.$WCREV$")]
  • branches/2521_ProblemRefactoring/HeuristicLab.Problems.Scheduling/3.3/SchedulingProblem.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
     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
    2121
    2222//using HeuristicLab.Common;
Note: See TracChangeset for help on using the changeset viewer.