private void OneGeneration_Tick(object sender, EventArgs e) { if (generationNum == 1) { label10.Text = "Generation Num: " + Convert.ToString(++generationNum); for (int i = 0; i < mobScore.Length; i++) { mobScore[i] = 0; } } if (oneGenerationIteration == mobScore.Length) { Crossbreeding(BestMob(mobScore), BestMob(mobScore), BestMob(mobScore), BestMob(mobScore)); Mutation(); oneGenerationIteration++; OneGeneration.Stop(); GlobalCycle.Start(); return; } WeightsReader(W01, W12, W23, oneGenerationIteration); mobUpIteration = 0; OneMobLifeCycle.Start(); OneGeneration.Stop(); }
private void OneMobLifeCycle_Tick(object sender, EventArgs e) { label11.Text = "Mob Up Iter: " + mobUpIteration; Intersect(); //raysDistanceFact.CopyTo(L0, 0); L0[0] = raysDistanceFact[0]; L0[1] = raysDistanceFact[1]; L0[2] = raysDistanceFact[2]; L0[3] = raysDistanceFact[3]; L0[4] = raysDistanceFact[4]; L0[5] = raysDistanceFact[5]; L0[6] = raysDistanceFact[6]; L0[7] = raysDistanceFact[7]; Forward(L0, W01, L1); Forward(L1, W12, L2); Forward(L2, W23, L3); double maxRotateVal = Math.Max(L3[1], L3[2]); if (L3[0] > 0.5) { UpMoveDef(); } if (maxRotateVal > 0.5 && Array.IndexOf(L3, maxRotateVal) != 0) { switch (Array.IndexOf(L3, maxRotateVal)) { case 1: LeftRotateDef(); break; case 2: RightRotateDef(); break; default: break; } } mobUpIteration++; if (mobUpIteration == 500) //время жизни одного моба { if (firstGenerationIteration != mobScore.Length + 1) { mobScore[firstGenerationIteration] = score; firstGenerationIteration++; FirstGeneration.Start(); } else if (oneGenerationIteration != mobScore.Length + 1) { mobScore[oneGenerationIteration] = score; oneGenerationIteration++; OneGeneration.Start(); } else { GlobalCycle.Start(); } MobRestart(); OneMobLifeCycle.Stop(); } }