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); }
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 } } }
/// <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); }
/// <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); }