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