Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/04/13 16:16:38 (12 years ago)
Author:
sforsten
Message:

#1980:

  • deleted not needed interface IMatching
  • finished VariableVector encoding
  • the algorithm LearningClassifierSystem is now independent of a specific encoding. It still needs the ConditionActionEncoding.
  • merged r9191:9203 HeuristicLab.Core from trunk to branch
Location:
branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3
Files:
11 added
12 edited

Legend:

Unmodified
Added
Removed
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3

    • Property svn:ignore set to
      obj
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Crossover/SinglePointCrossover.cs

    r9194 r9204  
    6262      IList<IVariable> newCondition = new List<IVariable>(parent1Condition.Count);
    6363
    64       var keyEnumerator = parent1Condition.Keys.GetEnumerator();
     64      var keyEnumerator = parent1Condition.Order.GetEnumerator();
    6565
    6666      int index = 0;
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/HeuristicLab.Encodings.VariableVector-3.3.csproj

    r9194 r9204  
    7171  </ItemGroup>
    7272  <ItemGroup>
     73    <Compile Include="Covering\VariableVectorCoveringCreator.cs" />
    7374    <Compile Include="Crossover\SinglePointCrossover.cs" />
     75    <Compile Include="Interfaces\IVariableVectorCoveringCreator.cs" />
    7476    <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" />
    7581    <Compile Include="VariableVectorCrossover.cs" />
     82    <Compile Include="VariableVectorManipulator.cs" />
    7683    <Compile Include="Variable\IActionVariable.cs" />
    7784    <Compile Include="Variable\IVariable.cs" />
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/DoubleVariable.cs

    r9194 r9204  
    137137    public override double GetGenerality() {
    138138      double delta = max - min;
    139       double intervalWidth = 2 * currentSpread;
    140       double generality = intervalWidth / delta;
     139      double intervalInBoundsWidth = Math.Min(max, currentCenter + currentSpread) - Math.Max(min, currentCenter - currentSpread);
     140      double generality = intervalInBoundsWidth / delta;
    141141      return generality > 1 ? 1 : generality;
    142142    }
     
    159159      return crossed;
    160160    }
     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    }
    161190  }
    162191}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IVariable.cs

    r9194 r9204  
    4141
    4242    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);
    4347  }
    4448}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/IntVariable.cs

    r9194 r9204  
    8686
    8787    public override string ToString() {
    88       return currentValue.ToString();
     88      return Wildcard ? "#" : currentValue.ToString();
    8989    }
    9090
     
    145145      return this.GetSetCopy();
    146146    }
     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    }
    147162  }
    148163}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/StringVariable.cs

    r9194 r9204  
    134134
    135135    public override string ToString() {
    136       return CurrentStringValue;
     136      return Wildcard ? "#" : CurrentStringValue;
    137137    }
    138138
     
    197197      return this.GetSetCopy();
    198198    }
     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    }
    199216  }
    200217}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/Variable/Variable.cs

    r9194 r9204  
    6969
    7070    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);
    7175  }
    7276}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVector.cs

    r9194 r9204  
    3333  [Item("VariableVector", "")]
    3434  public class VariableVector : Item, IClassifier {
     35
    3536    [Storable]
    3637    protected VariableVectorCondition condition;
     
    131132      return true;
    132133    }
     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    }
    133168  }
    134169}
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorAction.cs

    r9194 r9204  
    3535  public class VariableVectorAction : ItemDictionary<StringValue, IActionVariable>, IAction {
    3636
     37    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
     38
    3739    public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } }
    3840
     
    6163      var targetCast = target as VariableVectorAction;
    6264      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; }
    6466      foreach (var keyValuePair in targetCast) {
    6567        if (!this[keyValuePair.Key].MatchVariable(keyValuePair.Value)) {
     
    9799
    98100    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; }
    100102      foreach (var keyValuePair in target) {
    101103        if (!this[keyValuePair.Key].Identical(keyValuePair.Value)) {
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorCondition.cs

    r9194 r9204  
    3434  public class VariableVectorCondition : ItemDictionary<StringValue, IVariable>, ICondition {
    3535
     36    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
     37
    3638    public int VirtualLength { get { return this.Values.Sum(x => x.VirtualLength); } }
    3739
     
    5153      var targetCast = target as VariableVectorInput;
    5254      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; }
    5456      foreach (var keyValuePair in targetCast) {
    5557        if (!this[keyValuePair.Key].MatchInput(keyValuePair.Value.Value)) {
     
    9193
    9294    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; }
    9496      foreach (var keyValuePair in target) {
    9597        if (!this[keyValuePair.Key].Identical(keyValuePair.Value)) {
  • branches/LearningClassifierSystems/HeuristicLab.Encodings.VariableVector/3.3/VariableVectorInput.cs

    r9194 r9204  
    2121
    2222using System.Collections.Generic;
     23using System.Linq;
    2324using HeuristicLab.Common;
    2425using HeuristicLab.Core;
     
    3132  [Item("VariableVectorInput", "")]
    3233  public class VariableVectorInput : ItemDictionary<StringValue, StringValue>, IInput {
     34
     35    public IOrderedEnumerable<StringValue> Order { get { return this.Keys.OrderBy(x => x.Value); } }
    3336
    3437    [StorableConstructor]
Note: See TracChangeset for help on using the changeset viewer.