Changeset 13443 for branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix
- Timestamp:
- 12/08/15 14:31:05 (9 years ago)
- 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 41 41 42 42 public static JSMEncoding Apply(IRandom random, JSMEncoding p1, JSMEncoding p2) { 43 var result = new JSMEncoding( );43 var result = new JSMEncoding(random.Next()); 44 44 45 45 int nrOfResources = p1.JobSequenceMatrix.Count; -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMOXCrossover.cs
r13437 r13443 39 39 40 40 public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) { 41 var result = new JSMEncoding( );41 var result = new JSMEncoding(random.Next()); 42 42 43 43 for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) { -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Crossovers/JSMSXXCrossover.cs
r13437 r13443 40 40 41 41 public static JSMEncoding Apply(IRandom random, JSMEncoding parent1, JSMEncoding parent2) { 42 var result = new JSMEncoding( );42 var result = new JSMEncoding(random.Next()); 43 43 int subSequenceLength = random.Next(parent1.JobSequenceMatrix[0].Length); 44 44 for (int i = 0; i < parent1.JobSequenceMatrix.Count; i++) { -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs
r13437 r13443 26 26 using HeuristicLab.Core; 27 27 using HeuristicLab.Encodings.PermutationEncoding; 28 using HeuristicLab.Encodings.ScheduleEncoding;29 using HeuristicLab.Optimization;30 28 using HeuristicLab.Parameters; 31 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 30 using HeuristicLab.Random; 32 31 33 namespace HeuristicLab. Problems.Scheduling {32 namespace HeuristicLab.Encodings.ScheduleEncoding { 34 33 [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")] 35 34 [StorableClass] 36 public class JSMDecoder : ScheduleDecoder , IStochasticOperator, IJSSPOperator{35 public class JSMDecoder : ScheduleDecoder { 37 36 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 }44 37 public IValueParameter<JSMDecodingErrorPolicy> DecodingErrorPolicyParameter { 45 38 get { return (IValueParameter<JSMDecodingErrorPolicy>)Parameters["DecodingErrorPolicy"]; } … … 66 59 public JSMDecoder() 67 60 : 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."));70 61 Parameters.Add(new ValueParameter<JSMDecodingErrorPolicy>("DecodingErrorPolicy", "Specify the policy that should be used to handle decoding errors.", new JSMDecodingErrorPolicy(JSMDecodingErrorPolicyTypes.RandomPolicy))); 71 62 Parameters.Add(new ValueParameter<JSMForcingStrategy>("ForcingStrategy", "Specifies a forcing strategy.", new JSMForcingStrategy(JSMForcingStrategyTypes.SwapForcing))); 72 73 ScheduleEncodingParameter.ActualName = "JobSequenceMatrix";74 63 } 75 64 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) { 77 66 if (conflictSet.Count == 1) 78 67 return conflictSet[0]; 68 69 var jsm = solution.JobSequenceMatrix; 79 70 80 71 //get solutionCandidate from jobSequencingMatrix … … 88 79 89 80 //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); 91 82 int newResolutionIndex = 0; 92 83 93 84 while (newResolutionIndex < jsm[conflictedResourceNr].Length && jsm[conflictedResourceNr][newResolutionIndex] != result.JobNr) 94 85 newResolutionIndex++; 95 ApplyForcingStrategy( jsm, conflictedResourceNr, newResolutionIndex, progressOnConflictedResource, result.JobNr);86 ApplyForcingStrategy(forcingStrategy, solution, conflictedResourceNr, newResolutionIndex, progressOnConflictedResource, result.JobNr); 96 87 97 88 return result; 98 89 } 99 90 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) { 102 93 //Random 103 return conflictSet[ RandomParameter.ActualValue.Next(conflictSet.Count - 1)];94 return conflictSet[random.Next(conflictSet.Count - 1)]; 104 95 } else { 105 96 //Guided … … 112 103 return (conflictSet[j]); 113 104 } 114 return conflictSet[ RandomParameter.ActualValue.Next(conflictSet.Count - 1)];105 return conflictSet[random.Next(conflictSet.Count - 1)]; 115 106 } 116 107 } 117 108 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) { 120 112 //SwapForcing 121 113 jsm[conflictedResource][newResolutionIndex] = jsm[conflictedResource][progressOnResource]; 122 114 jsm[conflictedResource][progressOnResource] = newResolution; 123 } else {115 } else if (forcingStrategy == JSMForcingStrategyTypes.ShiftForcing) { 124 116 //ShiftForcing 125 117 List<int> asList = jsm[conflictedResource].ToList<int>(); … … 132 124 } 133 125 jsm[conflictedResource] = new Permutation(PermutationTypes.Absolute, asList.ToArray<int>()); 126 } else { 127 throw new InvalidOperationException(string.Format("JSMDecoder encountered unknown forcing strategy {0}", forcingStrategy)); 134 128 } 135 129 } 136 130 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 } 139 136 137 public static Schedule DecodeSchedule(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicyTypes decodingErrorPolicy, JSMForcingStrategyTypes forcingStrategy) { 138 var random = new FastRandom(solution.RandomSeed); 140 139 var jobs = (ItemList<Job>)jobData.Clone(); 141 140 var resultingSchedule = new Schedule(jobs[0].Tasks.Count); … … 162 161 //STEP 3 - Select a task from the conflict set 163 162 int progressOnResource = conflictedResource.Tasks.Count; 164 Task selectedTask = SelectTaskFromConflictSet( conflictedResourceNr, progressOnResource, conflictSet, jobSequenceMatrix);163 Task selectedTask = SelectTaskFromConflictSet(solution, decodingErrorPolicy, forcingStrategy, conflictedResourceNr, progressOnResource, conflictSet, random); 165 164 166 165 //STEP 4 - Add the selected task to the current schedule … … 175 174 return resultingSchedule; 176 175 } 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 }183 176 } 184 177 } -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecodingErrorPolicy.cs
r13434 r13443 22 22 using System.Drawing; 23 23 using HeuristicLab.Common; 24 using HeuristicLab.Common.Resources; 24 25 using HeuristicLab.Core; 25 26 using HeuristicLab.Data; 26 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 28 28 namespace HeuristicLab. Problems.Scheduling {29 namespace HeuristicLab.Encodings.ScheduleEncoding { 29 30 [Item("JSMDecodingErrorPolicy", "Represents a policy for handling decoding errors.")] 30 31 [StorableClass] … … 32 33 33 34 public static new Image StaticItemImage { 34 get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }35 get { return VSImageLibrary.Enum; } 35 36 } 36 37 -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecodingErrorPolicyTypes.cs
r13434 r13443 20 20 #endregion 21 21 22 namespace HeuristicLab. Problems.Scheduling {22 namespace HeuristicLab.Encodings.ScheduleEncoding { 23 23 public enum JSMDecodingErrorPolicyTypes { 24 24 RandomPolicy, -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMForcingStrategy.cs
r13434 r13443 22 22 using System.Drawing; 23 23 using HeuristicLab.Common; 24 using HeuristicLab.Common.Resources; 24 25 using HeuristicLab.Core; 25 26 using HeuristicLab.Data; 26 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 28 28 namespace HeuristicLab. Problems.Scheduling {29 namespace HeuristicLab.Encodings.ScheduleEncoding { 29 30 [Item("JSMForcingStrategy", "Represents a forcing strategy.")] 30 31 [StorableClass] … … 32 33 33 34 public static new Image StaticItemImage { 34 get { return HeuristicLab.Common.Resources.VSImageLibrary.Enum; }35 get { return VSImageLibrary.Enum; } 35 36 } 36 37 -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMForcingStrategyTypes.cs
r13434 r13443 20 20 #endregion 21 21 22 namespace HeuristicLab. Problems.Scheduling {22 namespace HeuristicLab.Encodings.ScheduleEncoding { 23 23 public enum JSMForcingStrategyTypes { 24 24 ShiftForcing, -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMEncoding.cs
r13437 r13443 32 32 33 33 [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; } 35 37 36 38 [StorableConstructor] … … 39 41 : base(original, cloner) { 40 42 this.JobSequenceMatrix = cloner.Clone(original.JobSequenceMatrix); 43 this.RandomSeed = original.RandomSeed; 41 44 } 42 45 public override IDeepCloneable Clone(Cloner cloner) { 43 46 return new JSMEncoding(this, cloner); 44 47 } 45 public JSMEncoding( )48 public JSMEncoding(int randomSeed) 46 49 : base() { 50 RandomSeed = randomSeed; 47 51 JobSequenceMatrix = new ItemList<Permutation>(); 48 52 } -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs
r13437 r13443 49 49 50 50 public static JSMEncoding Apply(int jobs, int resources, IRandom random) { 51 var solution = new JSMEncoding( );51 var solution = new JSMEncoding(random.Next()); 52 52 for (int i = 0; i < resources; i++) { 53 53 solution.JobSequenceMatrix.Add(new Permutation(PermutationTypes.Absolute, jobs, random)); -
branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JobSequenceMatrixEncoding.cs
r13437 r13443 27 27 using HeuristicLab.Common; 28 28 using HeuristicLab.Core; 29 using HeuristicLab.Encodings.ScheduleEncoding;30 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 31 30 using HeuristicLab.PluginInfrastructure; 32 31 33 namespace HeuristicLab.Encodings.Schedule {32 namespace HeuristicLab.Encodings.ScheduleEncoding { 34 33 [StorableClass] 35 public sealed class JobSequenceMatrixEncoding : ScheduleEncoding {34 public sealed class JobSequenceMatrixEncoding : ScheduleEncoding<JSMEncoding> { 36 35 [StorableConstructor] 37 36 private JobSequenceMatrixEncoding(bool deserializing) : base(deserializing) { } … … 44 43 : base() { 45 44 SolutionCreator = new JSMRandomCreator(); 45 Decoder = new JSMDecoder(); 46 46 DiscoverOperators(); 47 47 }
Note: See TracChangeset
for help on using the changeset viewer.