- Timestamp:
- 12/15/15 15:16:24 (9 years ago)
- Location:
- branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleCreator.cs ¶
r13437 r13469 25 25 26 26 namespace 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; } 29 30 IValueLookupParameter<IntValue> JobsParameter { get; } 30 31 IValueLookupParameter<IntValue> ResourcesParameter { get; } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Interfaces/IScheduleDecoder.cs ¶
r13443 r13469 30 30 Schedule DecodeSchedule(ISchedule solution, ItemList<Job> jobData); 31 31 } 32 33 public interface IScheduleDecoder<TSchedule> : IScheduleDecoder 34 where TSchedule : class, ISchedule { 35 Schedule DecodeSchedule(TSchedule solution, ItemList<Job> jobData); 36 } 32 37 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/Decoder/JSMDecoder.cs ¶
r13449 r13469 34 34 [Item("JobSequenceMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequence Matrix.")] 35 35 [StorableClass] 36 public class JSMDecoder : ScheduleDecoder {36 public class JSMDecoder : ScheduleDecoder<JSMEncoding> { 37 37 38 38 public IFixedValueParameter<EnumValue<JSMDecodingErrorPolicy>> DecodingErrorPolicyParameter { … … 130 130 } 131 131 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); 136 134 } 137 135 138 public static Schedule Decode Schedule(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) {136 public static Schedule Decode(JSMEncoding solution, ItemList<Job> jobData, JSMDecodingErrorPolicy decodingErrorPolicy, JSMForcingStrategy forcingStrategy) { 139 137 var random = new FastRandom(solution.RandomSeed); 140 138 var jobs = (ItemList<Job>)jobData.Clone(); -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/JobSequenceMatrix/JSMRandomCreator.cs ¶
r13443 r13469 30 30 [Item("JobSequenceMatrixCreator", "Creator class used to create Job Sequence Matrix solutions for standard JobShop scheduling problems.")] 31 31 [StorableClass] 32 public class JSMRandomCreator : ScheduleCreator , IStochasticOperator {32 public class JSMRandomCreator : ScheduleCreator<JSMEncoding>, IStochasticOperator { 33 33 34 34 public ILookupParameter<IRandom> RandomParameter { … … 56 56 } 57 57 58 protected override IScheduleCreateSolution() {58 protected override JSMEncoding CreateSolution() { 59 59 return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue); 60 60 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/Decoder/PWRDecoder.cs ¶
r13443 r13469 28 28 [Item("PWRDecoder", "An item used to convert a PWR-individual into a generalized schedule.")] 29 29 [StorableClass] 30 public class PWRDecoder : ScheduleDecoder {30 public class PWRDecoder : ScheduleDecoder<PWREncoding> { 31 31 [StorableConstructor] 32 32 protected PWRDecoder(bool deserializing) : base(deserializing) { } … … 38 38 } 39 39 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); 44 42 } 45 43 46 public static Schedule Decode Schedule(PWREncoding solution, ItemList<Job> jobData) {44 public static Schedule Decode(PWREncoding solution, ItemList<Job> jobData) { 47 45 var jobs = (ItemList<Job>)jobData.Clone(); 48 46 var resultingSchedule = new Schedule(jobs[0].Tasks.Count); -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PermutationWithRepetition/PWRRandomCreator.cs ¶
r13437 r13469 29 29 [Item("PermutationWithRepetitionRandomCreator", "Creates PWR-individuals at random.")] 30 30 [StorableClass] 31 public class PWRRandomCreator : ScheduleCreator , IStochasticOperator {31 public class PWRRandomCreator : ScheduleCreator<PWREncoding>, IStochasticOperator { 32 32 33 33 public ILookupParameter<IRandom> RandomParameter { … … 51 51 } 52 52 53 protected override IScheduleCreateSolution() {53 protected override PWREncoding CreateSolution() { 54 54 return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue); 55 55 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/Plugin.cs.frame ¶
r13321 r13469 35 35 [PluginDependency("HeuristicLab.Parameters", "3.3")] 36 36 [PluginDependency("HeuristicLab.Persistence", "3.3")] 37 [PluginDependency("HeuristicLab.Random", "3.3")] 37 38 public class HeuristicLabEncodingsScheduleEncodingPlugin : PluginBase { 38 39 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/Decoder/PRVDecoder.cs ¶
r13443 r13469 20 20 #endregion 21 21 22 using System;23 22 using System.Linq; 24 23 using HeuristicLab.Common; 25 24 using HeuristicLab.Core; 26 using HeuristicLab.Encodings.ScheduleEncoding;27 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 28 26 using HeuristicLab.Random; … … 31 29 [Item("JobSequencingMatrixDecoder", "Applies the GifflerThompson algorithm to create an active schedule from a JobSequencing Matrix.")] 32 30 [StorableClass] 33 public class PRVDecoder : ScheduleDecoder {31 public class PRVDecoder : ScheduleDecoder<PRVEncoding> { 34 32 #region Priority Rules 35 33 //smallest number of remaining tasks … … 189 187 } 190 188 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) { 198 194 var random = new FastRandom(solution.RandomSeed); 199 195 var jobs = (ItemList<Job>)jobData.Clone(); -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/PriorityRulesVector/PRVRandomCreator.cs ¶
r13443 r13469 29 29 [Item("PriorityRulesRandomCreator", "Creator class used to create PRV encoding objects for scheduling problems.")] 30 30 [StorableClass] 31 public class PRVRandomCreator : ScheduleCreator , IStochasticOperator {31 public class PRVRandomCreator : ScheduleCreator<PRVEncoding>, IStochasticOperator { 32 32 33 33 [Storable] … … 58 58 } 59 59 60 protected override IScheduleCreateSolution() {60 protected override PRVEncoding CreateSolution() { 61 61 return Apply(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value, RandomParameter.ActualValue, NrOfRules); 62 62 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleCreator.cs ¶
r13437 r13469 30 30 [Item("ScheduleCreator", "Represents the generalized form of creators for Scheduling Problems.")] 31 31 [StorableClass] 32 public abstract class ScheduleCreator : InstrumentedOperator, IScheduleCreator { 32 public abstract class ScheduleCreator<TSchedule> : InstrumentedOperator, IScheduleCreator<TSchedule> 33 where TSchedule : class,ISchedule { 33 34 34 public ILookupParameter< ISchedule> ScheduleParameter {35 get { return (ILookupParameter< ISchedule>)Parameters["Schedule"]; }35 public ILookupParameter<TSchedule> ScheduleParameter { 36 get { return (ILookupParameter<TSchedule>)Parameters["Schedule"]; } 36 37 } 37 38 public IValueLookupParameter<IntValue> JobsParameter { … … 44 45 [StorableConstructor] 45 46 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) { } 47 48 public ScheduleCreator() 48 49 : 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.")); 50 51 Parameters.Add(new ValueLookupParameter<IntValue>("Jobs", "The number of jobs handled in this problem instance.")); 51 52 Parameters.Add(new ValueLookupParameter<IntValue>("Resources", "The number of resources used in this problem instance.")); … … 57 58 } 58 59 59 protected abstract ISchedule CreateSolution();60 protected abstract TSchedule CreateSolution(); 60 61 } 61 62 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleDecoder.cs ¶
r13443 r13469 20 20 #endregion 21 21 22 using System; 22 23 using HeuristicLab.Common; 23 24 using HeuristicLab.Core; … … 29 30 [Item("ScheduleDecoder", "A schedule decoder translates a respresentation into an actual schedule.")] 30 31 [StorableClass] 31 public abstract class ScheduleDecoder : SingleSuccessorOperator, IScheduleDecoder { 32 public abstract class ScheduleDecoder<TSchedule> : SingleSuccessorOperator, IScheduleDecoder<TSchedule> 33 where TSchedule : class, ISchedule { 32 34 33 35 public ILookupParameter<ISchedule> ScheduleEncodingParameter { … … 43 45 [StorableConstructor] 44 46 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) { } 46 48 public ScheduleDecoder() 47 49 : base() { … … 51 53 } 52 54 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); 54 61 55 62 public override IOperation Apply() { -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding.cs ¶
r13443 r13469 34 34 namespace HeuristicLab.Encodings.ScheduleEncoding { 35 35 [StorableClass] 36 public abstract class ScheduleEncoding<TSchedule> : Encoding< ISchedule>, IScheduleEncoding36 public abstract class ScheduleEncoding<TSchedule> : Encoding<TSchedule>, IScheduleEncoding 37 37 where TSchedule : class, ISchedule { 38 38 #region Encoding Parameters … … 85 85 86 86 [Storable] 87 private IValueParameter<IScheduleDecoder> decoderParameter; 88 89 public IValueParameter<IScheduleDecoder> DecoderParameter { 87 private IValueParameter<IScheduleDecoder<TSchedule>> decoderParameter; 88 public IValueParameter<IScheduleDecoder<TSchedule>> DecoderParameter { 90 89 get { return decoderParameter; } 91 90 set { … … 114 113 } 115 114 116 public IScheduleDecoder Decoder {115 public IScheduleDecoder<TSchedule> Decoder { 117 116 get { return DecoderParameter.Value; } 118 117 set { DecoderParameter.Value = value; } … … 123 122 protected ScheduleEncoding(ScheduleEncoding<TSchedule> original, Cloner cloner) 124 123 : 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); 125 128 } 126 129 … … 135 138 jobsParameter = new FixedValueParameter<IntValue>(Name + ".Jobs", new IntValue(jobs)); 136 139 resourcesParameter = new FixedValueParameter<IntValue>(Name + ".Resources", new IntValue(resources)); 137 decoderParameter = new ValueParameter<IScheduleDecoder >(Name + ".Decoder");140 decoderParameter = new ValueParameter<IScheduleDecoder<TSchedule>>(Name + ".Decoder"); 138 141 139 142 Parameters.Add(jobDataParameter); … … 163 166 164 167 public override void ConfigureOperators(IEnumerable<IItem> operators) { 165 ConfigureCreators(operators.OfType<IScheduleCreator >());168 ConfigureCreators(operators.OfType<IScheduleCreator<TSchedule>>()); 166 169 ConfigureCrossovers(operators.OfType<IScheduleCrossover>()); 167 170 ConfigureManipulators(operators.OfType<IScheduleManipulator>()); 168 171 } 169 172 170 private void ConfigureCreators(IEnumerable<IScheduleCreator > creators) {173 private void ConfigureCreators(IEnumerable<IScheduleCreator<TSchedule>> creators) { 171 174 foreach (var creator in creators) { 172 175 creator.ScheduleParameter.ActualName = Name; -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/Decoder/DirectScheduleDecoder.cs ¶
r13443 r13469 20 20 #endregion 21 21 22 using System;23 22 using HeuristicLab.Common; 24 23 using HeuristicLab.Core; … … 28 27 [Item("DirectScheduleDecoder", "An item used to convert a direct schedule into a generalized schedule.")] 29 28 [StorableClass] 30 public class DirectScheduleDecoder : ScheduleDecoder {29 public class DirectScheduleDecoder : ScheduleDecoder<Schedule> { 31 30 [StorableConstructor] 32 31 protected DirectScheduleDecoder(bool deserializing) : base(deserializing) { } … … 38 37 } 39 38 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); 44 41 } 45 42 46 public static Schedule Decode Schedule(Schedule solution, ItemList<Job> jobData) {43 public static Schedule Decode(Schedule solution, ItemList<Job> jobData) { 47 44 return solution; 48 45 } -
TabularUnified branches/ProblemRefactoring/HeuristicLab.Encodings.ScheduleEncoding/3.3/ScheduleEncoding/DirectScheduleRandomCreator.cs ¶
r13443 r13469 30 30 [Item("DirectScheduleRandomCreator", "Creator class used to create schedule encoding objects.")] 31 31 [StorableClass] 32 public class DirectScheduleRandomCreator : ScheduleCreator , IStochasticOperator, IDirectScheduleOperator {32 public class DirectScheduleRandomCreator : ScheduleCreator<Schedule>, IStochasticOperator, IDirectScheduleOperator { 33 33 34 34 public ILookupParameter<IRandom> RandomParameter { … … 68 68 69 69 70 71 protected override ISchedule CreateSolution() { 70 protected override Schedule CreateSolution() { 72 71 var jobData = (ItemList<Job>)JobDataParameter.ActualValue.Clone(); 73 72 var pwrEncoding = new PWREncoding(JobsParameter.ActualValue.Value, ResourcesParameter.ActualValue.Value,
Note: See TracChangeset
for help on using the changeset viewer.