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