Changeset 9089 for branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs
- Timestamp:
- 12/27/12 19:14:51 (12 years ago)
- Location:
- branches/LearningClassifierSystems
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/LearningClassifierSystems
-
Property
svn:ignore
set to
*.suo
-
Property
svn:ignore
set to
-
branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3
-
Property
svn:ignore
set to
*.user
Plugin.cs
-
Property
svn:ignore
set to
-
branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs
r8941 r9089 24 24 using HeuristicLab.Core; 25 25 using HeuristicLab.Data; 26 using HeuristicLab.Encodings.CombinedIntegerVectorEncoding; 27 using HeuristicLab.Operators; 26 using HeuristicLab.Encodings.ConditionActionEncoding; 28 27 using HeuristicLab.Optimization; 29 using HeuristicLab.Optimization.Operators;30 28 using HeuristicLab.Parameters; 31 29 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; … … 39 37 [Creatable("Algorithms")] 40 38 [StorableClass] 41 public class LearningClassifierSystem : HeuristicOptimizationEngineAlgorithm, IStorableContent {39 public sealed class LearningClassifierSystem : HeuristicOptimizationEngineAlgorithm, IStorableContent { 42 40 public string Filename { get; set; } 43 41 44 42 #region Problem Properties 45 43 public override Type ProblemType { 46 get { return typeof(I SingleObjectiveHeuristicOptimizationProblem); }47 } 48 public new I SingleObjectiveHeuristicOptimizationProblem Problem {49 get { return (I SingleObjectiveHeuristicOptimizationProblem)base.Problem; }44 get { return typeof(IConditionActionProblem); } 45 } 46 public new IConditionActionProblem Problem { 47 get { return (IConditionActionProblem)base.Problem; } 50 48 set { base.Problem = value; } 51 49 } … … 59 57 get { return (ValueParameter<BoolValue>)Parameters["SetSeedRandomly"]; } 60 58 } 59 private ValueParameter<BoolValue> CreateInitialPopulationParameter { 60 get { return (ValueParameter<BoolValue>)Parameters["CreateInitialPopulation"]; } 61 } 61 62 private ValueParameter<IntValue> PopulationSizeParameter { 62 get { return (ValueParameter<IntValue>)Parameters["PopulationSize"]; } 63 } 64 //for test purpose 65 public ValueParameter<ICombinedIntegerVectorCreator> SolutionCreatorParameter { 66 get { return (ValueParameter<ICombinedIntegerVectorCreator>)Parameters["SolutionCreator"]; } 67 } 68 public ValueParameter<IntValue> Length { 69 get { return (ValueParameter<IntValue>)Parameters["Length"]; } 70 } 71 public ValueParameter<IntValue> ActionPartLength { 72 get { return (ValueParameter<IntValue>)Parameters["ActionPartLength"]; } 73 } 74 public ValueParameter<IntMatrix> Bounds { 75 get { return (ValueParameter<IntMatrix>)Parameters["Bounds"]; } 63 get { return (ValueParameter<IntValue>)Parameters["N"]; } 64 } 65 private ValueParameter<PercentValue> BetaParameter { 66 get { return (ValueParameter<PercentValue>)Parameters["Beta"]; } 67 } 68 private ValueParameter<PercentValue> AlphaParameter { 69 get { return (ValueParameter<PercentValue>)Parameters["Alpha"]; } 70 } 71 private ValueParameter<DoubleValue> ErrorZeroParameter { 72 get { return (ValueParameter<DoubleValue>)Parameters["ErrorZero"]; } 73 } 74 private ValueParameter<DoubleValue> PowerParameter { 75 get { return (ValueParameter<DoubleValue>)Parameters["v"]; } 76 } 77 private ValueParameter<PercentValue> GammaParameter { 78 get { return (ValueParameter<PercentValue>)Parameters["Gamma"]; } 79 } 80 private ValueParameter<PercentValue> CrossoverProbabilityParameter { 81 get { return (ValueParameter<PercentValue>)Parameters["CrossoverProbability"]; } 82 } 83 private ValueParameter<PercentValue> MutationProbabilityParameter { 84 get { return (ValueParameter<PercentValue>)Parameters["MutationProbability"]; } 85 } 86 private ValueParameter<IntValue> ThetaGAParameter { 87 get { return (ValueParameter<IntValue>)Parameters["ThetaGA"]; } 88 } 89 private ValueParameter<IntValue> ThetaDeletionParameter { 90 get { return (ValueParameter<IntValue>)Parameters["ThetaDeletion"]; } 91 } 92 private ValueParameter<IntValue> ThetaSubsumptionParameter { 93 get { return (ValueParameter<IntValue>)Parameters["ThetaSubsumption"]; } 94 } 95 private ValueParameter<PercentValue> DeltaParameter { 96 get { return (ValueParameter<PercentValue>)Parameters["Delta"]; } 97 } 98 private ValueParameter<PercentValue> ExplorationProbabilityParameter { 99 get { return (ValueParameter<PercentValue>)Parameters["ExplorationProbability"]; } 100 } 101 private ValueParameter<BoolValue> DoGASubsumptionParameter { 102 get { return (ValueParameter<BoolValue>)Parameters["DoGASubsumption"]; } 103 } 104 private ValueParameter<BoolValue> DoActionSetSubsumptionParameter { 105 get { return (ValueParameter<BoolValue>)Parameters["DoActionSetSubsumption"]; } 76 106 } 77 107 #endregion … … 86 116 set { SetSeedRandomlyParameter.Value = value; } 87 117 } 118 public BoolValue CreateInitialPopulation { 119 get { return CreateInitialPopulationParameter.Value; } 120 set { CreateInitialPopulationParameter.Value = value; } 121 } 88 122 public IntValue PopulationSize { 89 123 get { return PopulationSizeParameter.Value; } 90 124 set { PopulationSizeParameter.Value = value; } 91 125 } 92 126 public PercentValue Beta { 127 get { return BetaParameter.Value; } 128 set { BetaParameter.Value = value; } 129 } 130 public PercentValue Alpha { 131 get { return AlphaParameter.Value; } 132 set { AlphaParameter.Value = value; } 133 } 134 public DoubleValue ErrorZero { 135 get { return ErrorZeroParameter.Value; } 136 set { ErrorZeroParameter.Value = value; } 137 } 138 public DoubleValue Power { 139 get { return PowerParameter.Value; } 140 set { PowerParameter.Value = value; } 141 } 142 public PercentValue Gamma { 143 get { return GammaParameter.Value; } 144 set { GammaParameter.Value = value; } 145 } 146 public PercentValue CrossoverProbability { 147 get { return CrossoverProbabilityParameter.Value; } 148 set { CrossoverProbabilityParameter.Value = value; } 149 } 150 public PercentValue MutationProbability { 151 get { return MutationProbabilityParameter.Value; } 152 set { MutationProbabilityParameter.Value = value; } 153 } 154 public IntValue ThetaGA { 155 get { return ThetaGAParameter.Value; } 156 set { ThetaGAParameter.Value = value; } 157 } 158 public IntValue ThetaDeletion { 159 get { return ThetaDeletionParameter.Value; } 160 set { ThetaDeletionParameter.Value = value; } 161 } 162 public IntValue ThetaSubsumption { 163 get { return ThetaSubsumptionParameter.Value; } 164 set { ThetaSubsumptionParameter.Value = value; } 165 } 166 public PercentValue Delta { 167 get { return DeltaParameter.Value; } 168 set { DeltaParameter.Value = value; } 169 } 170 public PercentValue ExplorationProbability { 171 get { return ExplorationProbabilityParameter.Value; } 172 set { ExplorationProbabilityParameter.Value = value; } 173 } 174 public BoolValue DoGASubsumption { 175 get { return DoGASubsumptionParameter.Value; } 176 set { DoGASubsumptionParameter.Value = value; } 177 } 178 public BoolValue DoActionSetSubsumption { 179 get { return DoActionSetSubsumptionParameter.Value; } 180 set { DoActionSetSubsumptionParameter.Value = value; } 181 } 182 private RandomCreator RandomCreator { 183 get { return (RandomCreator)OperatorGraph.InitialOperator; } 184 } 185 public LearningClassifierSystemMainLoop MainLoop { 186 get { return (LearningClassifierSystemMainLoop)RandomCreator.Successor; } 187 } 93 188 #endregion 94 189 … … 98 193 Parameters.Add(new ValueParameter<IntValue>("Seed", "The random seed used to initialize the new pseudo random number generator.", new IntValue(0))); 99 194 Parameters.Add(new ValueParameter<BoolValue>("SetSeedRandomly", "True if the random seed should be set to a random value, otherwise false.", new BoolValue(true))); 100 Parameters.Add(new ValueParameter<IntValue>("PopulationSize", "The size of the population of solutions.", new IntValue(100))); 101 //for test purpose 102 Parameters.Add(new ValueParameter<ICombinedIntegerVectorCreator>("SolutionCreator", "The operator to create a solution.", new UniformRandomCombinedIntegerVectorCreator())); 103 Parameters.Add(new ValueParameter<IntValue>("Length", "The operator to create a solution.", new IntValue(3))); 104 Parameters.Add(new ValueParameter<IntValue>("ActionPartLength", "The operator to create a solution.", new IntValue(1))); 105 int[,] elements = new int[,] { { 0, 3 }, { 0, 3 }, { 0, 2 } }; 106 Parameters.Add(new ValueParameter<IntMatrix>("Bounds", "The operator to create a solution.", new IntMatrix(elements))); 195 Parameters.Add(new ValueParameter<BoolValue>("CreateInitialPopulation", "Specifies if a population should be created at the beginning of the algorithm.", new BoolValue(false))); 196 Parameters.Add(new ValueParameter<IntValue>("N", "Max size of the population of solutions.", new IntValue(100))); 197 Parameters.Add(new ValueParameter<PercentValue>("Beta", "Learning rate", new PercentValue(0.1))); 198 Parameters.Add(new ValueParameter<PercentValue>("Alpha", "", new PercentValue(0.1))); 199 Parameters.Add(new ValueParameter<DoubleValue>("ErrorZero", "The error below which classifiers are considered to have equal accuracy", new DoubleValue(10))); 200 Parameters.Add(new ValueParameter<DoubleValue>("v", "Power parameter", new DoubleValue(5))); 201 Parameters.Add(new ValueParameter<PercentValue>("Gamma", "Discount factor", new PercentValue(0.71))); 202 Parameters.Add(new ValueParameter<PercentValue>("CrossoverProbability", "Probability of crossover", new PercentValue(0.9))); 203 Parameters.Add(new ValueParameter<PercentValue>("MutationProbability", "Probability of mutation", new PercentValue(0.05))); 204 Parameters.Add(new ValueParameter<IntValue>("ThetaGA", "GA threshold. GA is applied in a set when the average time since the last GA is greater than ThetaGA.", new IntValue(25))); 205 Parameters.Add(new ValueParameter<IntValue>("ThetaDeletion", "Deletion threshold. If the experience of a classifier is greater than ThetaDeletion, its fitness may be considered in its probability of deletion.", new IntValue(20))); 206 Parameters.Add(new ValueParameter<IntValue>("ThetaSubsumption", "Subsumption threshold. The experience of a classifier must be greater than TheatSubsumption to be able to subsume another classifier.", new IntValue(20))); 207 Parameters.Add(new ValueParameter<PercentValue>("Delta", "Delta specifies the fraction of mean fitness in [P] below which the fitness of a classifier may be considered in its probability of deletion", new PercentValue(0.1))); 208 Parameters.Add(new ValueParameter<PercentValue>("ExplorationProbability", "Probability of selecting the action uniform randomly", new PercentValue(0.5))); 209 Parameters.Add(new ValueParameter<BoolValue>("DoGASubsumption", "Specifies if offsprings are tested for possible logical subsumption by parents.", new BoolValue(true))); 210 Parameters.Add(new ValueParameter<BoolValue>("DoActionSetSubsumption", "Specifies if action set is tested for subsuming classifiers.", new BoolValue(true))); 107 211 #endregion 108 212 109 213 #region Create operators 110 214 RandomCreator randomCreator = new RandomCreator(); 111 SolutionsCreator solutionsCreator = new SolutionsCreator(); 112 UniformSubScopesProcessor uniformSubScopeProcessor = new UniformSubScopesProcessor(); 113 UniformRandomizer uniformRandomizer = new UniformRandomizer(); 215 114 216 //ResultsCollector resultsCollector = new ResultsCollector(); 115 217 LearningClassifierSystemMainLoop mainLoop = new LearningClassifierSystemMainLoop(); … … 120 222 randomCreator.SetSeedRandomlyParameter.ActualName = SetSeedRandomlyParameter.Name; 121 223 randomCreator.SetSeedRandomlyParameter.Value = null; 122 123 SolutionCreatorParameter.Value.ActionPartLengthParameter.ActualName = ActionPartLength.Name;124 SolutionCreatorParameter.Value.LengthParameter.ActualName = Length.Name;125 SolutionCreatorParameter.Value.BoundsParameter.ActualName = Bounds.Name;126 127 solutionsCreator.NumberOfSolutionsParameter.ActualName = PopulationSizeParameter.Name;128 solutionsCreator.SolutionCreatorParameter.ActualName = SolutionCreatorParameter.Name;129 130 uniformSubScopeProcessor.Parallel = new BoolValue(true);131 132 uniformRandomizer.RandomParameter.ActualName = randomCreator.RandomParameter.ActualName;133 uniformRandomizer.MinParameter.Value = new DoubleValue(0);134 uniformRandomizer.MaxParameter.Value = new DoubleValue(100);135 uniformRandomizer.ValueParameter.ActualName = "Fitness";136 137 224 #endregion 138 225 139 226 #region Create operator graph 140 227 OperatorGraph.InitialOperator = randomCreator; 141 randomCreator.Successor = solutionsCreator; 142 solutionsCreator.Successor = uniformSubScopeProcessor; 143 uniformSubScopeProcessor.Operator = uniformRandomizer; 144 uniformSubScopeProcessor.Successor = mainLoop; 228 randomCreator.Successor = mainLoop; 145 229 #endregion 146 230 } 147 pr otectedLearningClassifierSystem(LearningClassifierSystem original, Cloner cloner)231 private LearningClassifierSystem(LearningClassifierSystem original, Cloner cloner) 148 232 : base(original, cloner) { 149 233 } … … 153 237 [StorableConstructor] 154 238 private LearningClassifierSystem(bool deserializing) : base(deserializing) { } 239 240 protected override void OnProblemChanged() { 241 if (Problem != null) { 242 ParameterizeEvaluator(Problem.Evaluator); 243 MainLoop.SetCurrentProblem(Problem); 244 } 245 base.OnProblemChanged(); 246 } 247 protected override void Problem_EvaluatorChanged(object sender, EventArgs e) { 248 ParameterizeEvaluator(Problem.Evaluator); 249 MainLoop.SetCurrentProblem(Problem); 250 base.Problem_EvaluatorChanged(sender, e); 251 } 252 protected override void Problem_SolutionCreatorChanged(object sender, EventArgs e) { 253 MainLoop.SetCurrentProblem(Problem); 254 base.Problem_SolutionCreatorChanged(sender, e); 255 } 256 257 private void ParameterizeEvaluator(IXCSEvaluator evaluator) { 258 evaluator.ActualTimeParameter.ActualName = "Iteration"; 259 evaluator.BetaParameter.ActualName = BetaParameter.Name; 260 evaluator.AlphaParameter.ActualName = AlphaParameter.Name; 261 evaluator.PowerParameter.ActualName = PowerParameter.Name; 262 evaluator.ErrorZeroParameter.ActualName = ErrorZeroParameter.Name; 263 } 155 264 } 156 265 }
Note: See TracChangeset
for help on using the changeset viewer.