Ejemplo n.º 1
0
        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();
            }
        }
Ejemplo n.º 2
0
        private static CompositionPlan UpdatePBest(this CompositionPlan compositionPlan,
                                                   DpsoConfig DpsoConfig)
        {
            compositionPlan.Cost = compositionPlan.CalculateCost(DpsoConfig.QualityAttributeWeights);

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

            return(compositionPlan);
        }
Ejemplo n.º 3
0
        public static CompositionPlan Move(this CompositionPlan compositionPlan,
                                           CompositionPlan gBest, DpsoConfig DpsoConfig, List <TaskCandidateService> taskCandidateServices)
        {
            double mut = (double)1 / DpsoConfig.Tasks.Count;

            Random r = new Random();

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

                if (rand1 < mut)
                {
                    List <WebService> webServices = taskCandidateServices
                                                    .First(t => t.Task.Equals(taskService.Task)).WebServices;

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

                    //if (taskService.WebService != webServices[randomIndex])
                    //{
                    taskService.WebService = webServices[randomIndex];
                    //}
                }
                else
                if (rand1 < DpsoConfig.Omega)
                {
                    break;
                }
                else if (rand1 < DpsoConfig.C1 + DpsoConfig.Omega)
                {
                    taskService.WebService = compositionPlan.PBest.TaskServices
                                             .First(t => t.Task.Equals(taskService.Task)).WebService;
                }
                else
                {
                    taskService.WebService = gBest.TaskServices
                                             .First(t => t.Task.Equals(taskService.Task)).WebService;
                }
            }

            compositionPlan.UpdatePBest(DpsoConfig);

            return(compositionPlan);
        }
Ejemplo n.º 4
0
        private static DpsoConfig GetDpsoConfig()
        {
            DpsoConfig dpsoConfig = new DpsoConfig()
            {
                C1         = Convert.ToDouble(AppSettings("DPSO").GetSection("C1").Value),
                C2         = Convert.ToDouble(AppSettings("DPSO").GetSection("C2").Value),
                Omega      = Convert.ToDouble(AppSettings("DPSO").GetSection("Omega").Value),
                OutputFile = AppSettings("DPSO").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(dpsoConfig);
        }