コード例 #1
0
ファイル: Program.cs プロジェクト: zhanghh0369/Leopard
        static void Main(string[] args)
        {
            List <Action> actions = new List <Action>();

            void DisplayAction(string s) => Console.WriteLine(s);

            IcaConfig  icaConfig  = GetIcaConfig();
            PsoConfig  psoConfig  = GetPsoConfig();
            DpsoConfig dpsoConfig = GetDpsoConfig();

            IRequestGenerator requestGenerator = new QwsRequestGenerator();

            Ica ica = new Ica();
            CompositionRequest icaRequest = requestGenerator.Generate(icaConfig);

            actions.Add(() => ica.Execute(icaRequest, DisplayAction));

            // Pso pso = new Pso();
            // CompositionRequest psoRequest = requestGenerator.Generate(psoConfig);
            // actions.Add(() => pso.Execute(psoRequest, DisplayAction));

            Dpso dpso = new Dpso();
            CompositionRequest dpsoRequest = requestGenerator.Generate(dpsoConfig);

//            actions.Add(() => dpso.Execute(dpsoRequest, DisplayAction));

            for (var i = 0; i < actions.Count; i++)
            {
                Console.ForegroundColor = i % 2 == 0 ? ConsoleColor.Cyan : ConsoleColor.DarkYellow;

                var a = actions[i];
                a.Invoke();
            }
        }
コード例 #2
0
ファイル: EmpireExtensions.cs プロジェクト: alics/Leopard
        public static Empire <CompositionPlan> CustomAssimilate(this Empire <CompositionPlan> empire, CompositionPlan gBest,
                                                                List <QualityAttributeWeight> attributeWeights, CompositionRequest request)
        {
            IcaConfig icaConfig = (IcaConfig)request.Config;

            foreach (CompositionPlan colony in empire.Colonies)
            {
                double revolutionRate = (double)1 / icaConfig.Tasks.Count;

                Random r = new Random();

                foreach (TaskService taskService in colony.TaskServices)
                {
                    double rand1 = (double)r.Next(0, 100) / 100;

                    if (rand1 < revolutionRate)
                    {
                        List <WebService> webServices = request.TaskCandidateServices
                                                        .First(t => t.Task.Equals(taskService.Task)).WebServices;

                        int randomIndex = r.Next(0, webServices.Count - 1);

                        taskService.WebService = webServices[randomIndex];
                    }
                    else
                    if (rand1 < icaConfig.Alpha)
                    {
                        if (taskService.WebService.Cost > empire.Imperialist.TaskServices
                            .First(t => t.Task.Equals(taskService.Task)).WebService.Cost)
                        {
                            taskService.WebService = empire.Imperialist.TaskServices
                                                     .First(t => t.Task.Equals(taskService.Task)).WebService;
                        }
                    }
                    else if (rand1 < icaConfig.Alpha + icaConfig.Beta)
                    {
                        if (taskService.WebService.Cost > colony.PBest.TaskServices
                            .First(t => t.Task.Equals(taskService.Task)).WebService.Cost)
                        {
                            taskService.WebService = colony.PBest.TaskServices
                                                     .First(t => t.Task.Equals(taskService.Task)).WebService;
                        }
                    }
                    else
                    {
                        if (taskService.WebService.Cost > gBest.TaskServices
                            .First(t => t.Task.Equals(taskService.Task)).WebService.Cost)
                        {
                            taskService.WebService = gBest.TaskServices
                                                     .First(t => t.Task.Equals(taskService.Task)).WebService;
                        }
                    }

                    colony.UpdatePBest(icaConfig);
                }
            }

            return(empire);
        }
コード例 #3
0
ファイル: CountryExtensions.cs プロジェクト: alics/Leopard
        public static CompositionPlan UpdatePBest(this CompositionPlan compositionPlan,
                                                  IcaConfig icaConfig)
        {
            compositionPlan.Cost = compositionPlan.CalculateCost(icaConfig.QualityAttributeWeights);

            if (compositionPlan.Cost < compositionPlan.PBest.Cost)
            {
                compositionPlan.PBest = compositionPlan;
            }

            return(compositionPlan);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: zhanghh0369/Leopard
        private static IcaConfig GetIcaConfig()
        {
            IcaConfig icaConfig = new IcaConfig
            {
                InitialEmpiresCount = Convert.ToInt32(AppSettings("ICA")
                                                      .GetSection("InitialEmpiresCount").Value),
                Zeta                    = Convert.ToDouble(AppSettings("ICA").GetSection("Zeta").Value),
                OutputFile              = AppSettings("ICA").GetSection("OutputFile").Value,
                Tasks                   = GetTasks(),
                DataSetFilePath         = AppSettings("DataSetFilePath").Value,
                QualityAttributeWeights = GetQualityAttributeWeights(),
                CandidatesPerTask       = Convert.ToInt32(AppSettings("CandidatesPerTask").Value),
                FileOffset              = Convert.ToInt32(AppSettings("FileOffset").Value),
                MaxIteration            = Convert.ToInt32(AppSettings("MaxIteration").Value)
            };

            return(icaConfig);
        }