コード例 #1
0
        public static void main(String[] args)
        {
            // tests the ABK rule

            int[] ABK =
            {
                0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
                0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
                1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
                1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
            };
            var state = new EvolutionState {
                Random = new IMersenneTwister[] { new MersenneTwisterFast(500) }
            };
            var ga = new MajorityGA();

            ga.Setup(state, new Parameter(""));
            var bvi = new BitVectorIndividual
            {
                Fitness = new SimpleFitness(),
                genome  = new bool[128]
            };

            for (int i = 0; i < 128; i++)
            {
                bvi.genome[i] = ABK[i] != 0;
            }
            ga.Evaluate(state, bvi, 0, 0);
            Console.Error.WriteLine("ABK Rule");
            ga.Describe(state, bvi, 0, 0, 1);
        }
コード例 #2
0
        public void BitVectorIndividualWriteAndRead()
        {
            // First we'll set up a Fitness for the Individual
            var rand = new MersenneTwisterFast(0);
            var f    = new SimpleFitness();

            f.SetFitness(null, float.MaxValue, true);

            const int n = 10;

            f.Trials = new List <double>(n);
            for (var i = 0; i < n; i++)
            {
                f.Trials.Add(rand.NextDouble());
            }

            // Now we can create and initialize the Individual
            var ind  = new BitVectorIndividual();
            var ind2 = new BitVectorIndividual(); // We'll read back into this instance

            ind.Genome = new bool[10];            // This is the set of genes
            for (var i = 0; i < 10; i++)
            {
                ind.genome[i] = rand.NextBoolean();
            }
            ind.Fitness   = f;
            ind.Evaluated = true;

            using (var ms = new MemoryStream())
            {
                var writer = new BinaryWriter(ms);
                ind.WriteIndividual(null, writer);

                ms.Position = 0;
                var reader = new BinaryReader(ms);

                ind2.Fitness = new SimpleFitness();
                ind2.ReadIndividual(null, reader);

                Assert.IsTrue(ind.Fitness.EquivalentTo(ind2.Fitness));
                Assert.IsTrue(ind2.Fitness.IsIdeal);
                Assert.IsTrue(ind.Equals(ind2)); // Genetically equivalent
                for (var i = 0; i < 10; i++)
                {
                    Assert.AreEqual(ind.genome[i], ind2.genome[i]); // check each gene
                }
            }
        }
コード例 #3
0
            /// <summary>
            /// Evaluates the individual with the clause.  Returns 1 is clase is satisfiabile, 0 otherwise.
            /// </summary>
            /// <param name="ind"></param>
            public int Eval(BitVectorIndividual ind)
            {
                foreach (var x in _variables)
                {
                    bool tmp;
                    if (x < 0)
                    {
                        tmp = !ind.genome[-x - 1];
                    }
                    else
                    {
                        tmp = ind.genome[x - 1];
                    }

                    if (tmp)
                    {
                        return(1);
                    }
                }
                return(0);
            }
コード例 #4
0
            /// <summary>
            /// Evaluates the individual with the clause.  Returns 1 is clase is satisfiabile, 0 otherwise.
            /// </summary>
            /// <param name="ind"></param>
            /// <returns></returns>
            public int Eval(BitVectorIndividual ind)
            {
                for (var i = 0; i < _variables.Length; i++)
                {
                    var  x = _variables[i];
                    bool tmp;
                    if (x < 0)
                    {
                        tmp = !ind.genome[-x - 1];
                    }
                    else
                    {
                        tmp = ind.genome[x - 1];
                    }

                    if (tmp)
                    {
                        return(1);
                    }
                }
                return(0);
            }