void AlgorithmRunCompleteCallback() { if (innovationAlgorithm.HasSolution && convergenceAlgorithm.HasSolution && guidelineAlgorithm.HasSolution) { //var conv = convergenceAlgorithm.Solution.GetTop(1)[0]; //var inno = innovationAlgorithm.Solution.GetTop(1)[0]; //var obj = guidelineAlgorithm.Solution.GetTop(1)[0]; //Logger.AppendText("Innovation: " + inno.Fitness); //Logger.AppendText("Convergence: " + conv.Fitness); //Logger.AppendText("Objective: " + obj.Fitness); //suggestionsMap.Add(ChromosomeUtils.MapFromChromosome(OriginalMap, inno)); //suggestionsMap.Add(ChromosomeUtils.MapFromChromosome(OriginalMap, conv)); //suggestionsMap.Add(ChromosomeUtils.MapFromChromosome(OriginalMap, obj)); AlgorithmRunComplete callback = new AlgorithmRunComplete(MixRunCompleteCallback); ThreadPool.QueueUserWorkItem(new WaitCallback(_ => { mixAlgorithm.Run(monsters.AreasManager, convergenceAlgorithm.Solution, innovationAlgorithm.Solution, guidelineAlgorithm.Solution); })); } }
/***********************************************************************************/ private void RunAlgorithm(int innovationPercentage, int guidelinePercentage, int userPercentage, int numberMonsters, int numberItens, int hordesPercentage) { int total = LeverAccessibility + LeverAmountHordes + LeverDanger + LeverMaxItem + LeverMaxMonster; AlgorithmRunComplete callback = new AlgorithmRunComplete(AlgorithmRunCompleteCallback); algorithmRunning = true; /*if (innovationAlgorithm != null && innovationAlgorithm.HasSolution) * { * innovationAlgorithm = new InnovationPool(monsters, OriginalMap, callback, innovationAlgorithm.Solution); * } * else * { * innovationAlgorithm = new InnovationPool(monsters, OriginalMap, callback); * }*/ if (guidelineAlgorithm != null && guidelineAlgorithm.HasSolution) { guidelineAlgorithm = new GuidelinePool(monsters, OriginalMap, callback, monsters.AreasManager, numberMonsters, numberItens, hordesPercentage / 100.0, guidelineAlgorithm.Solution) { LeverAccessibility = (double)this.LeverAccessibility / (double)total, LeverAmountHordes = (double)this.LeverAmountHordes / (double)total, LeverDanger = (double)this.LeverDanger / (double)total, LeverMaxItem = (double)this.LeverMaxItem / (double)total, LeverMaxMonster = (double)this.LeverMaxMonster / (double)total }; } else { guidelineAlgorithm = new GuidelinePool(monsters, OriginalMap, callback, monsters.AreasManager, numberMonsters, numberItens, hordesPercentage / 100.0) { LeverAccessibility = (double)this.LeverAccessibility / (double)total, LeverAmountHordes = (double)this.LeverAmountHordes / (double)total, LeverDanger = (double)this.LeverDanger / (double)total, LeverMaxItem = (double)this.LeverMaxItem / (double)total, LeverMaxMonster = (double)this.LeverMaxMonster / (double)total }; } /*if (convergenceAlgorithm != null && convergenceAlgorithm.HasSolution) * { * convergenceAlgorithm = new ConvergencePool(monsters, OriginalMap, callback, convergenceAlgorithm.Solution); * } * else * { * convergenceAlgorithm = new ConvergencePool(monsters, OriginalMap, callback); * }*/ //guidelineAlgorithm = new GuidelinePool(monsters, OriginalMap, callback, monsters.AreasManager, numberMonsters, numberItens, hordesPercentage / 100.0); innovationAlgorithm = new InnovationPool(monsters, OriginalMap, callback); convergenceAlgorithm = new ConvergencePool(monsters, OriginalMap, callback); mixAlgorithm = new MixPool(monsters, OriginalMap, new AlgorithmRunComplete(MixRunCompleteCallback)) { MaxMonsters = numberMonsters, MaxItens = numberItens, HordesPercentage = (double)hordesPercentage / 100.0, UserPercentage = (double)userPercentage / 100.0, InnovationPercentage = (double)innovationPercentage / 100.0, GuidelinePercentage = (double)guidelinePercentage / 100.0, LeverAccessibility = (double)this.LeverAccessibility / (double)total, LeverAmountHordes = (double)this.LeverAmountHordes / (double)total, LeverDanger = (double)this.LeverDanger / (double)total, LeverMaxItem = (double)this.LeverMaxItem / (double)total, LeverMaxMonster = (double)this.LeverMaxMonster / (double)total }; ThreadPool.QueueUserWorkItem(new WaitCallback(_ => { convergenceAlgorithm.Run(); })); ThreadPool.QueueUserWorkItem(new WaitCallback(_ => { innovationAlgorithm.Run(); })); ThreadPool.QueueUserWorkItem(new WaitCallback(_ => { guidelineAlgorithm.Run(); })); }