예제 #1
0
    public Problem()
      : base() {
      Parameters.Add(new FixedValueParameter<IntValue>(LawnWidthParameterName, "Width of the lawn.", new IntValue(8)));
      Parameters.Add(new FixedValueParameter<IntValue>(LawnLengthParameterName, "Length of the lawn.", new IntValue(8)));

      var g = new SimpleSymbolicExpressionGrammar();
      g.AddSymbols(new string[] { "Sum", "Prog" }, 2, 2);
      g.AddSymbols(new string[] { "Frog" }, 1, 1);
      g.AddTerminalSymbols(new string[] { "Left", "Forward" });
      // initialize 20 ephemeral random constants in [0..32[
      var fastRand = new FastRandom(314159);
      for (int i = 0; i < 20; i++) {
        g.AddTerminalSymbol(string.Format("{0},{1}", fastRand.Next(0, 32), fastRand.Next(0, 32)));
      }

      Encoding = new SymbolicExpressionTreeEncoding(g, 1000, 17);
    }
예제 #2
0
    private void UpdateGrammar() {
      var g = new SimpleSymbolicExpressionGrammar();
      g.AddSymbols(new[] { "AND", "OR" }, 2, 2); // See Koza 1992, page 171, section 7.4.1 11-multiplexer
      g.AddSymbols(new[] { "NOT" }, 1, 1);
      g.AddSymbols(new[] { "IF" }, 3, 3);

      // find the number of address lines and input lines
      // e.g. 11-MUX: 3 addrBits + 8 input bits

      var addrBits = (int)Math.Log(NumberOfBits, 2); // largest power of two that fits into the number of bits
      var inputBits = NumberOfBits - addrBits;

      for (int i = 0; i < addrBits; i++)
        g.AddTerminalSymbol(string.Format("a{0}", i));
      for (int i = 0; i < inputBits; i++)
        g.AddTerminalSymbol(string.Format("d{0}", i));

      Encoding.Grammar = g;

      BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
    }
예제 #3
0
    private void UpdateGrammar() {
      var g = new SimpleSymbolicExpressionGrammar();
      g.AddSymbols(new[] { "AND", "OR", "NAND", "NOR" }, 2, 2); // see Koza, 1992, page 529 section 20.2 Symbolic Regression of Even-Parity Functions

      // add one terminal symbol for each bit
      for (int i = 0; i < NumberOfBits; i++)
        g.AddTerminalSymbol(string.Format("{0}", i));

      Encoding.Grammar = g;

      BestKnownQuality = Math.Pow(2, NumberOfBits); // this is a benchmark problem (the best achievable quality is known for a given number of bits)
    }