using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using HeuristicLab.Services.Optimization.ControllerService.Interfaces; using HeuristicLab.Services.Optimization.ControllerService.Model; using HeuristicLab.Services.Optimization.ControllerService.General; namespace HeuristicLab.Services.Optimization.ControllerService { [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, IgnoreExtensionDataObject = true)] public class PlaceholderControllerService : IControllerService { private IList scenarios; private ScenarioParser parser = new ScenarioParser(); private IScenarioManager hiveManager; public PlaceholderControllerService() { /*var tsp = new Model.OptimizationScenario() { Name = "Traveling Salesman Problem" }; hiveManager = new HiveScenarioManager(); tsp.InputParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Decimal, Value = new Model.DecimalValue() { Name = "BestKnownQuality", Value = 6110.0d } }); tsp.InputParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.DecimalVector ,Value = new Model.DecimalVector() { Name = "BestKnownSolution", Value = new double[]{ 0,40,38//,116,111,114,27,61,104,127,15,44,4,10,75,108,60,128,123,63,68,85,87,25,6,96,69,106,126,103,42,33,16,30,26,18,99,14,28,23,115,94,78,86,11,80,102,76,93,88,109,97,67,62,47,24,112,31,35,83,118,110,122,100,81,56,8,55,64,51,74,73,98,72,91,37,105,52,119,57,48,71,90,5,101,9,13,66,12,95,121,54,59,50,41,43,92,36,21,46,39,22,32,20,125,120,77,65,84,124,89,58,29,82,2,113,107,7,17,45,79,117,19,3,34,53,1,49,129,70 }}}); tsp.InputParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.DecimalMatrix, Value = new Model.DecimalMatrix() { Name = "Coordinates", Value = Utility.ToJagged(new double[,] { { 334.5909245845, 161.7809319139 }, { 334.5909245845, 161.7809319139 }, { 503.8741827107, 172.8741151168 } }) } }); tsp.InputParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Type, Value = new Model.TypeValue() { Name = "EvaluatorParameter", Value = "HeuristicLab.Problems.TravelingSalesman.TSPRoundedEuclideanPathEvaluator", Options = new string[] { "HeuristicLab.Problems.TravelingSalesman.TSPRoundedEuclideanPathEvaluator", "HeuristicLab.Problems.TravelingSalesman.TSPGeoPathEvaluator", "HeuristicLab.Problems.TravelingSalesman.TSPEuclideanPathEvaluator" } } }); //tsp.InputParameters.Add(new Model.Parameter() { Name = "SolutionCreator" }); tsp.InputParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Boolean, Value = new Model.BoolValue() { Name = "UseDistanceMatrix", Value = true } }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Type, Value = new Model.TypeValue() { Name = "CrossoverParameter", Value = "OrderCrossover2", Options = new string[] { "OrderCrossover2", "CosaCrossover" } } }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Integer, Value = new Model.DecimalValue() { Name = "Elites", Value = 1 } }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Integer, Value = new Model.DecimalValue() { Name = "MaximumGenerations", Value = 1000 } });//, Value = 1000}); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Percent, Value = new Model.DecimalValue() { Name = "MutationProbability", Value = 5 } });//, Value = 5}); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Type, Value = new Model.TypeValue() { Name = "Mutator", Value = "InversionManipulator", Options = new string[] { "InversionManipulator", "ScrambleManipulator" } } }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Integer, Value = new Model.DecimalValue() { Name = "PopulationSize", Value = 100 } });//, Value = 100 }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Integer, Value = new Model.DecimalValue() { Name = "Seed", Value = 100 } });//, Value = 100 }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Type, Value = new Model.TypeValue() { Name = "Selector", Value = "ProportionalSelector", Options = new string[] { "ProportionalSelector", "BestSelector" } } }); tsp.AlgorithmParameters.Items.Add(new Model.Parameter() { Type = Model.ParameterType.Boolean, Value = new Model.BoolValue() { Name = "SetSeedRandomly", Value = true } });//, Value = true }); this.scenarios = new List() { tsp };*/ //hiveManager.DispatchScenario(tsp); //hiveManager = new MockupScenarioManager(); hiveManager = new HiveScenarioManager(); scenarios = parser.Scenarios; //hiveManager.DispatchScenario(new User() { Username = "fschoeppl", Password = "fschoeppl" }, scenarios[0]); } public IEnumerable GetOptimizationScenarios() { return scenarios; } public Model.OptimizationScenario GetOptimizationScenarioByName(string name) { var scen = (from e in scenarios where e.Id == name select e).FirstOrDefault(); return scen; } public bool ScheduleOptimizationScenario(Model.User user, Model.OptimizationScenario scenario, JobExecutionDetails details) { hiveManager.DispatchScenario(user, scenario, details); return true; } public IEnumerable GetJobs(Model.User user) { return hiveManager.GetJobs(user); } public Model.Job GetJob(Model.User user, string id) { return hiveManager.GetJob(user, id); } public bool DeleteJob(Model.User user, string id) { return hiveManager.DeleteJob(user, id); } public IList GetJobResults(Model.User user, string id) { return hiveManager.GetJobResults(user, id); } public bool AddHiveScenario(User user, string scenarioXml, string scenarioMapper) { var scenario = parser.ParseScenarioFromXml(scenarioXml); if (scenario == null) { return false; } var added = hiveManager.AddScenario(user, scenario.Id, scenarioXml, scenarioMapper); if (added) scenarios.Add(scenario); return added; } public bool DeleteHiveScenario(User user, string scenarioName) { var scen = GetOptimizationScenarioByName(scenarioName); if (scen != null) { scenarios.Remove(scen); return hiveManager.DeleteScenario(user, scenarioName); } return false; } public IEnumerable GetOptimizationScenarioNames() { return (from e in scenarios select e.Id).AsEnumerable(); } public string SaveExperiment(User user, Experiment experiment) { // make sure all algorithms store their choices aswell var scenarioMap = new Dictionary(); var algos = new Stack(); foreach (var algo in experiment.Algorithm) algos.Push(algo); while (algos.Count > 0) { var algo = algos.Pop(); if (algo.ChildAlgorithms != null) foreach (var child in algo.ChildAlgorithms) algos.Push(child); if (AlgorithmHelper.HasToBeUpdated(algo)) { OptimizationScenario scenario; if (!scenarioMap.TryGetValue(algo.Name, out scenario)) { scenario = GetOptimizationScenarioByName(algo.Name); scenarioMap[algo.Name] = scenario; } AlgorithmHelper.Update(algo, scenario); } } // finally store the experiment var id = hiveManager.SaveExperiment(user, experiment); // if it has been stored, and jobdetails are present, run the job! if (id != null && experiment.JobDetails != null) { ScheduleExperiment(user, experiment.Id, experiment.JobDetails); } return id; } public IEnumerable GetExperimentNames(User user) { return hiveManager.GetExperimentNames(user); } public bool DeleteExperiment(User user, string experiment) { return hiveManager.DeleteExperiment(user, experiment); } public Job GetTasks(User u, string jobId) { return hiveManager.GetTasks(u, jobId); } public Task GetTaskData(User u, string jobId, string taskId) { return hiveManager.GetTaskData(u, jobId, taskId); } public Experiment GetExperimentByName(User user, string scenario) { return hiveManager.GetExperimentByName(user, scenario); } public bool ScheduleExperiment(User user, string experimentId, JobExecutionDetails details) { var exp = hiveManager.GetExperimentById(user, experimentId); return hiveManager.DispatchExperiment(user, exp, details); } public IEnumerable GetExperiments(User user, bool namesOnly=false) { return hiveManager.GetExperiments(user, namesOnly); } public Experiment GetExperimentById(User u, string nodeId) { return hiveManager.GetExperimentById(u, nodeId); } public string GetVisualExtension(string algorithmId) { return hiveManager.GetVisualExtension(algorithmId); } public bool AddVisualExtension(string algorithmId, string script) { return hiveManager.AddVisualExtension(algorithmId, script); } public bool DeleteVisualExtension(string algorithmId) { return hiveManager.DeleteVisualExtension(algorithmId); } } }