コード例 #1
0
ファイル: Chromosome.cs プロジェクト: IsaacSherman/Thesis
        /// <summary>
        /// Passes the reset on to the list of cells
        /// </summary>

        /// <summary>
        /// Implements the following table for affinities:
        /// Affinity table- Affinity A, B, result (new affinity, Chromosome, conj. Chromosome)
        ///        00 00 00 A and[not] B
        ///        00 01 01 A and[not] B
        ///        00 10 10 B and[not] A
        ///        00 11 Chromosomes laid out vertically
        ///        01 00 01 B and[not] A
        ///        01 01 Chromosomes laid out vertically
        ///        01 10 11 B and[not] A
        ///        01 11 Chromosomes laid out vertically
        ///        10 00 10 A and[not] B
        ///        10 01 11 A and[not] B
        ///        10 10 Chromosomes laid out vertically
        ///        10 11 Chromosomes laid out vertically
        ///        11 00 Chromosomes laid out vertically
        ///        11 01 Chromosomes laid out vertically
        ///        11 10 Chromosomes laid out vertically
        ///        11 11 Chromosomes laid out vertically
        /// </summary>
        /// <param name="a">Chromosome A(above)</param>
        /// <param name="b">Chromosome B(above)</param>
        /// <returns></returns>
        public static Chromosome[] Merge(Chromosome a, Chromosome b)
        {
            Affinities aAffinity = (Affinities)a.affinityBits.BitsToString().BinaryStringToInt();
            Affinities bAffinity = (Affinities)b.affinityBits.BitsToString().BinaryStringToInt();
            BitArray   result    = AffinityBitsFromAffinity(aAffinity | bAffinity);
            Affinities order     = aAffinity | bAffinity;

            Chromosome[] ret;
            if (aAffinity == Affinities.complete || bAffinity == Affinities.complete ||
                (aAffinity == bAffinity && bAffinity != Affinities.dontCare))
            {//if both are competing for the same position, vertical
                ret    = new Chromosome[2];
                ret[0] = a.deepCopy();

                ret[1] = b.deepCopy();
            }
            else if (bAffinity == Affinities.first || aAffinity == Affinities.last)
            {  //B and [not] A
                ret    = new Chromosome[1];
                ret[0] = new Chromosome(b.cells);
                ret[0] = JoinCells(ret[0], a);
                ret[0].affinityBits = AffinityBitsFromAffinity(bAffinity);
                ret[0].classBits    = b.classBits;
                ret[0].updateCellNum();
            }
            else
            {
                ret    = new Chromosome[1];
                ret[0] = new Chromosome(a.cells);
                ret[0] = JoinCells(ret[0], b);
                ret[0].affinityBits = AffinityBitsFromAffinity(aAffinity);
                ret[0].classBits    = a.classBits;
                ret[0].updateCellNum();
                //A and [not] B
            }

            return(ret);
        }
コード例 #2
0
 public void AddChromosome(Chromosome x)
 {
     x.updateCellNum();
     myChromosomes.Add(x.deepCopy());
 }