Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/15/15 15:16:24 (9 years ago)
Author:
mkommend
Message:

#2521: Refactored problem base classes and adapted scheduling encoding, scheduling problem and unit tests.

Location:
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs

    r13437 r13469  
    2525
    2626namespace HeuristicLab.Encodings.ScheduleEncoding {
    27   public interface IScheduleCreator : ISolutionCreator<ISchedule>, IScheduleOperator {
    28     ILookupParameter<ISchedule> ScheduleParameter { get; }
     27  public interface IScheduleCreator<TSchedule> : ISolutionCreator<TSchedule>, IScheduleOperator
     28  where TSchedule : class,ISchedule {
     29    ILookupParameter<TSchedule> ScheduleParameter { get; }
    2930    IValueLookupParameter<IntValue> JobsParameter { get; }
    3031    IValueLookupParameter<IntValue> ResourcesParameter { get; }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs

    r13443 r13469  
    3030    Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData);
    3131  }
     32
     33  public interface IScheduleDecoder<TSchedule> : IScheduleDecoder
     34    where TSchedule : class, ISchedule {
     35    Schedule DecodeSchedule(TSchedule solution, ItemList<Job> jobData);
     36  }
    3237}
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs

    r13449 r13469  
    3434  [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
    3535  [StorableClass]
    36   public class JSMDecoder : ScheduleDecoder {
     36  public class JSMDecoder : ScheduleDecoder<JSMEncoding> {
    3737
    3838    public IFixedValueParameter<EnumValue<JSMDecodingErrorPolicy>> DecodingErrorPolicyParameter {
     
    130130    }
    131131
    132     public override Schedule DecodeSchedule(ISchedule encoding, ItemList<Job> jobData) {
    133       var solution = encoding as JSMEncoding;
    134       if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
    135       return DecodeSchedule(solution, jobData, DecodingErrorPolicy, ForcingStrategy);
     132    public override Schedule DecodeSchedule(JSMEncoding encoding, ItemList<Job> jobData) {
     133      return Decode(encoding, jobData, DecodingErrorPolicy, ForcingStrategy);
    136134    }
    137135
    138     public static Schedule DecodeSchedule(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
     136    public static Schedule Decode(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {
    139137      var random = new FastRandom(solution.RandomSeed);
    140138      var jobs = (ItemList<Job>)jobData.Clone();
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs

    r13443 r13469  
    3030  [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")]
    3131  [StorableClass]
    32   public class JSMRandomCreator : ScheduleCreator, IStochasticOperator {
     32  public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator {
    3333
    3434    public ILookupParameter<IRandom> RandomParameter {
     
    5656    }
    5757
    58     protected override ISchedule CreateSolution() {
     58    protected override JSMEncoding CreateSolution() {
    5959      return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
    6060    }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs

    r13443 r13469  
    2828  [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")]
    2929  [StorableClass]
    30   public class PWRDecoder : ScheduleDecoder {
     30  public class PWRDecoder : ScheduleDecoder<PWREncoding> {
    3131    [StorableConstructor]
    3232    protected PWRDecoder(bool deserializing) : base(deserializing) { }
     
    3838    }
    3939
    40     public override Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData) {
    41       var pwr = solution as PWREncoding;
    42       if (pwr == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
    43       return DecodeSchedule(pwr, jobData);
     40    public override Schedule DecodeSchedule(PWREncoding solution, ItemList<Job> jobData) {
     41      return Decode(solution, jobData);
    4442    }
    4543
    46     public static Schedule DecodeSchedule(PWREncoding solution, ItemList<Job> jobData) {
     44    public static Schedule Decode(PWREncoding solution, ItemList<Job> jobData) {
    4745      var jobs = (ItemList<Job>)jobData.Clone();
    4846      var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs

    r13437 r13469  
    2929  [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")]
    3030  [StorableClass]
    31   public class PWRRandomCreator : ScheduleCreator, IStochasticOperator {
     31  public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator {
    3232
    3333    public ILookupParameter<IRandom> RandomParameter {
     
    5151    }
    5252
    53     protected override ISchedule CreateSolution() {
     53    protected override PWREncoding CreateSolution() {
    5454      return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue);
    5555    }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame

    r13321 r13469  
    3535  [PluginDependency("HeuristicLab.Parameters", "3.3")]
    3636  [PluginDependency("HeuristicLab.Persistence", "3.3")]
     37  [PluginDependency("HeuristicLab.Random", "3.3")]
    3738  public class HeuristicLabEncodingsScheduleEncodingPlugin : PluginBase {
    3839  }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs

    r13443 r13469  
    2020#endregion
    2121
    22 using System;
    2322using System.Linq;
    2423using HeuristicLab.Common;
    2524using HeuristicLab.Core;
    26 using HeuristicLab.Encodings.ScheduleEncoding;
    2725using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2826using HeuristicLab.Random;
     
    3129  [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")]
    3230  [StorableClass]
    33   public class PRVDecoder : ScheduleDecoder {
     31  public class PRVDecoder : ScheduleDecoder<PRVEncoding> {
    3432    #region Priority Rules
    3533    //smallest number of remaining tasks
     
    189187    }
    190188
    191     public override Schedule DecodeSchedule(ISchedule encoding, ItemList<Job> jobData) {
    192       var solution = encoding as PRVEncoding;
    193       if (solution == null) throw new InvalidOperationException("Encoding is not of type PRVEncoding");
    194       return DecodeSchedule(solution, jobData);
    195     }
    196 
    197     public static Schedule DecodeSchedule(PRVEncoding solution, ItemList<Job> jobData) {
     189    public override Schedule DecodeSchedule(PRVEncoding encoding, ItemList<Job> jobData) {
     190      return Decode(encoding, jobData);
     191    }
     192
     193    public static Schedule Decode(PRVEncoding solution, ItemList<Job> jobData) {
    198194      var random = new FastRandom(solution.RandomSeed);
    199195      var jobs = (ItemList<Job>)jobData.Clone();
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs

    r13443 r13469  
    2929  [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")]
    3030  [StorableClass]
    31   public class PRVRandomCreator : ScheduleCreator, IStochasticOperator {
     31  public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator {
    3232
    3333    [Storable]
     
    5858    }
    5959
    60     protected override ISchedule CreateSolution() {
     60    protected override PRVEncoding CreateSolution() {
    6161      return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue, NrOfRules);
    6262    }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs

    r13437 r13469  
    3030  [Item("ScheduleCreator", "Represents the generalized form of creators for Scheduling Problems.")]
    3131  [StorableClass]
    32   public abstract class ScheduleCreator : InstrumentedOperator, IScheduleCreator {
     32  public abstract class ScheduleCreator<TSchedule> : InstrumentedOperator, IScheduleCreator<TSchedule>
     33  where TSchedule : class,ISchedule {
    3334
    34     public ILookupParameter<ISchedule> ScheduleParameter {
    35       get { return (ILookupParameter<ISchedule>)Parameters["Schedule"]; }
     35    public ILookupParameter<TSchedule> ScheduleParameter {
     36      get { return (ILookupParameter<TSchedule>)Parameters["Schedule"]; }
    3637    }
    3738    public IValueLookupParameter<IntValue> JobsParameter {
     
    4445    [StorableConstructor]
    4546    protected ScheduleCreator(bool deserializing) : base(deserializing) { }
    46     protected ScheduleCreator(ScheduleCreator original, Cloner cloner) : base(original, cloner) { }
     47    protected ScheduleCreator(ScheduleCreator<TSchedule> original, Cloner cloner) : base(original, cloner) { }
    4748    public ScheduleCreator()
    4849      : base() {
    49       Parameters.Add(new LookupParameter<ISchedule>("Schedule", "The new scheduling solution candidate."));
     50      Parameters.Add(new LookupParameter<TSchedule>("Schedule", "The new scheduling solution candidate."));
    5051      Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance."));
    5152      Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance."));
     
    5758    }
    5859
    59     protected abstract ISchedule CreateSolution();
     60    protected abstract TSchedule CreateSolution();
    6061  }
    6162}
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs

    r13443 r13469  
    2020#endregion
    2121
     22using System;
    2223using HeuristicLab.Common;
    2324using HeuristicLab.Core;
     
    2930  [Item("ScheduleDecoder", "A schedule decoder translates a respresentation into an actual schedule.")]
    3031  [StorableClass]
    31   public abstract class ScheduleDecoder : SingleSuccessorOperator, IScheduleDecoder {
     32  public abstract class ScheduleDecoder<TSchedule> : SingleSuccessorOperator, IScheduleDecoder<TSchedule>
     33  where TSchedule : class, ISchedule {
    3234
    3335    public ILookupParameter<ISchedule> ScheduleEncodingParameter {
     
    4345    [StorableConstructor]
    4446    protected ScheduleDecoder(bool deserializing) : base(deserializing) { }
    45     protected ScheduleDecoder(ScheduleDecoder original, Cloner cloner) : base(original, cloner) { }
     47    protected ScheduleDecoder(ScheduleDecoder<TSchedule> original, Cloner cloner) : base(original, cloner) { }
    4648    public ScheduleDecoder()
    4749      : base() {
     
    5153    }
    5254
    53     public abstract Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData);
     55    public Schedule DecodeSchedule(ISchedule schedule, ItemList<Job> jobData) {
     56      TSchedule solution = schedule as TSchedule;
     57      if (solution == null) throw new InvalidOperationException("Encoding is not of type " + typeof(TSchedule).GetPrettyName());
     58      return DecodeSchedule(solution, jobData);
     59    }
     60    public abstract Schedule DecodeSchedule(TSchedule schedule, ItemList<Job> jobData);
    5461
    5562    public override IOperation Apply() {
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs

    r13443 r13469  
    3434namespace HeuristicLab.Encodings.ScheduleEncoding {
    3535  [StorableClass]
    36   public abstract class ScheduleEncoding<TSchedule> : Encoding<ISchedule>, IScheduleEncoding
     36  public abstract class ScheduleEncoding<TSchedule> : Encoding<TSchedule>, IScheduleEncoding
    3737  where TSchedule : class, ISchedule {
    3838    #region Encoding Parameters
     
    8585
    8686    [Storable]
    87     private IValueParameter<IScheduleDecoder> decoderParameter;
    88 
    89     public IValueParameter<IScheduleDecoder> DecoderParameter {
     87    private IValueParameter<IScheduleDecoder<TSchedule>> decoderParameter;
     88    public IValueParameter<IScheduleDecoder<TSchedule>> DecoderParameter {
    9089      get { return decoderParameter; }
    9190      set {
     
    114113    }
    115114
    116     public IScheduleDecoder Decoder {
     115    public IScheduleDecoder<TSchedule> Decoder {
    117116      get { return DecoderParameter.Value; }
    118117      set { DecoderParameter.Value = value; }
     
    123122    protected ScheduleEncoding(ScheduleEncoding<TSchedule> original, Cloner cloner)
    124123      : base(original, cloner) {
     124      jobDataParameter = cloner.Clone(original.JobDataParameter);
     125      jobsParameter = cloner.Clone(original.JobsParameter);
     126      resourcesParameter = cloner.Clone(original.ResourcesParameter);
     127      decoderParameter = cloner.Clone(original.DecoderParameter);
    125128    }
    126129
     
    135138      jobsParameter = new FixedValueParameter<IntValue>(Name + ".Jobs", new IntValue(jobs));
    136139      resourcesParameter = new FixedValueParameter<IntValue>(Name + ".Resources", new IntValue(resources));
    137       decoderParameter = new ValueParameter<IScheduleDecoder>(Name + ".Decoder");
     140      decoderParameter = new ValueParameter<IScheduleDecoder<TSchedule>>(Name + ".Decoder");
    138141
    139142      Parameters.Add(jobDataParameter);
     
    163166
    164167    public override void ConfigureOperators(IEnumerable<IItem> operators) {
    165       ConfigureCreators(operators.OfType<IScheduleCreator>());
     168      ConfigureCreators(operators.OfType<IScheduleCreator<TSchedule>>());
    166169      ConfigureCrossovers(operators.OfType<IScheduleCrossover>());
    167170      ConfigureManipulators(operators.OfType<IScheduleManipulator>());
    168171    }
    169172
    170     private void ConfigureCreators(IEnumerable<IScheduleCreator> creators) {
     173    private void ConfigureCreators(IEnumerable<IScheduleCreator<TSchedule>> creators) {
    171174      foreach (var creator in creators) {
    172175        creator.ScheduleParameter.ActualName = Name;
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs

    r13443 r13469  
    2020#endregion
    2121
    22 using System;
    2322using HeuristicLab.Common;
    2423using HeuristicLab.Core;
     
    2827  [Item("DirectScheduleDecoder", "An item used to convert a direct schedule into a generalized schedule.")]
    2928  [StorableClass]
    30   public class DirectScheduleDecoder : ScheduleDecoder {
     29  public class DirectScheduleDecoder : ScheduleDecoder<Schedule> {
    3130    [StorableConstructor]
    3231    protected DirectScheduleDecoder(bool deserializing) : base(deserializing) { }
     
    3837    }
    3938
    40     public override Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData) {
    41       var schedule = solution as Schedule;
    42       if (schedule == null) throw new InvalidOperationException("Encoding is not of type PWREncoding");
    43       return DecodeSchedule(schedule, jobData);
     39    public override Schedule DecodeSchedule(Schedule solution, ItemList<Job> jobData) {
     40      return Decode(solution, jobData);
    4441    }
    4542
    46     public static Schedule DecodeSchedule(Schedule solution, ItemList<Job> jobData) {
     43    public static Schedule Decode(Schedule solution, ItemList<Job> jobData) {
    4744      return solution;
    4845    }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs

    r13443 r13469  
    3030  [Item("DirectScheduleRandomCreator", "Creator class used to create schedule encoding objects.")]
    3131  [StorableClass]
    32   public class DirectScheduleRandomCreator : ScheduleCreator, IStochasticOperator, IDirectScheduleOperator {
     32  public class DirectScheduleRandomCreator : ScheduleCreator<Schedule>, IStochasticOperator, IDirectScheduleOperator {
    3333
    3434    public ILookupParameter<IRandom> RandomParameter {
     
    6868
    6969
    70 
    71     protected override ISchedule CreateSolution() {
     70    protected override Schedule CreateSolution() {
    7271      var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone();
    7372      var pwrEncoding = new PWREncoding(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value,
Note: See TracChangeset for help on using the changeset viewer.