Esempio n. 1
0
 private static int AddAnotherClone(List<Instruction[]> Clones, BleepyBloop b, List<double> PastFoods, int NumbClones)
 {
     Clones.Add(b.ReturnVaried(0.08, 0.08));
     PastFoods.Add(b.Food);
     NumbClones++;
     return NumbClones;
 }
Esempio n. 2
0
 public static Field GenerateNewLevel(BleepyBloop[] Olds)
 {
     Field F = InitNewFieldWithOldBleeps(Olds);
     F.physicalLevel.AddNewFoodAndPoison(48);
     F.physicalLevel.UpdateThingChache(F);
     F.bleepSim.Bloops = F.Bloops;
     F.bleepSim.SetThreads(BleepSim.NumThread,NF);
     return F;
 }
Esempio n. 3
0
 private static void DrawBloopSizeIndicator(BleepyBloop B, double x, double y, double sr, double R1)
 {
     for (double i = 0; i < Math.PI; i += Math.PI / 3)
     {
         GL.Begin(PrimitiveType.LineLoop);
         for (double r = sr + (i * 2); r < sr + (i * 2 + Math.PI / 3); r += R1)
         {
             GL.Vertex2(x +
                 (Math.Sqrt(B.Food) / 7d + 0.5) * Math.Sin(r),
                 y +
                 (Math.Sqrt(B.Food) / 7d + 0.5) * Math.Cos(r));
         }
         GL.End();
     }
 }
Esempio n. 4
0
        public static FieldSet NewField(BleepyBloop[] Olds)
        {
            List<Instruction[]> temp = new List<Instruction[]>();
            List<Instruction[]> clones = new List<Instruction[]>();
            List<double> PastFoods = new List<double>();
            List<Instruction> GenePool = new List<Instruction>();
            Olds = Olds.OrderByDescending(y => y.ObjectiveFunction()).ToArray();
            Field F = new Field(Olds.Count());
            double Mean = FillGenePool(Olds, clones, GenePool,PastFoods);
            AddPaddingToGenePool(GenePool);

            FillFromGenePool(temp, GenePool);
            F.Bloops = new BleepyBloop[temp.Count() + clones.Count()];
            AddBloopsToField(temp, clones, F,Mean,PastFoods);
            F = Field.GenerateNewLevel(F.Bloops.ToArray());
            return FieldSetFromField(F);
        }
Esempio n. 5
0
 private static void AddBloopsToField(List<Instruction[]> temp, List<Instruction[]> clones, Field F,double Mean,List<double> PastFoods)
 {
     for (int i = 0; i < temp.Count(); i++)
     {
         BleepyBloop B = F.Bloops[i];
         B = new BleepyBloop();
         B.Genes = temp[i];
         B.Vary(0.08, 0.08);
         B.parentsFood = Mean;
         F.Bloops[i] = B;
     }
     for (int i = 0; i < clones.Count(); i++)
     {
         int b = i + temp.Count;
         F.Bloops[b] = new BleepyBloop();
         F.Bloops[b].Genes = clones[i];
         F.Bloops[b].parentsFood = PastFoods[i];
     }
 }
Esempio n. 6
0
 private static void ExtractGenesToPassOn(List<Instruction[]> Clones, List<Instruction> GenePool, double Mean, BleepyBloop b,List<double> PastFoods,double Total)
 {
     if (Total >= 0)
     {
         double v = Math.Round(GetNumberOfGenesToPassFromBloop(b));
         int NumberOfInstructionsToPassOn = (int)Math.Round(BleepyBloop.MemSize * (v / Mean));
         if (v >= Mean)
         {
             Clones.Add(b.Genes);
             PastFoods.Add(b.Food);
             int NumbClones = 1;
             if (v >= (Mean * 2))
             {
                 NumbClones = AddAnotherClone(Clones, b, PastFoods, NumbClones);
             }
             NumberOfInstructionsToPassOn -= BleepyBloop.MemSize * NumbClones;
             Total -= NumbClones*BleepyBloop.MemSize;
         }
         FillGenePoolWithBloopsGenes(GenePool, b, NumberOfInstructionsToPassOn);
         Total -= NumberOfInstructionsToPassOn;
     }
 }
Esempio n. 7
0
 private static double GetNumberOfGenesToPassFromBloop(BleepyBloop b)
 {
     return Math.Pow(b.ObjectiveFunction(),1.5);
 }
Esempio n. 8
0
 private static void FillGenePoolWithBloopsGenes(List<Instruction> GenePool, BleepyBloop b, int NumberOfInstructionsToPassOn)
 {
     for (int j = 0; j < -NumberOfInstructionsToPassOn; j--)
     {
         GenePool.Add(b.Genes[j % BleepyBloop.MemSize]);
     }
 }
Esempio n. 9
0
 private static double FillGenePool(BleepyBloop[] Olds, List<Instruction[]> Clones, List<Instruction> GenePool,List<double> PastFoods)
 {
     double Mean = Olds.Sum(x => GetNumberOfGenesToPassFromBloop(x)) / 32;
     double Total = Mean / 32;
     foreach (BleepyBloop b in Olds.OrderByDescending(b=>b.ObjectiveFunction()))
     {
         ExtractGenesToPassOn(Clones, GenePool, Mean, b, PastFoods,Total);
     }
     return Mean;
 }
Esempio n. 10
0
        private static Field InitNewFieldWithOldBleeps(BleepyBloop[] Olds)
        {
            Field F = new Field(Olds.Count());
            F.Bloops = new BleepyBloop[Olds.Count()];
            F.physicalLevel.Foods = new List<Food>();
            F.physicalLevel.Poisons = new List<Poison>();
            for (int i = 0; i < Olds.Count(); i++)
            {
                F.Bloops[i] = new BleepyBloop();
                F.Bloops[i] = new BleepyBloop();
                F.Bloops[i].Genes = Olds[i].Genes;
                F.Bloops[i].Food += Olds[i].Food;
            }

            return F;
        }