Changeset 9204
- Timestamp:
- 02/04/13 16:16:38 (12 years ago)
- Location:
- branches/LearningClassifierSystems
- Files:
-
- 14 added
- 1 deleted
- 26 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs
r9175 r9204 118 118 get { return (ValueParameter<IntValue>)Parameters["MaxIterations"]; } 119 119 } 120 public IConstrainedValueParameter<ICrossover> CrossoverParameter { 121 get { return (IConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; } 122 } 123 public IConstrainedValueParameter<IManipulator> MutatorParameter { 124 get { return (IConstrainedValueParameter<IManipulator>)Parameters["Mutator"]; } 125 } 120 126 #endregion 121 127 … … 204 210 get { return FinalAnalyzerParameter.Value; } 205 211 set { FinalAnalyzerParameter.Value = value; } 212 } 213 public ICrossover Crossover { 214 get { return CrossoverParameter.Value; } 215 set { CrossoverParameter.Value = value; } 216 } 217 public IManipulator Mutator { 218 get { return MutatorParameter.Value; } 219 set { MutatorParameter.Value = value; } 206 220 } 207 221 private RandomCreator RandomCreator { … … 237 251 Parameters.Add(new ValueParameter<MultiAnalyzer>("FinalAnalyzer", "The operator used to analyze the last generation.", new MultiAnalyzer())); 238 252 Parameters.Add(new ValueParameter<IntValue>("MaxIterations", "The maximum number of iterations.", new IntValue(1000))); 253 Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions.")); 254 Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions.")); 239 255 #endregion 240 256 … … 256 272 mainLoop.FinalAnalyzerParameter.ActualName = FinalAnalyzerParameter.Name; 257 273 mainLoop.MaxIterationsParameter.ActualName = MaxIterationsParameter.Name; 274 mainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name; 275 mainLoop.MutatorParameter.ActualName = MutatorParameter.Name; 276 mainLoop.CrossoverProbabilityParameter.ActualName = CrossoverProbabilityParameter.Name; 258 277 #endregion 259 278 … … 279 298 ParameterizeEvaluator(Problem.Evaluator); 280 299 MainLoop.SetCurrentProblem(Problem); 300 UpdateCrossovers(); 301 UpdateMutators(); 281 302 UpdateAnalyzers(); 303 ParameterizeManipulator(); 282 304 } 283 305 base.OnProblemChanged(); 306 } 307 308 private void ParameterizeManipulator() { 309 foreach (var op in Problem.Operators.OfType<IProbabilityMutatorOperator>()) { 310 op.ProbabilityParameter.ActualName = MutationProbabilityParameter.Name; 311 } 284 312 } 285 313 protected override void Problem_EvaluatorChanged(object sender, EventArgs e) { … … 293 321 } 294 322 protected override void Problem_OperatorsChanged(object sender, EventArgs e) { 323 UpdateCrossovers(); 324 UpdateMutators(); 295 325 UpdateAnalyzers(); 326 ParameterizeManipulator(); 296 327 base.Problem_OperatorsChanged(sender, e); 297 328 } … … 305 336 } 306 337 338 private void UpdateCrossovers() { 339 ICrossover oldCrossover = CrossoverParameter.Value; 340 CrossoverParameter.ValidValues.Clear(); 341 ICrossover defaultCrossover = Problem.Operators.OfType<ICrossover>().FirstOrDefault(); 342 343 foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>().OrderBy(x => x.Name)) 344 CrossoverParameter.ValidValues.Add(crossover); 345 346 if (oldCrossover != null) { 347 ICrossover crossover = CrossoverParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldCrossover.GetType()); 348 if (crossover != null) CrossoverParameter.Value = crossover; 349 else oldCrossover = null; 350 } 351 if (oldCrossover == null && defaultCrossover != null) 352 CrossoverParameter.Value = defaultCrossover; 353 } 354 private void UpdateMutators() { 355 IManipulator oldMutator = MutatorParameter.Value; 356 MutatorParameter.ValidValues.Clear(); 357 IManipulator defaultMutator = Problem.Operators.OfType<IManipulator>().FirstOrDefault(); 358 359 foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name)) 360 MutatorParameter.ValidValues.Add(mutator); 361 if (oldMutator != null) { 362 IManipulator mutator = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType()); 363 if (mutator != null) MutatorParameter.Value = mutator; 364 else oldMutator = null; 365 } 366 if (oldMutator == null && defaultMutator != null) 367 MutatorParameter.Value = defaultMutator; 368 } 307 369 private void UpdateAnalyzers() { 308 370 Analyzer.Operators.Clear(); -
branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystemMainLoop.cs
r9194 r9204 23 23 using HeuristicLab.Core; 24 24 using HeuristicLab.Data; 25 using HeuristicLab.Encodings.CombinedIntegerVectorEncoding;26 25 using HeuristicLab.Encodings.ConditionActionEncoding; 27 26 using HeuristicLab.Operators; … … 46 45 get { return (IConstrainedValueParameter<ISelector>)Parameters["Selector"]; } 47 46 } 48 public IConstrainedValueParameter<ICrossover> CrossoverParameter { 49 get { return (IConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; } 50 } 51 public IConstrainedValueParameter<IManipulator> MutatorParameter { 52 get { return (IConstrainedValueParameter<IManipulator>)Parameters["Mutator"]; } 47 public ValueLookupParameter<PercentValue> CrossoverProbabilityParameter { 48 get { return adaptedGeneticAlgorithmMainLoop.CrossoverProbabilityParameter; } 49 } 50 public ValueLookupParameter<IOperator> CrossoverParameter { 51 get { return adaptedGeneticAlgorithmMainLoop.CrossoverParameter; } 52 } 53 public ValueLookupParameter<IOperator> MutatorParameter { 54 get { return adaptedGeneticAlgorithmMainLoop.MutatorParameter; } 53 55 } 54 56 public IConstrainedValueParameter<IOperator> AfterCopyingParentsParameter { … … 78 80 private CountNumberOfUniqueActions countNumberOfUniqueActions; 79 81 80 private UniformSomePositionManipulator test;82 private LCSAdaptedGeneticAlgorithm adaptedGeneticAlgorithmMainLoop; 81 83 82 84 private Placeholder evaluator; … … 102 104 #region Create parameters 103 105 Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions for reproduction.", new ItemSet<ISelector>() { new ProportionalSelector() }, new ProportionalSelector())); 104 Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions.", new ItemSet<ICrossover>() { new HeuristicLab.Encodings.CombinedIntegerVectorEncoding.SinglePointCrossover() }, new HeuristicLab.Encodings.CombinedIntegerVectorEncoding.SinglePointCrossover()));105 106 Parameters.Add(new ValueLookupParameter<IOperator>("Evaluator", "The operator used to evaluate solutions. This operator is executed in parallel, if an engine is used which supports parallelization.")); 106 test = new UniformSomePositionManipulator();107 test.ProbabilityParameter.ActualName = "MutationProbability";108 test.ChildParameter.ActualName = "CombinedIntegerVector";109 Parameters.Add(new OptionalConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions.", new ItemSet<IManipulator>() { new UniformSomePositionManipulator() }, test));110 107 XCSAfterCopyingParentOperator afterCopyingParents = new XCSAfterCopyingParentOperator(); 111 108 Parameters.Add(new ConstrainedValueParameter<IOperator>("AfterCopyingParents", "", new ItemSet<IOperator>() { new XCSAfterCopyingParentOperator() }, afterCopyingParents)); … … 162 159 UniformSubScopesProcessor timestampAssignerSubscopeProcessor = new UniformSubScopesProcessor(); 163 160 Assigner timestampAssigner = new Assigner(); 164 LCSAdaptedGeneticAlgorithmadaptedGeneticAlgorithmMainLoop = new LCSAdaptedGeneticAlgorithm();161 adaptedGeneticAlgorithmMainLoop = new LCSAdaptedGeneticAlgorithm(); 165 162 IntCounter currentPopulationSizeCounter = new IntCounter(); 166 163 CalculateNumberOfDeletionsOperator calculateNumberOfDeletions = new CalculateNumberOfDeletionsOperator(); … … 313 310 314 311 adaptedGeneticAlgorithmMainLoop.SelectorParameter.ActualName = SelectorParameter.Name; 315 adaptedGeneticAlgorithmMainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;316 adaptedGeneticAlgorithmMainLoop.MutatorParameter.ActualName = MutatorParameter.Name;317 312 adaptedGeneticAlgorithmMainLoop.RandomParameter.ActualName = "Random"; 318 313 adaptedGeneticAlgorithmMainLoop.MaximumGenerationsParameter.ActualName = "ZeroIntValue"; … … 440 435 classifierFetcher.OperatorParameter.ActualName = problem.ClassifierFetcherParameter.Name; 441 436 442 test.FetchedConditionParameter.ActualName = problem.ClassifierFetcher.CurrentInputToMatchParameter.ActualName;443 test.PossibleActionsParameter.ActualName = problem.PossibleActionsConcreteClassParameter.Name;444 445 437 actionExecuter.OperatorParameter.ActualName = problem.ActionExecuterParameter.Name; 446 438 -
branches/LearningClassifierSystems/HeuristicLab.Core
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Core (added) merged: 9195
- Property svn:mergeinfo changed
-
branches/LearningClassifierSystems/HeuristicLab.Core/3.3/Interfaces/ILookupParameter.cs
r7259 r9204 26 26 string ActualName { get; set; } 27 27 string TranslatedName { get; } 28 IExecutionContext ExecutionContext { get; set; } 28 29 event EventHandler ActualNameChanged; 29 30 } -
branches/LearningClassifierSystems/HeuristicLab.Core/3.3/Interfaces/IParameter.cs
r7259 r9204 27 27 bool Hidden { get; set; } 28 28 IItem ActualValue { get; set; } 29 IExecutionContext ExecutionContext { get; set; }30 29 31 30 event EventHandler HiddenChanged; -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVectorManipulator.cs
r9194 r9204 39 39 get { return (ILookupParameter<CombinedIntegerVector>)Parameters["Child"]; } 40 40 } 41 public ILookupParameter<CombinedIntegerVector> Fetched ConditionParameter {42 get { return (ILookupParameter<CombinedIntegerVector>)Parameters[" Parent"]; }41 public ILookupParameter<CombinedIntegerVector> FetchedInputParameter { 42 get { return (ILookupParameter<CombinedIntegerVector>)Parameters["Input"]; } 43 43 } 44 44 #endregion … … 53 53 Parameters.Add(new LookupParameter<IRandom>("Random")); 54 54 Parameters.Add(new LookupParameter<CombinedIntegerVector>("Child")); 55 Parameters.Add(new LookupParameter<CombinedIntegerVector>(" Parent"));55 Parameters.Add(new LookupParameter<CombinedIntegerVector>("Input")); 56 56 } 57 57 58 58 public sealed override IOperation Apply() { 59 ChildParameter.ActualValue = Manipulate(RandomParameter.ActualValue, Fetched ConditionParameter.ActualValue, ChildParameter.ActualValue);59 ChildParameter.ActualValue = Manipulate(RandomParameter.ActualValue, FetchedInputParameter.ActualValue, ChildParameter.ActualValue); 60 60 return base.Apply(); 61 61 } 62 62 63 protected abstract CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector parent, CombinedIntegerVector child);63 protected abstract CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector input, CombinedIntegerVector child); 64 64 } 65 65 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Covering/CombinedIntegerVectorCoveringCreator.cs
r9194 r9204 22 22 using HeuristicLab.Common; 23 23 using HeuristicLab.Core; 24 using HeuristicLab.Data;25 24 using HeuristicLab.Encodings.ConditionActionEncoding; 26 using HeuristicLab.Operators;27 using HeuristicLab.Parameters;28 25 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 29 26 … … 31 28 [Item("CombinedIntegerVectorCoveringCreator", "Description missing")] 32 29 [StorableClass] 33 public class CombinedIntegerVectorCoveringCreator : SingleSuccessorOperator, ICoveringSolutionCreator { 34 35 #region Parameter Properties 36 public ILookupParameter<IInput> CoverInputParameter { 37 get { return (ILookupParameter<IInput>)Parameters["CoverInput"]; } 38 } 39 public ILookupParameter<IAction> ActionParameter { 40 get { return (ILookupParameter<IAction>)Parameters["Action"]; } 41 } 42 public IValueLookupParameter<IClassifier> CreatedClassifierParameter { 43 get { return (IValueLookupParameter<IClassifier>)Parameters["CreatedClassifier"]; } 44 } 45 public ILookupParameter<PercentValue> ChangeSymbolProbabilityParameter { 46 get { return (ILookupParameter<PercentValue>)Parameters["ChangeSymbolProbability"]; } 47 } 48 public ILookupParameter<IRandom> RandomParameter { 49 get { return (ILookupParameter<IRandom>)Parameters["Random"]; } 50 } 51 52 #endregion 30 public class CombinedIntegerVectorCoveringCreator : CoveringSolutionCreator, ICombinedIntegerVectorOperator { 53 31 54 32 [StorableConstructor] … … 62 40 public CombinedIntegerVectorCoveringCreator() 63 41 : base() { 64 Parameters.Add(new LookupParameter<IInput>("CoverInput"));65 Parameters.Add(new LookupParameter<IAction>("Action"));66 Parameters.Add(new ValueLookupParameter<IClassifier>("CreatedClassifier"));67 Parameters.Add(new LookupParameter<PercentValue>("ChangeSymbolProbability"));68 Parameters.Add(new LookupParameter<IRandom>("Random"));69 42 } 70 43 71 p ublic override IOperation Apply() {72 CombinedIntegerVector newCondition = (CombinedIntegerVector) CoverInputParameter.ActualValue.Clone();44 protected override IClassifier CreateCoveredClassifier(IInput input, IAction action, IRandom random, double changeSymbolProbability) { 45 CombinedIntegerVector newCondition = (CombinedIntegerVector)input.Clone(); 73 46 74 CombinedIntegerVector condition = (CombinedIntegerVector) CoverInputParameter.ActualValue;75 CombinedIntegerVector action = (CombinedIntegerVector)ActionParameter.ActualValue;47 CombinedIntegerVector condition = (CombinedIntegerVector)input; 48 CombinedIntegerVector newAction = (CombinedIntegerVector)action; 76 49 77 newCondition = UniformSomePositionManipulator.ManipulateCondition( RandomParameter.ActualValue, condition, newCondition, ChangeSymbolProbabilityParameter.ActualValue.Value);50 newCondition = UniformSomePositionManipulator.ManipulateCondition(random, condition, newCondition, changeSymbolProbability); 78 51 79 CreatedClassifierParameter.ActualValue = new CombinedIntegerVector(newCondition, newCondition.Bounds, action, action.Bounds); 80 return base.Apply(); 52 return new CombinedIntegerVector(newCondition, newCondition.Bounds, newAction, newAction.Bounds); 81 53 } 82 54 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Interfaces/ICombinedIntegerVectorManipulator.cs
r9194 r9204 29 29 public interface ICombinedIntegerVectorManipulator : IManipulator, ICombinedIntegerVectorOperator { 30 30 ILookupParameter<CombinedIntegerVector> ChildParameter { get; } 31 ILookupParameter<CombinedIntegerVector> Fetched ConditionParameter { get; }31 ILookupParameter<CombinedIntegerVector> FetchedInputParameter { get; } 32 32 } 33 33 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformActionManipulator.cs
r9089 r9204 47 47 } 48 48 49 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector child, CombinedIntegerVector parent) {50 return Manipulate(random, parent,child, PossibleActionsParameter.ActualValue);49 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector child, CombinedIntegerVector input) { 50 return Manipulate(random, child, PossibleActionsParameter.ActualValue); 51 51 } 52 52 53 public static CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector parent, CombinedIntegerVectorchild, IEnumerable<CombinedIntegerVector> possibleActions) {54 var otherActions = possibleActions.Except(((CombinedIntegerVector) parent.Action).ToEnumerable());53 public static CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector child, IEnumerable<CombinedIntegerVector> possibleActions) { 54 var otherActions = possibleActions.Except(((CombinedIntegerVector)child.Action).ToEnumerable()); 55 55 int actionIndex = random.Next(otherActions.Count()); 56 56 CombinedIntegerVector newAction = otherActions.ElementAt(actionIndex); -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformOnePositionInConditionManipulator.cs
r9090 r9204 41 41 } 42 42 43 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector parent, CombinedIntegerVector child) {44 return Manipulate( parent, child, random.Next(((CombinedIntegerVector)child.Condition).Length));43 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector input, CombinedIntegerVector child) { 44 return Manipulate(input, child, random.Next(((CombinedIntegerVector)child.Condition).Length)); 45 45 } 46 46 47 public static CombinedIntegerVector Manipulate(CombinedIntegerVector parent, CombinedIntegerVector child, int index) {47 public static CombinedIntegerVector Manipulate(CombinedIntegerVector input, CombinedIntegerVector child, int index) { 48 48 int max = child.Bounds[index % child.Bounds.Rows, 1] - 1; 49 49 if (child[index].Equals(max)) { 50 child[index] = parent[index];50 child[index] = input[index]; 51 51 } else { 52 52 child[index] = max; -
branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Manipulator/UniformSomePositionManipulator.cs
r9154 r9204 23 23 using HeuristicLab.Core; 24 24 using HeuristicLab.Data; 25 using HeuristicLab.Encodings.ConditionActionEncoding; 25 26 using HeuristicLab.Parameters; 26 27 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 27 28 28 29 namespace HeuristicLab.Encodings.CombinedIntegerVectorEncoding { 29 public class UniformSomePositionManipulator : CombinedIntegerVectorManipulator {30 public class UniformSomePositionManipulator : CombinedIntegerVectorManipulator, IProbabilityMutatorOperator { 30 31 31 32 public IValueLookupParameter<PercentValue> ProbabilityParameter { … … 50 51 } 51 52 52 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector parent, CombinedIntegerVector child) {53 return Manipulate(random, parent, child, ProbabilityParameter.ActualValue.Value, PossibleActionsParameter.ActualValue);53 protected override CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector input, CombinedIntegerVector child) { 54 return Manipulate(random, input, child, ProbabilityParameter.ActualValue.Value, PossibleActionsParameter.ActualValue); 54 55 } 55 56 56 public static CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector parent, CombinedIntegerVector child, double probability, IItemSet<CombinedIntegerVector> possibleActions) {57 child = ManipulateCondition(random, parent, child, probability);58 return ManipulateAction(random, parent,child, probability, possibleActions);57 public static CombinedIntegerVector Manipulate(IRandom random, CombinedIntegerVector input, CombinedIntegerVector child, double probability, IItemSet<CombinedIntegerVector> possibleActions) { 58 child = ManipulateCondition(random, input, child, probability); 59 return ManipulateAction(random, child, probability, possibleActions); 59 60 } 60 61 61 public static CombinedIntegerVector ManipulateCondition(IRandom random, CombinedIntegerVector parent, CombinedIntegerVector child, double probability) {62 public static CombinedIntegerVector ManipulateCondition(IRandom random, CombinedIntegerVector input, CombinedIntegerVector child, double probability) { 62 63 int conditionLength = child.Length - child.ActionLength; 63 64 for (int index = 0; index < child.Length - child.ActionLength; index++) { 64 65 if (random.NextDouble() < probability) { 65 child = UniformOnePositionInConditionManipulator.Manipulate( parent, child, index);66 child = UniformOnePositionInConditionManipulator.Manipulate(input, child, index); 66 67 } 67 68 } … … 69 70 } 70 71 71 public static CombinedIntegerVector ManipulateAction(IRandom random, CombinedIntegerVector parent, CombinedIntegerVectorchild, double probability, IItemSet<CombinedIntegerVector> possibleActions) {72 public static CombinedIntegerVector ManipulateAction(IRandom random, CombinedIntegerVector child, double probability, IItemSet<CombinedIntegerVector> possibleActions) { 72 73 if (child.ActionLength > 0 && random.NextDouble() < probability) { 73 UniformActionManipulator.Manipulate(random, parent,child, possibleActions);74 UniformActionManipulator.Manipulate(random, child, possibleActions); 74 75 } 75 76 return child; -
branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj
r9194 r9204 89 89 <Compile Include="Analyzer\XCSSolutionAnalyzer.cs" /> 90 90 <Compile Include="Covering\CoveringOperator.cs" /> 91 <Compile Include="Covering\CoveringSolutionCreator.cs" /> 91 92 <Compile Include="Covering\DoDeletionBeforeCovering.cs" /> 92 93 <Compile Include="Covering\ICovering.cs" /> … … 107 108 <Compile Include="Interfaces\IXCSModel.cs" /> 108 109 <Compile Include="Interfaces\IXCSSolution.cs" /> 110 <Compile Include="Manipulator\IProbabilityMutatorOperator.cs" /> 109 111 <Compile Include="Operator\CalculateAccuracy.cs" /> 110 112 <Compile Include="GA\XCSCheckIfGAShouldBeApplied.cs" /> -
branches/LearningClassifierSystems/HeuristicLab.Encodings.ConditionActionEncoding/3.3/Interfaces/IConditionActionProblem.cs
r9194 r9204 35 35 IParameter PossibleActionsConcreteClassParameter { get; } 36 36 IParameter PossibleActionsParameter { get; } 37 //IItemSet<IClassifier> PossibleActions { get; }38 37 39 38 IParameter ClassifierComparerParameter { get; } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3
-
Property
svn:ignore
set to
obj
-
Property
svn:ignore
set to
-
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Crossover/SinglePointCrossover.cs
r9194 r9204 62 62 IList<IVariable> newCondition = new List<IVariable>(parent1Condition.Count); 63 63 64 var keyEnumerator = parent1Condition. Keys.GetEnumerator();64 var keyEnumerator = parent1Condition.Order.GetEnumerator(); 65 65 66 66 int index = 0; -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/HeuristicLab.Encodings.VariableVector-3.3.csproj
r9194 r9204 71 71 </ItemGroup> 72 72 <ItemGroup> 73 <Compile Include="Covering\VariableVectorCoveringCreator.cs" /> 73 74 <Compile Include="Crossover\SinglePointCrossover.cs" /> 75 <Compile Include="Interfaces\IVariableVectorCoveringCreator.cs" /> 74 76 <Compile Include="Interfaces\IVariableVectorCrossover.cs" /> 77 <Compile Include="Interfaces\IVariableVectorManipulator.cs" /> 78 <Compile Include="Manipulator\UniformActionManipulator.cs" /> 79 <Compile Include="Manipulator\UniformOnePositionInConditionManipulator.cs" /> 80 <Compile Include="Manipulator\UniformSomePositionManipulator.cs" /> 75 81 <Compile Include="VariableVectorCrossover.cs" /> 82 <Compile Include="VariableVectorManipulator.cs" /> 76 83 <Compile Include="Variable\IActionVariable.cs" /> 77 84 <Compile Include="Variable\IVariable.cs" /> -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/DoubleVariable.cs
r9194 r9204 137 137 public override double GetGenerality() { 138 138 double delta = max - min; 139 double interval Width = 2 * currentSpread;140 double generality = interval Width / delta;139 double intervalInBoundsWidth = Math.Min(max, currentCenter + currentSpread) - Math.Max(min, currentCenter - currentSpread); 140 double generality = intervalInBoundsWidth / delta; 141 141 return generality > 1 ? 1 : generality; 142 142 } … … 159 159 return crossed; 160 160 } 161 162 public override void Manipulate(IRandom random, string stringValue, int pos) { 163 if (pos > 1 || pos < 0) { throw new ArgumentOutOfRangeException(); } 164 Manipulate(random, pos, 10); 165 } 166 167 public void Manipulate(IRandom random, int pos, double percentage) { 168 if (pos > 1 || pos < 0) { throw new ArgumentOutOfRangeException(); } 169 double delta = max - min; 170 double maxChange = delta * (percentage / 100); 171 double actualChange = (random.NextDouble() * maxChange * 2) - maxChange; 172 if (pos == 0) { 173 currentCenter += actualChange; 174 } else if (pos == 1) { 175 currentSpread += actualChange; 176 //otherwise the interval could be corrupt and no input could match the rule. 177 currentSpread = currentSpread > 0 ? currentSpread : 0; 178 } 179 } 180 181 public override void Cover(IRandom random, string stringValue, double changeSymbolProbability) { 182 Cover(random, stringValue, 50); 183 } 184 185 public void CoverWithSpreadPercentage(IRandom random, string stringValue, double spreadPercentage) { 186 currentCenter = double.Parse(stringValue); 187 double delta = max - min; 188 currentSpread = random.NextDouble() * (delta * (spreadPercentage / 100)); 189 } 161 190 } 162 191 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IVariable.cs
r9194 r9204 41 41 42 42 IVariable CrossParentsAtPosition(IVariable parent2, int pos); 43 44 void Manipulate(IRandom random, string stringValue, int pos); 45 46 void Cover(IRandom random, string stringValue, double changeSymbolProbability); 43 47 } 44 48 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IntVariable.cs
r9194 r9204 86 86 87 87 public override string ToString() { 88 return currentValue.ToString();88 return Wildcard ? "#" : currentValue.ToString(); 89 89 } 90 90 … … 145 145 return this.GetSetCopy(); 146 146 } 147 148 public override void Manipulate(IRandom random, string stringValue, int pos) { 149 if (pos != 0) { throw new ArgumentOutOfRangeException(); } 150 Wildcard = !Wildcard; 151 if (!Wildcard) { 152 currentValue = int.Parse(stringValue); 153 } 154 } 155 156 public override void Cover(IRandom random, string stringValue, double changeSymbolProbability) { 157 Wildcard = random.NextDouble() < changeSymbolProbability; 158 if (!Wildcard) { 159 currentValue = int.Parse(stringValue); 160 } 161 } 147 162 } 148 163 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/StringVariable.cs
r9194 r9204 134 134 135 135 public override string ToString() { 136 return CurrentStringValue;136 return Wildcard ? "#" : CurrentStringValue; 137 137 } 138 138 … … 197 197 return this.GetSetCopy(); 198 198 } 199 200 public override void Manipulate(IRandom random, string stringValue, int pos) { 201 if (pos != 0) { throw new ArgumentOutOfRangeException(); } 202 Wildcard = !Wildcard; 203 if (!Wildcard) { 204 int newValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key; 205 currentValue = newValue; 206 } 207 } 208 209 public override void Cover(IRandom random, string stringValue, double changeSymbolProbability) { 210 Wildcard = random.NextDouble() < changeSymbolProbability; 211 if (!Wildcard) { 212 int newValue = featureMapping.First(x => x.Value.Equals(stringValue)).Key; 213 currentValue = newValue; 214 } 215 } 199 216 } 200 217 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/Variable.cs
r9194 r9204 69 69 70 70 public virtual IVariable CrossParentsAtPosition(IVariable parent2, int pos) { throw new NotSupportedException("This method is not supported."); } 71 72 public abstract void Manipulate(IRandom random, string stringValue, int pos); 73 74 public abstract void Cover(IRandom random, string stringValue, double changeSymbolProbability); 71 75 } 72 76 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVector.cs
r9194 r9204 33 33 [Item("VariableVector", "")] 34 34 public class VariableVector : Item, IClassifier { 35 35 36 [Storable] 36 37 protected VariableVectorCondition condition; … … 131 132 return true; 132 133 } 134 135 [StorableClass] 136 [Item("VariableVectorActionComparer", "")] 137 public class VariableVectorActionComparer : Item, IEqualityComparer<VariableVectorAction>, IClassifierComparer { 138 139 [StorableConstructor] 140 protected VariableVectorActionComparer(bool deserializing) : base(deserializing) { } 141 protected VariableVectorActionComparer(VariableVectorActionComparer original, Cloner cloner) 142 : base(original, cloner) { 143 } 144 public override IDeepCloneable Clone(Cloner cloner) { 145 return new VariableVectorActionComparer(this, cloner); 146 } 147 public VariableVectorActionComparer() : base() { } 148 149 public bool Equals(VariableVectorAction x, VariableVectorAction y) { 150 throw new NotImplementedException(); 151 } 152 153 public int GetHashCode(VariableVectorAction obj) { 154 throw new NotImplementedException(); 155 } 156 157 public bool Equals(IAction x, IAction y) { 158 var xCast = x as VariableVectorAction; 159 var yCast = y as VariableVectorAction; 160 return x != null && y != null && Equals(xCast, yCast); 161 } 162 163 public int GetHashCode(IAction obj) { 164 var objCast = obj as VariableVectorAction; 165 return objCast != null ? GetHashCode(objCast) : obj.GetHashCode(); 166 } 167 } 133 168 } 134 169 } -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorAction.cs
r9194 r9204 35 35 public class VariableVectorAction : ItemDictionary<StringValue, IActionVariable>, IAction { 36 36 37 public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } } 38 37 39 public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } } 38 40 … … 61 63 var targetCast = target as VariableVectorAction; 62 64 if (targetCast == null) { return false; } 63 if ( !(this.Keys.Except(targetCast.Keys).Count() == 0 && targetCast.Keys.Except(this.Keys).Count() == 0)) { return false; }65 if (this.Order.SequenceEqual(targetCast.Order)) { return false; } 64 66 foreach (var keyValuePair in targetCast) { 65 67 if (!this[keyValuePair.Key].MatchVariable(keyValuePair.Value)) { … … 97 99 98 100 public bool Identical(VariableVectorCondition target) { 99 if ( !(target.Keys.Except(this.Keys).Count() == 0 && this.Keys.Except(target.Keys).Count() == 0)) { return false; }101 if (this.Order.SequenceEqual(target.Order)) { return false; } 100 102 foreach (var keyValuePair in target) { 101 103 if (!this[keyValuePair.Key].Identical(keyValuePair.Value)) { -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorCondition.cs
r9194 r9204 34 34 public class VariableVectorCondition : ItemDictionary<StringValue, IVariable>, ICondition { 35 35 36 public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } } 37 36 38 public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } } 37 39 … … 51 53 var targetCast = target as VariableVectorInput; 52 54 if (targetCast == null) { return false; } 53 if ( !(targetCast.Keys.Except(this.Keys).Count() == 0 && this.Keys.Except(targetCast.Keys).Count() == 0)) { return false; }55 if (this.Order.SequenceEqual(targetCast.Order)) { return false; } 54 56 foreach (var keyValuePair in targetCast) { 55 57 if (!this[keyValuePair.Key].MatchInput(keyValuePair.Value.Value)) { … … 91 93 92 94 public bool Identical(VariableVectorCondition target) { 93 if ( !(target.Keys.Except(this.Keys).Count() == 0 && this.Keys.Except(target.Keys).Count() == 0)) { return false; }95 if (this.Order.SequenceEqual(target.Order)) { return false; } 94 96 foreach (var keyValuePair in target) { 95 97 if (!this[keyValuePair.Key].Identical(keyValuePair.Value)) { -
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorInput.cs
r9194 r9204 21 21 22 22 using System.Collections.Generic; 23 using System.Linq; 23 24 using HeuristicLab.Common; 24 25 using HeuristicLab.Core; … … 31 32 [Item("VariableVectorInput", "")] 32 33 public class VariableVectorInput : ItemDictionary<StringValue, StringValue>, IInput { 34 35 public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } } 33 36 34 37 [StorableConstructor] -
branches/LearningClassifierSystems/HeuristicLab.Problems.ConditionActionClassification/3.3/Implementation/ConditionActionClassificationProblem.cs
r9194 r9204 20 20 #endregion 21 21 22 using System.Collections.Generic; 22 23 using System.Linq; 23 24 using HeuristicLab.Common; … … 29 30 using HeuristicLab.Parameters; 30 31 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 32 using HeuristicLab.PluginInfrastructure; 31 33 using HeuristicLab.Problems.DataAnalysis; 32 34 using HeuristicLab.Problems.Instances; … … 233 235 234 236 private void InitializeOperators() { 237 Operators.AddRange(ApplicationManager.Manager.GetInstances<ICombinedIntegerVectorCrossover>()); 238 Operators.AddRange(AddManipulators()); 235 239 Operators.Add(new BestTrainingXCSSolutionAnalyzer()); 236 240 Operators.Add(new CurrentXCSSolutionAnalyzer()); 237 241 238 ParameterizeAnalyzers(); 239 } 240 241 private void ParameterizeAnalyzers() { 242 foreach (XCSSolutionAnalyzer xcsAnalyzer in Operators.Where(x => x is XCSSolutionAnalyzer)) { 242 ParameterizeOperators(); 243 } 244 245 private IEnumerable<ICombinedIntegerVectorManipulator> AddManipulators() { 246 var manipulator = new UniformSomePositionManipulator(); 247 manipulator.ChildParameter.ActualName = "CombinedIntegerVector"; 248 manipulator.FetchedInputParameter.ActualName = ClassifierFetcher.CurrentInputToMatchParameter.ActualName; 249 manipulator.PossibleActionsParameter.ActualName = PossibleActionsConcreteClassParameter.Name; 250 return new List<ICombinedIntegerVectorManipulator>() { manipulator }; 251 } 252 253 private void ParameterizeOperators() { 254 foreach (XCSSolutionAnalyzer xcsAnalyzer in Operators.OfType<XCSSolutionAnalyzer>()) { 243 255 xcsAnalyzer.ClassifierParameter.ActualName = SolutionCreator.CombinedIntegerVectorParameter.ActualName; 244 256 xcsAnalyzer.PredictionParameter.ActualName = Evaluator.PredictionParameter.ActualName;
Note: See TracChangeset
for help on using the changeset viewer.