Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/08/15 14:31:05 (9 years ago)
Author:
mkommend
Message:

#2521: Adapted decoders for SchedulingProblem.

Location:
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix
Files:
1 added
6 edited
5 copied

Legend:

Unmodified
Added
Removed
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMJOXCrossover.cs

    r13437 r13443  
    4141
    4242    public static JSMEncoding Apply(IRandom random, JSMEncoding p1, JSMEncoding p2) {
    43       var result = new JSMEncoding();
     43      var result = new JSMEncoding(random.Next());
    4444
    4545      int nrOfResources = p1.JobSequenceMatrix.Count;
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs

    r13437 r13443  
    3939
    4040    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
    41       var result = new JSMEncoding();
     41      var result = new JSMEncoding(random.Next());
    4242
    4343      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs

    r13437 r13443  
    4040
    4141    public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) {
    42       var result = new JSMEncoding();
     42      var result = new JSMEncoding(random.Next());
    4343      int subSequenceLength = random.Next(parent1.JobSequenceMatrix[0].Length);
    4444      for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) {
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs

    r13437 r13443  
    2626using HeuristicLab.Core;
    2727using HeuristicLab.Encodings.PermutationEncoding;
    28 using HeuristicLab.Encodings.ScheduleEncoding;
    29 using HeuristicLab.Optimization;
    3028using HeuristicLab.Parameters;
    3129using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     30using HeuristicLab.Random;
    3231
    33 namespace HeuristicLab.Problems.Scheduling {
     32namespace HeuristicLab.Encodings.ScheduleEncoding {
    3433  [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")]
    3534  [StorableClass]
    36   public class JSMDecoder : ScheduleDecoder, IStochasticOperator, IJSSPOperator {
     35  public class JSMDecoder : ScheduleDecoder {
    3736
    38     public ILookupParameter<IRandom> RandomParameter {
    39       get { return (LookupParameter<IRandom>)Parameters["Random"]; }
    40     }
    41     public ILookupParameter<ItemList<Job>> JobDataParameter {
    42       get { return (LookupParameter<ItemList<Job>>)Parameters["JobData"]; }
    43     }
    4437    public IValueParameter<JSMDecodingErrorPolicy> DecodingErrorPolicyParameter {
    4538      get { return (IValueParameter<JSMDecodingErrorPolicy>)Parameters["DecodingErrorPolicy"]; }
     
    6659    public JSMDecoder()
    6760      : base() {
    68       Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
    69       Parameters.Add(new LookupParameter<ItemList<Job>>("JobData", "Job data taken from the Schedulingproblem - Instance."));
    7061      Parameters.Add(new ValueParameter<JSMDecodingErrorPolicy>("DecodingErrorPolicy", "Specify the policy that should be used to handle decoding errors.", new JSMDecodingErrorPolicy(JSMDecodingErrorPolicyTypes.RandomPolicy)));
    7162      Parameters.Add(new ValueParameter<JSMForcingStrategy>("ForcingStrategy", "Specifies a forcing strategy.", new JSMForcingStrategy(JSMForcingStrategyTypes.SwapForcing)));
    72 
    73       ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";
    7463    }
    7564
    76     private Task SelectTaskFromConflictSet(int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, ItemList<Permutation> jsm) {
     65    private static Task SelectTaskFromConflictSet(JSMEncoding solution, JSMDecodingErrorPolicyTypes decodingErrorPolicy, JSMForcingStrategyTypes forcingStrategy, int conflictedResourceNr, int progressOnConflictedResource, ItemList<Task> conflictSet, IRandom random) {
    7766      if (conflictSet.Count == 1)
    7867        return conflictSet[0];
     68
     69      var jsm = solution.JobSequenceMatrix;
    7970
    8071      //get solutionCandidate from jobSequencingMatrix
     
    8879
    8980      //if solutionCandidate wasn't found in conflictSet apply DecodingErrorPolicy and ForcingPolicy
    90       Task result = ApplyDecodingErrorPolicy(conflictSet, jsm[conflictedResourceNr], progressOnConflictedResource);
     81      Task result = ApplyDecodingErrorPolicy(decodingErrorPolicy, conflictSet, jsm[conflictedResourceNr], progressOnConflictedResource, random);
    9182      int newResolutionIndex = 0;
    9283
    9384      while (newResolutionIndex < jsm[conflictedResourceNr].Length && jsm[conflictedResourceNr][newResolutionIndex] != result.JobNr)
    9485        newResolutionIndex++;
    95       ApplyForcingStrategy(jsm, conflictedResourceNr, newResolutionIndex, progressOnConflictedResource, result.JobNr);
     86      ApplyForcingStrategy(forcingStrategy, solution, conflictedResourceNr, newResolutionIndex, progressOnConflictedResource, result.JobNr);
    9687
    9788      return result;
    9889    }
    9990
    100     private Task ApplyDecodingErrorPolicy(ItemList<Task> conflictSet, Permutation resource, int progress) {
    101       if (DecodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) {
     91    private static Task ApplyDecodingErrorPolicy(JSMDecodingErrorPolicyTypes decodingErrorPolicy, ItemList<Task> conflictSet, Permutation resource, int progress, IRandom random) {
     92      if (decodingErrorPolicy == JSMDecodingErrorPolicyTypes.RandomPolicy) {
    10293        //Random
    103         return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
     94        return conflictSet[random.Next(conflictSet.Count - 1)];
    10495      } else {
    10596        //Guided
     
    112103            return (conflictSet[j]);
    113104        }
    114         return conflictSet[RandomParameter.ActualValue.Next(conflictSet.Count - 1)];
     105        return conflictSet[random.Next(conflictSet.Count - 1)];
    115106      }
    116107    }
    117108
    118     private void ApplyForcingStrategy(ItemList<Permutation> jsm, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
    119       if (ForcingStrategy == JSMForcingStrategyTypes.SwapForcing) {
     109    private static void ApplyForcingStrategy(JSMForcingStrategyTypes forcingStrategy, JSMEncoding solution, int conflictedResource, int newResolutionIndex, int progressOnResource, int newResolution) {
     110      var jsm = solution.JobSequenceMatrix;
     111      if (forcingStrategy == JSMForcingStrategyTypes.SwapForcing) {
    120112        //SwapForcing
    121113        jsm[conflictedResource][newResolutionIndex] = jsm[conflictedResource][progressOnResource];
    122114        jsm[conflictedResource][progressOnResource] = newResolution;
    123       } else {
     115      } else if (forcingStrategy == JSMForcingStrategyTypes.ShiftForcing) {
    124116        //ShiftForcing
    125117        List<int> asList = jsm[conflictedResource].ToList<int>();
     
    132124        }
    133125        jsm[conflictedResource] = new Permutation(PermutationTypes.Absolute, asList.ToArray<int>());
     126      } else {
     127        throw new InvalidOperationException(string.Format("JSMDecoder encountered unknown forcing strategy {0}", forcingStrategy));
    134128      }
    135129    }
    136130
    137     public Schedule CreateScheduleFromEncoding(JSMEncoding solution, ItemList<Job> jobData) {
    138       ItemList<Permutation> jobSequenceMatrix = solution.JobSequenceMatrix;
     131    public override Schedule DecodeSchedule(ISchedule encoding, ItemList<Job> jobData) {
     132      var solution = encoding as JSMEncoding;
     133      if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
     134      return DecodeSchedule(solution, jobData, DecodingErrorPolicy, ForcingStrategy);
     135    }
    139136
     137    public static Schedule DecodeSchedule(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicyTypes decodingErrorPolicy, JSMForcingStrategyTypes forcingStrategy) {
     138      var random = new FastRandom(solution.RandomSeed);
    140139      var jobs = (ItemList<Job>)jobData.Clone();
    141140      var resultingSchedule = new Schedule(jobs[0].Tasks.Count);
     
    162161        //STEP 3 - Select a task from the conflict set
    163162        int progressOnResource = conflictedResource.Tasks.Count;
    164         Task selectedTask = SelectTaskFromConflictSet(conflictedResourceNr, progressOnResource, conflictSet, jobSequenceMatrix);
     163        Task selectedTask = SelectTaskFromConflictSet(solution, decodingErrorPolicy, forcingStrategy, conflictedResourceNr, progressOnResource, conflictSet, random);
    165164
    166165        //STEP 4 - Add the selected task to the current schedule
     
    175174      return resultingSchedule;
    176175    }
    177 
    178     public override Schedule CreateScheduleFromEncoding(ISchedule encoding) {
    179       var solution = encoding as JSMEncoding;
    180       if (solution == null) throw new InvalidOperationException("Encoding is not of type JSMEncoding");
    181       return CreateScheduleFromEncoding(solution, JobDataParameter.ActualValue);
    182     }
    183176  }
    184177}
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecodingErrorPolicy.cs

    r13434 r13443  
    2222using System.Drawing;
    2323using HeuristicLab.Common;
     24using HeuristicLab.Common.Resources;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2728
    28 namespace HeuristicLab.Problems.Scheduling {
     29namespace HeuristicLab.Encodings.ScheduleEncoding {
    2930  [Item("JSMDecodingErrorPolicy", "Represents a policy for handling decoding errors.")]
    3031  [StorableClass]
     
    3233
    3334    public static new Image StaticItemImage {
    34       get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }
     35      get { return VSImageLibrary.Enum; }
    3536    }
    3637
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecodingErrorPolicyTypes.cs

    r13434 r13443  
    2020#endregion
    2121
    22 namespace HeuristicLab.Problems.Scheduling {
     22namespace HeuristicLab.Encodings.ScheduleEncoding {
    2323  public enum JSMDecodingErrorPolicyTypes {
    2424    RandomPolicy,
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMForcingStrategy.cs

    r13434 r13443  
    2222using System.Drawing;
    2323using HeuristicLab.Common;
     24using HeuristicLab.Common.Resources;
    2425using HeuristicLab.Core;
    2526using HeuristicLab.Data;
    2627using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    2728
    28 namespace HeuristicLab.Problems.Scheduling {
     29namespace HeuristicLab.Encodings.ScheduleEncoding {
    2930  [Item("JSMForcingStrategy", "Represents a forcing strategy.")]
    3031  [StorableClass]
     
    3233
    3334    public static new Image StaticItemImage {
    34       get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }
     35      get { return VSImageLibrary.Enum; }
    3536    }
    3637
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMForcingStrategyTypes.cs

    r13434 r13443  
    2020#endregion
    2121
    22 namespace HeuristicLab.Problems.Scheduling {
     22namespace HeuristicLab.Encodings.ScheduleEncoding {
    2323  public enum JSMForcingStrategyTypes {
    2424    ShiftForcing,
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs

    r13437 r13443  
    3232
    3333    [Storable]
    34     public ItemList<Permutation> JobSequenceMatrix { get; set; }
     34    public ItemList<Permutation> JobSequenceMatrix { get; private set; }
     35    [Storable]
     36    public int RandomSeed { get; private set; }
    3537
    3638    [StorableConstructor]
     
    3941      : base(original, cloner) {
    4042      this.JobSequenceMatrix = cloner.Clone(original.JobSequenceMatrix);
     43      this.RandomSeed = original.RandomSeed;
    4144    }
    4245    public override IDeepCloneable Clone(Cloner cloner) {
    4346      return new JSMEncoding(this, cloner);
    4447    }
    45     public JSMEncoding()
     48    public JSMEncoding(int randomSeed)
    4649      : base() {
     50      RandomSeed = randomSeed;
    4751      JobSequenceMatrix = new ItemList<Permutation>();
    4852    }
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs

    r13437 r13443  
    4949
    5050    public static JSMEncoding Apply(int jobs, int resources, IRandom random) {
    51       var solution = new JSMEncoding();
     51      var solution = new JSMEncoding(random.Next());
    5252      for (int i = 0; i < resources; i++) {
    5353        solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, jobs, random));
  • branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JobSequenceMatrixEncoding.cs

    r13437 r13443  
    2727using HeuristicLab.Common;
    2828using HeuristicLab.Core;
    29 using HeuristicLab.Encodings.ScheduleEncoding;
    3029using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    3130using HeuristicLab.PluginInfrastructure;
    3231
    33 namespace HeuristicLab.Encodings.Schedule {
     32namespace HeuristicLab.Encodings.ScheduleEncoding {
    3433  [StorableClass]
    35   public sealed class JobSequenceMatrixEncoding : ScheduleEncoding {
     34  public sealed class JobSequenceMatrixEncoding : ScheduleEncoding<JSMEncoding> {
    3635    [StorableConstructor]
    3736    private JobSequenceMatrixEncoding(bool deserializing) : base(deserializing) { }
     
    4443      : base() {
    4544      SolutionCreator = new JSMRandomCreator();
     45      Decoder = new JSMDecoder();
    4646      DiscoverOperators();
    4747    }
Note: See TracChangeset for help on using the changeset viewer.