Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/27/12 19:14:51 (12 years ago)
Author:
sforsten
Message:

#1980:

  • added ConditionActionClassificationProblem
  • added ConditionActionEncoding
  • added Manipulators, Crossovers and an LCSAdaptedGeneticAlgorithm
  • changed LearningClassifierSystemMainLoop
Location:
branches/LearningClassifierSystems
Files:
12 added
10 edited

Legend:

Unmodified
Added
Removed
  • branches/LearningClassifierSystems

    • Property svn:ignore set to
      *.suo
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3

    • Property svn:ignore set to
      *.user
      Plugin.cs
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVector.cs

    r8941 r9089  
    2525using HeuristicLab.Common;
    2626using HeuristicLab.Core;
     27using HeuristicLab.Data;
     28using HeuristicLab.Encodings.ConditionActionEncoding;
    2729using HeuristicLab.Encodings.IntegerVectorEncoding;
    2830using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3133  [StorableClass]
    3234  [Item("CombinedIntegerVector", "Represents a combined vector of integer values.")]
    33   public class CombinedIntegerVector : IntegerVector, IMatching {
     35  public class CombinedIntegerVector : IntegerVector, IClassifier {
    3436
    3537    [Storable]
    36     protected int actionPart;
     38    protected int actionLength;
     39    public int ActionLength { get { return actionLength; } }
    3740
    3841    /// <summary>
     
    4245    /// </summary>
    4346    [Storable]
    44     protected int[,] bounds;
     47    protected IntMatrix bounds;
     48    public IntMatrix Bounds { get { return (IntMatrix)bounds.Clone(); } }
    4549
    4650    [StorableConstructor]
     
    4852    public CombinedIntegerVector() : base() { }
    4953
    50     public CombinedIntegerVector(int[] elements, int actionPart, int[,] bounds)
     54    public CombinedIntegerVector(int[] elements, int actionPart, IntMatrix bounds)
    5155      : base(elements) {
    52       this.actionPart = actionPart;
     56      this.actionLength = actionPart;
    5357      //check if combinedVector satisfies bounds and if bounds is set correctly (at leats one row with 2 columns) is missing!
    5458      this.bounds = bounds;
    5559    }
    5660
    57     public CombinedIntegerVector(IntegerVector combinedVector, int actionPart, int[,] bounds)
     61    public CombinedIntegerVector(IntegerVector combinedVector, int actionPart, IntMatrix bounds)
    5862      : this(combinedVector.ToArray(), actionPart, bounds) { }
    5963
    60     public CombinedIntegerVector(IntegerVector condition, IntegerVector action, int[,] bounds)
     64    public CombinedIntegerVector(IntegerVector condition, IntegerVector action, IntMatrix bounds)
    6165      : base(condition.Concat(action).ToArray()) {
    62       actionPart = action.Length;
     66      actionLength = action.Length;
    6367      //check if combinedVector satisfies bounds and if bounds is set correctly (at leats one row with 2 columns) is missing!
    6468      this.bounds = bounds;
    6569    }
    6670
     71    public CombinedIntegerVector(IntegerVector condition, IntMatrix conditionBounds, IntegerVector action, IntMatrix actionBounds)
     72      : this(condition, action, CombineBounds(conditionBounds, actionBounds)) {
     73    }
     74
     75    private static IntMatrix CombineBounds(IntMatrix conditionBounds, IntMatrix actionBounds) {
     76      int columns = conditionBounds.Columns < actionBounds.Columns ? conditionBounds.Columns : actionBounds.Columns;
     77      IntMatrix bounds = new IntMatrix(conditionBounds.Rows + actionBounds.Rows, columns);
     78      for (int i = 0; i < conditionBounds.Rows; i++) {
     79        for (int j = 0; j < columns; j++) {
     80          bounds[i, j] = conditionBounds[i % conditionBounds.Rows, j];
     81        }
     82      }
     83
     84      for (int i = conditionBounds.Rows; i < actionBounds.Rows + conditionBounds.Rows; i++) {
     85        for (int j = 0; j < columns; j++) {
     86          bounds[i, j] = actionBounds[i % actionBounds.Rows, j];
     87        }
     88      }
     89      return bounds;
     90    }
     91
    6792    public CombinedIntegerVector(IRandom random, int length, int min, int max, int actionLenght, int actionMin, int actionMax) :
    6893      this(new IntegerVector(length, random, min, max), new IntegerVector(actionLenght, random, actionMin, actionMax), null) {
    69       bounds = new int[length + actionLenght, 2];
     94      bounds = new IntMatrix(length + actionLenght, 2);
    7095      for (int i = 0; i < length; i++) {
    7196        bounds[i, 0] = min;
     
    78103    }
    79104
    80     public CombinedIntegerVector(int length, int actionPart, int[,] bounds)
     105    public CombinedIntegerVector(int length, int actionPart, IntMatrix bounds)
    81106      : base(length) {
    82       this.actionPart = actionPart;
     107      this.actionLength = actionPart;
    83108      this.bounds = bounds;
    84109    }
     
    86111    protected CombinedIntegerVector(CombinedIntegerVector original, Cloner cloner)
    87112      : base(original, cloner) {
    88       actionPart = original.actionPart;
    89       bounds = (int[,])original.bounds.Clone();
    90     }
     113      actionLength = original.actionLength;
     114      bounds = (IntMatrix)original.bounds.Clone();
     115    }
     116
    91117    public override IDeepCloneable Clone(Cloner cloner) {
    92118      return new CombinedIntegerVector(this, cloner);
    93119    }
    94120
    95     public IMatching Condition {
     121    public IClassifier Condition {
    96122      get {
    97         int[] condition = new int[Length - actionPart];
    98         Array.Copy(this.array, condition, Length - actionPart);
     123        int[] condition = new int[Length - actionLength];
     124        Array.Copy(this.array, condition, Length - actionLength);
    99125        return new CombinedIntegerVector(condition, 0, bounds);
    100126      }
    101127    }
    102128
    103     public IMatching Action {
     129    public IClassifier Action {
    104130      get {
    105         int[] action = new int[actionPart];
    106         Array.Copy(this.array, Length - actionPart, action, 0, actionPart);
    107         return new CombinedIntegerVector(action, actionPart, bounds);
    108       }
    109     }
    110 
    111     public bool MatchCondition(IMatching target) {
     131        int[] action = new int[actionLength];
     132        Array.Copy(this.array, Length - actionLength, action, 0, actionLength);
     133
     134        IntMatrix actionBounds = GetElementsOfBoundsForAction(bounds, Length, actionLength);
     135        return new CombinedIntegerVector(action, actionLength, actionBounds);
     136      }
     137    }
     138
     139    private IntMatrix GetElementsOfBoundsForAction(IntMatrix bounds, int length, int actionPartLength) {
     140      IntMatrix actionBounds = new IntMatrix(actionPartLength, bounds.Columns);
     141      int start = length - actionPartLength;
     142      for (int i = start; i < length; i++) {
     143        int pos = i % bounds.Rows;
     144        for (int j = 0; j < bounds.Columns; j++) {
     145          actionBounds[i - start, j] = bounds[pos, j];
     146        }
     147      }
     148      return actionBounds;
     149    }
     150
     151    public bool MatchCondition(IClassifier target) {
    112152      var targetVector = target as CombinedIntegerVector;
    113153      if (targetVector == null) return false;
     
    115155
    116156      int curbounds;
    117       for (int i = 0; i < this.Length - this.actionPart; i++) {
    118         curbounds = i % bounds.GetLength(0);
     157      for (int i = 0; i < this.Length - this.actionLength; i++) {
     158        curbounds = i % bounds.Rows;
    119159        //if don't care symbol is matched, next indices can be checked
    120160        if (this[i].Equals(bounds[curbounds, 1] - 1)) {
     
    129169
    130170    // no "don't care" symbols have to be considered
    131     public bool MatchAction(IMatching target) {
     171    public bool MatchAction(IClassifier target) {
    132172      var targetVector = target as CombinedIntegerVector;
    133173      if (targetVector == null) return false;
    134       if (targetVector.actionPart != this.actionPart) return false;
    135 
    136       int curPos = this.Length - this.actionPart;
    137       int curTargetPos = targetVector.Length - targetVector.actionPart;
    138       for (int i = 0; i < this.actionPart; i++) {
     174      if (targetVector.actionLength != this.actionLength) return false;
     175
     176      int curPos = this.Length - this.actionLength;
     177      int curTargetPos = targetVector.Length - targetVector.actionLength;
     178      for (int i = 0; i < this.actionLength; i++) {
    139179        if (!this[curPos + i].Equals(targetVector[curTargetPos + i])) {
    140180          return false;
     
    149189      int curbounds;
    150190      for (int i = 0; i < this.Length; i++) {
    151         curbounds = i % bounds.GetLength(0);
    152         if (i >= this.Length - this.actionPart || this[i] < bounds[curbounds, 1] - 1) {
     191        curbounds = i % bounds.Rows;
     192        if (i >= this.Length - this.actionLength || this[i] < bounds[curbounds, 1] - 1) {
    153193          strBuilder.Append(this[i]);
    154194        } else {
     
    171211    }
    172212
    173     public bool Equals(IMatching other) {
     213    public bool Equals(IClassifier other) {
    174214      return this.MatchAction(other) && this.MatchCondition(other);
    175215    }
    176216
    177217    public override int GetHashCode() {
    178       int result = actionPart;
     218      int result = actionLength;
    179219      for (int i = 0; i < array.Length; i++) {
    180220        result ^= array[i];
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/CombinedIntegerVectorCreator.cs

    r8941 r9089  
    2323using HeuristicLab.Core;
    2424using HeuristicLab.Data;
    25 using HeuristicLab.Encodings.IntegerVectorEncoding;
     25using HeuristicLab.Operators;
     26using HeuristicLab.Optimization;
    2627using HeuristicLab.Parameters;
    2728using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    3334  [Item("CombinedIntegerVectorCreator", "A base class for operators creating combined int-valued vectors.")]
    3435  [StorableClass]
    35   public abstract class CombinedIntegerVectorCreator : IntegerVectorCreator, ICombinedIntegerVectorCreator {
     36  public abstract class CombinedIntegerVectorCreator : SingleSuccessorOperator, IStochasticOperator, ICombinedIntegerVectorCreator {
     37    public override bool CanChangeName {
     38      get { return false; }
     39    }
     40    public ILookupParameter<IRandom> RandomParameter {
     41      get { return (LookupParameter<IRandom>)Parameters["Random"]; }
     42    }
     43    public IValueLookupParameter<IntValue> LengthParameter {
     44      get { return (IValueLookupParameter<IntValue>)Parameters["Length"]; }
     45    }
     46    public IValueLookupParameter<IntMatrix> BoundsParameter {
     47      get { return (IValueLookupParameter<IntMatrix>)Parameters["Bounds"]; }
     48    }
     49
    3650    public IValueLookupParameter<IntValue> ActionPartLengthParameter {
    3751      get { return (IValueLookupParameter<IntValue>)Parameters["ActionPartLength"]; }
     
    4458    [StorableConstructor]
    4559    protected CombinedIntegerVectorCreator(bool deserializing) : base(deserializing) { }
    46     protected CombinedIntegerVectorCreator(IntegerVectorCreator original, Cloner cloner) : base(original, cloner) { }
     60    protected CombinedIntegerVectorCreator(CombinedIntegerVectorCreator original, Cloner cloner) : base(original, cloner) { }
    4761    protected CombinedIntegerVectorCreator()
    4862      : base() {
     63      Parameters.Add(new LookupParameter<IRandom>("Random", "The pseudo random number generator which should be used for stochastic manipulation operators."));
     64      Parameters.Add(new ValueLookupParameter<IntValue>("Length", "The length of the vector."));
     65      Parameters.Add(new ValueLookupParameter<IntMatrix>("Bounds", "The bounds matrix can contain one row for each dimension with three columns specifying minimum (inclusive), maximum (exclusive), and step size. If less rows are given the matrix is cycled."));
    4966      Parameters.Add(new LookupParameter<CombinedIntegerVector>("CombinedIntegerVector", "The vector which should be manipulated."));
    5067      Parameters.Add(new ValueLookupParameter<IntValue>("ActionPartLength", "The length of the vector."));
    5168    }
    5269
    53     protected override IntegerVector Create(IRandom random, IntValue length, IntMatrix bounds) {
    54       CombinedIntegerVectorParameter.ActualValue = Create(random, length, bounds, ActionPartLengthParameter.ActualValue);
    55       return CombinedIntegerVectorParameter.ActualValue;
     70    public sealed override IOperation Apply() {
     71      CombinedIntegerVectorParameter.ActualValue = Create(RandomParameter.ActualValue, LengthParameter.ActualValue, BoundsParameter.ActualValue, ActionPartLengthParameter.ActualValue);
     72      return base.Apply();
    5673    }
    5774
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Creators/UniformRandomCombinedIntegerVectorCreator.cs

    r8941 r9089  
    5050    /// <returns>The newly created integer vector.</returns>
    5151    public static CombinedIntegerVector Apply(IRandom random, int length, IntMatrix bounds, int actionPartLength) {
    52       var result = new CombinedIntegerVector(length, actionPartLength, GetElementsOfBounds(bounds));
     52      var result = new CombinedIntegerVector(length, actionPartLength, bounds);
    5353      result.Randomize(random, bounds);
    5454      return result;
    55     }
    56 
    57     private static int[,] GetElementsOfBounds(IntMatrix bounds) {
    58       int[,] realBounds = new int[bounds.Rows, bounds.Columns];
    59       for (int i = 0; i < bounds.Rows; i++) {
    60         for (int j = 0; j < bounds.Columns; j++) {
    61           realBounds[i, j] = bounds[i, j];
    62         }
    63       }
    64       return realBounds;
    6555    }
    6656
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/HeuristicLab.Encodings.CombinedIntegerVectorEncoding-3.3.csproj

    r8941 r9089  
    104104    <Compile Include="CombinedIntegerVector.cs" />
    105105    <Compile Include="CombinedIntegerVectorCreator.cs" />
     106    <Compile Include="CombinedIntegerVectorCrossover.cs" />
     107    <Compile Include="CombinedIntegerVectorManipulator.cs" />
     108    <Compile Include="Covering\CombinedIntegerVectorCoveringCreator.cs" />
    106109    <Compile Include="Creators\UniformRandomCombinedIntegerVectorCreator.cs" />
    107     <Compile Include="Matching\IMatching.cs" />
     110    <Compile Include="Crossovers\SinglePointCrossover.cs" />
     111    <Compile Include="Interfaces\ICombinedIntegerVectorManipulator.cs" />
     112    <Compile Include="Interfaces\ICombinedIntegerVectorCrossover.cs" />
    108113    <Compile Include="Interfaces\IBoundedCombinedIntegerVectorOperator.cs" />
    109114    <Compile Include="Interfaces\ICombinedIntegerVectorCreator.cs" />
    110115    <Compile Include="Interfaces\ICombinedIntegerVectorOperator.cs" />
    111     <Compile Include="Properties\AssemblyInfo.cs" />
     116    <Compile Include="Manipulator\UniformActionManipulator.cs">
     117      <SubType>Code</SubType>
     118    </Compile>
     119    <Compile Include="Manipulator\UniformOnePositionInConditionManipulator.cs" />
     120    <Compile Include="Manipulator\UniformSomePositionsManipulator.cs" />
    112121    <Compile Include="Plugin.cs" />
    113122    <None Include="Properties\AssemblyInfo.cs.frame" />
     123    <Compile Include="Properties\AssemblyInfo.cs" />
    114124  </ItemGroup>
    115125  <ItemGroup>
    116126    <None Include="HeuristicLab.snk" />
    117127    <None Include="Plugin.cs.frame" />
     128  </ItemGroup>
     129  <ItemGroup>
     130    <ProjectReference Include="..\..\HeuristicLab.Encodings.ConditionActionEncoding\3.3\HeuristicLab.Encodings.ConditionActionEncoding-3.3.csproj">
     131      <Project>{422FB262-0845-4969-8D16-12F057AA90B1}</Project>
     132      <Name>HeuristicLab.Encodings.ConditionActionEncoding-3.3</Name>
     133    </ProjectReference>
    118134  </ItemGroup>
    119135  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Interfaces/IBoundedCombinedIntegerVectorOperator.cs

    r8941 r9089  
    2020#endregion
    2121
    22 using HeuristicLab.Encodings.IntegerVectorEncoding;
     22using System;
     23using HeuristicLab.Common;
     24using HeuristicLab.Core;
     25using HeuristicLab.Data;
    2326
    2427namespace HeuristicLab.Encodings.CombinedIntegerVectorEncoding {
     
    2629  /// The bounds parameter must contain at least one row and at least two columns. The first two columns specify min and max values, the last column specifies the step size, but is optional (1 is assumed if omitted).
    2730  /// </summary>
    28   public interface IBoundedCombinedIntegerVectorOperator : IBoundedIntegerVectorOperator { }
     31  public interface IBoundedCombinedIntegerVectorOperator : ICombinedIntegerVectorOperator, IOperator, IParameterizedNamedItem, INamedItem, IParameterizedItem, IItem, IContent, IDeepCloneable, ICloneable {
     32    IValueLookupParameter<IntMatrix> BoundsParameter { get; }
     33  }
    2934}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Interfaces/ICombinedIntegerVectorCreator.cs

    r8941 r9089  
    2020#endregion
    2121
     22using System;
     23using HeuristicLab.Common;
    2224using HeuristicLab.Core;
    2325using HeuristicLab.Data;
    24 using HeuristicLab.Encodings.IntegerVectorEncoding;
     26using HeuristicLab.Optimization;
    2527
    2628namespace HeuristicLab.Encodings.CombinedIntegerVectorEncoding {
    27   public interface ICombinedIntegerVectorCreator : IIntegerVectorCreator, IBoundedCombinedIntegerVectorOperator {
     29  public interface ICombinedIntegerVectorCreator : ISolutionCreator, IBoundedCombinedIntegerVectorOperator, ICombinedIntegerVectorOperator, IOperator, IParameterizedNamedItem, INamedItem, IParameterizedItem, IItem, IContent, IDeepCloneable, ICloneable {
     30    IValueLookupParameter<IntValue> LengthParameter { get; }
    2831    IValueLookupParameter<IntValue> ActionPartLengthParameter { get; }
    2932    ILookupParameter<CombinedIntegerVector> CombinedIntegerVectorParameter { get; }
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Interfaces/ICombinedIntegerVectorOperator.cs

    r8941 r9089  
    2020#endregion
    2121
     22using System;
     23using HeuristicLab.Common;
    2224using HeuristicLab.Core;
    2325
    2426namespace HeuristicLab.Encodings.CombinedIntegerVectorEncoding {
    25   public interface ICombinedIntegerVectorOperator : IOperator { }
     27  public interface ICombinedIntegerVectorOperator : IOperator, IParameterizedNamedItem, INamedItem, IParameterizedItem, IItem, IContent, IDeepCloneable, ICloneable {
     28  }
    2629}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.CombinedIntegerVectorEncoding/3.3/Properties

    • Property svn:ignore set to
      AssemblyInfo.cs
Note: See TracChangeset for help on using the changeset viewer.