Esempio n. 1
0
        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);
                }));
            }
        }
Esempio n. 2
0
        /***********************************************************************************/

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