private void Window_Loaded(object sender, RoutedEventArgs e) { String problemInstance = File.ReadAllText(@"MEP-Small.json"); model = new MEPModel.MEP(); model.LoadModelString(problemInstance); btnRunAsync_Click(sender, e); }
public void run_szenario(int times, String sz, String s) { int render_every = 5120; //model evaluations //n mal laufen lassen für empirische Auswertung //(bei den direkten Heuristiken (greedy,insertion,savings nicht nötig, daher n = 1) for (int i = 0; i < times; i++) { //solange ein Prozess läuft mache nichts! while (optimizer_running) { Thread.Sleep(5000); } String problemInstance = File.ReadAllText(sz + ".json"); model = new MEPModel.MEP(); model.LoadModelString(problemInstance); scenario = sz + "_" + s + "_" + i; Console.WriteLine("Starting Szenario:" + scenario); //setze Kontext model.AllowTripContinuation = true; model.PermutateOptions = false; model.AllowUnprofitableRequests = true; model.AvgTravelSpeed = 400; model.HotelCostPerNight = -100; model.HourlyWage = -60; model.MilageAllowance = -0.1; model.RevenuePerDayOnsite = 2000; Solver.Solver so = null; switch (s) { case "Greedy": so = new GreedySolver(model); break; case "SA": so = new SimulatedAnnealingSolver(model, 10000, 1600, render_every, 64); //somit maximal 10.000*16 = 160.000 modell evaluationen! break; case "GA": so = new GeneticSolver(model, 19, 5120, 5, render_every); //somit maximal 100 * 1.600 = 160.000 modell evaluationen! break; case "Insertion": so = new NearestInsertionSolver(model); break; case "Savings": so = new SavingsSolver(model); break; } start = DateTime.Now; Start_Optimizer(so); } }
public EngineerWindow(MEP m) { InitializeComponent(); foreach (String s in m.Skills) { this.lstSkills.Items.Add(s); } foreach (Location l in m.Locations) { this.cbHomeOfficeLocation.Items.Add(l); } }
//wird vom Solver nach jedem Zwischenergebnis und mit dem Endergebnis aufgerufen: private void UpdateViewModel(Result r)//hier sollte eine kopie des modells geliefert werden! { if (!updating) { updating = true; Stopwatch sw = new Stopwatch(); sw.Start(); //für den export button soll das letzte ergebnis gespeichert werden! last_result = r; //Clear everything ClearViewModel(); //extract and set resultmodel MEP resultmodel = (MEP)r.Model; progressSolver.Value = r.Percent; int modelevaluations = r.ModelEvaluations; // resultmodel.InitModel(); resultmodel.SetSequence(r.Sequence); if (cbMinimalOutput.IsChecked == false) { String sequence = "Sequence:"; foreach (int i in r.Sequence) { sequence += "-" + i.ToString(); } mvm.Sequence = sequence; //minimalausgabe show_model(resultmodel); } int satisfied_Requests = 0; foreach (Request req in resultmodel.Requests) { if (req.SelectedOption != null) { satisfied_Requests++; } } txtOptimizerOutput.Text += modelevaluations + ";" + resultmodel.GetCost() + ";" + satisfied_Requests //verboser output: //+ sequence + Environment.NewLine; sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds + "ms to render"); updating = false; } }
public void Write(BinaryWriter writer) { writer.WriteNullTerminatedString(Track.Event); writer.Write(Track.Progress); writer.Write((byte)Track.Parameters.Count); for (int i = 0; i < Track.Parameters.Count; i++) { MEP param = Track.Parameters[i]; writer.WriteNullTerminatedString(param.Key); writer.Write(param.Value); } }
private void btnLoadModel(object sender, RoutedEventArgs e) { model = new MEPModel.MEP(); OpenFileDialog ofd = new OpenFileDialog(); ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); ofd.Filter = "Json file (*.json)|*.json"; if (ofd.ShowDialog() == true) { String problemInstance = File.ReadAllText(ofd.FileName); model.LoadModelString(problemInstance); rbGreedy.IsChecked = true; btnRunAsync_Click(sender, e); } }
private void createNewModel() { model = new MEP(); // Schedule.ItemsSource = model.Engineers; model.Skills.Add("SQL Server Admin"); model.Skills.Add("SQL Server Development"); model.Skills.Add("Windows Server"); model.Skills.Add("Data Factory"); model.Skills.Add("C# Development"); model.Skills.Add("Integration Services"); model.Skills.Add("Reporting Services"); model.Skills.Add("Azure Machine Learning"); model.Skills.Add("SQL Server on Linux"); UpdateViewModel(new GreedySolver(model).Optimize()); }
public void Read(BinaryReader reader) { Track = new AudioTrackState(); Track.Event = reader.ReadNullTerminatedString(); Track.Progress = reader.ReadInt32(); int count = reader.ReadByte(); for (int i = 0; i < count; i++) { MEP param = new MEP(); param.Key = reader.ReadNullTerminatedString(); param.Value = reader.ReadSingle(); Track.Parameters.Add(param); } }
public IQueryable <TEntity> ApplyFilter <TEntity>(IQueryable <TEntity> query) where TEntity : MessageEntity { if (!String.IsNullOrEmpty(EbmsMessageId)) { string filter = EbmsMessageId.Replace("*", ""); if (EbmsMessageId.StartsWith("*") && EbmsMessageId.EndsWith("*")) { query = query.Where(qr => qr.EbmsMessageId.Contains(filter)); } else if (EbmsMessageId.EndsWith("*")) { query = query.Where(qr => qr.EbmsMessageId.StartsWith(filter)); } else if (EbmsMessageId.StartsWith("*")) { query = query.Where(qr => qr.EbmsMessageId.EndsWith(filter)); } else { query = query.Where(qr => qr.EbmsMessageId == filter); } } if (!String.IsNullOrEmpty(EbmsRefToMessageId)) { string filter = EbmsRefToMessageId.Replace("*", ""); if (EbmsRefToMessageId.StartsWith("*") && EbmsRefToMessageId.EndsWith("*")) { query = query.Where(qr => qr.EbmsRefToMessageId.Contains(filter)); } else if (EbmsRefToMessageId.EndsWith("*")) { query = query.Where(qr => qr.EbmsRefToMessageId.StartsWith(filter)); } else if (EbmsRefToMessageId.StartsWith("*")) { query = query.Where(qr => qr.EbmsRefToMessageId.EndsWith(filter)); } else { query = query.Where(qr => qr.EbmsRefToMessageId == filter); } } if (Operation != null) { IEnumerable <string> operations = Operation.Select(op => op); query = query.Where(qr => operations.Contains(qr.Operation.ToString())); } switch (InsertionTimeType) { case DateTimeFilterType.Custom: if (InsertionTimeFrom != null && InsertionTimeTo != null) { query = query.Where(qr => qr.InsertionTime >= InsertionTimeFrom && qr.InsertionTime <= InsertionTimeTo); } else if (InsertionTimeFrom == null && InsertionTimeTo != null) { query = query.Where(qr => qr.InsertionTime <= InsertionTimeTo); } else if (InsertionTimeFrom != null && InsertionTimeTo == null) { query = query.Where(qr => qr.InsertionTime >= InsertionTimeFrom); } break; case DateTimeFilterType.Last4Hours: DateTime last4Hours = DateTime.UtcNow.AddHours(-4); query = query.Where(x => x.InsertionTime >= last4Hours); break; case DateTimeFilterType.LastDay: DateTime lastDay = DateTime.UtcNow.AddDays(-1); query = query.Where(x => x.InsertionTime >= lastDay); break; case DateTimeFilterType.LastHour: DateTime lastHour = DateTime.UtcNow.AddHours(-1); query = query.Where(x => x.InsertionTime >= lastHour); break; case DateTimeFilterType.LastMonth: DateTime lastMonth = DateTime.UtcNow.AddMonths(-1); query = query.Where(x => x.InsertionTime >= lastMonth); break; case DateTimeFilterType.LastWeek: DateTime lastWeek = DateTime.UtcNow.AddDays(-7); query = query.Where(x => x.InsertionTime >= lastWeek); break; case DateTimeFilterType.Ignore: break; default: throw new ArgumentOutOfRangeException(); } if (ModificationTimeFrom != null && ModificationTimeTo == null) { query = query.Where(qr => qr.ModificationTime >= ModificationTimeFrom); } else if (ModificationTimeFrom == null && ModificationTimeTo != null) { query = query.Where(qr => qr.ModificationTime <= ModificationTimeTo); } else if (ModificationTimeFrom != null && ModificationTimeTo != null) { query = query.Where(qr => qr.ModificationTime >= ModificationTimeFrom && qr.ModificationTime <= ModificationTimeTo); } if (MEP != null) { query = query.Where(qr => MEP.Contains(qr.MEP)); } if (EbmsMessageType != null) { query = query.Where(qr => EbmsMessageType.Contains(qr.EbmsMessageType)); } if (ContentType != null) { List <string> types = ContentType.Select(x => x == "mime" ? "multipart/related" : "application/soap+xml") .ToList(); query = query.Where(qr => types.Any(data => qr.ContentType.StartsWith(data))); } if (Status != null && Status.Any()) { List <string> statusStrings = Status.Select(status => status.ToString()).ToList(); query = query.Where(qr => statusStrings.Contains(qr.Status)); } if (!String.IsNullOrEmpty(FromParty)) { query = query.Where(x => x.FromParty == FromParty); } if (!String.IsNullOrEmpty(ToParty)) { query = query.Where(x => x.ToParty == ToParty); } if (!ShowDuplicates) { query = query.Where(x => !x.IsDuplicate); } if (!ShowTests) { query = query.Where(x => !x.IsTest); } if (!String.IsNullOrEmpty(ActionName)) { string filter = ActionName.Replace("*", ""); if (ActionName.StartsWith("*") && ActionName.EndsWith("*")) { query = query.Where(qr => qr.Action.Contains(filter)); } else if (ActionName.EndsWith("*")) { query = query.Where(qr => qr.Action.StartsWith(filter)); } else if (ActionName.StartsWith("*")) { query = query.Where(qr => qr.Action.EndsWith(filter)); } else { query = query.Where(qr => qr.Action == filter); } } if (!String.IsNullOrEmpty(Service)) { string filter = Service.Replace("*", ""); if (Service.StartsWith("*") && Service.EndsWith("*")) { query = query.Where(qr => qr.Service.Contains(filter)); } else if (Service.EndsWith("*")) { query = query.Where(qr => qr.Service.StartsWith(filter)); } else if (Service.StartsWith("*")) { query = query.Where(qr => qr.Service.EndsWith(filter)); } else { query = query.Where(qr => qr.Service == filter); } } if (!String.IsNullOrEmpty(MPC)) { string filter = MPC.Replace("*", ""); if (MPC.StartsWith("*") && MPC.EndsWith("*")) { query = query.Where(qr => qr.Mpc.Contains(filter)); } else if (MPC.EndsWith("*")) { query = query.Where(qr => qr.Mpc.StartsWith(filter)); } else if (MPC.StartsWith("*")) { query = query.Where(qr => qr.Mpc.EndsWith(filter)); } else { query = query.Where(qr => qr.Mpc == filter); } } if (Pmode != null && Pmode.Length > 0) { query = query.Where(qr => Pmode.Contains(qr.PModeId)); } return(query); }
public RequestWindow(MEP model) { InitializeComponent(); lstSkills.ItemsSource = model.Skills; }
private String getRouteDescription() { //Funktioniert derzeit nur für die Ausgabe von Ergebnissen die Gabeleinsätze erlauben! String Fahrten = ""; double total_cost = 0; double cost_per_emp; //export nur möglich wenn das letzte ergebnis != null ist! if (last_result != null) { MEP resultmodel = (MEP)last_result.Model; resultmodel.SetSequence(last_result.Sequence); if (resultmodel.AllowTripContinuation) { foreach (Engineer en in resultmodel.Engineers) { if (en.AssignedRequests.Count > 0) { cost_per_emp = 0; //erste Anreise Fahrten += en.Name + ":"; var first_request = en.AssignedRequests.Values[0]; var cost_erste_anreise = resultmodel.cost_between_request_and_home(first_request, en); Fahrten += en.HomeOffice.City + "->(" + cost_erste_anreise + ")->"; cost_per_emp += cost_erste_anreise; for (int i = 0; i < en.AssignedRequests.Count; i++) { //aktuelle einsatz beginnend mit dem ersten! var re = en.AssignedRequests.Values[i]; //Umsatz berücksichtigen cost_per_emp += re.SelectedOption.Cost; Fahrten += "(" + re.SelectedOption.Cost + ")"; //Umsatz if (i + 1 < en.AssignedRequests.Count) { var rnext = en.AssignedRequests.Values[i + 1]; foreach (Route route in en.optimalRoute_between_Options(re.SelectedOption, rnext.SelectedOption)) { cost_per_emp += route.Cost; Fahrten += route.From.City + "->(" + route.Cost + ")->"; } } } var last_request = en.AssignedRequests.Values[en.AssignedRequests.Count - 1]; //letzte Rückreise var last_request_travel_home_cost = resultmodel.cost_between_request_and_home(last_request, en); cost_per_emp += last_request_travel_home_cost; //auch die kosten der letzten Rückreise berücksichtigen! Fahrten += last_request.RequestLocation.City + "->(" + last_request_travel_home_cost + ")->" + en.HomeOffice.City; Fahrten += " Gesamt:" + cost_per_emp + Environment.NewLine; total_cost += cost_per_emp; } } } else { //Immer von Zuhause aus zum Kunden und zurück: foreach (Engineer e in resultmodel.Engineers) { cost_per_emp = 0; Fahrten += e.Name + ":"; foreach (Request re in e.AssignedRequests.Values) { Fahrten += e.HomeOffice.City + "->" + re.RequestLocation.City + "(" + re.SelectedOption.Cost + ")->"; cost_per_emp += re.SelectedOption.Cost; } Fahrten += e.HomeOffice.City + Environment.NewLine; total_cost += cost_per_emp; } } Fahrten += " Gesamt über alle Mitarbeiter:" + total_cost + Environment.NewLine; } return(Fahrten); }
private void show_model(MEP resultmodel) { mvm.Cost = "Erfolg: " + Math.Round(resultmodel.GetCost()); //visualisiere das Modell: foreach (Request req in resultmodel.Requests) { RequestViewModel rvm = new RequestViewModel(); rvm.City = req.RequestLocation.City; rvm.SkillsRequested = String.Concat(req.SkillsRequested); rvm.Duration = req.Duration; if (req.SelectedOption != null) { rvm.Startday = req.SelectedOption.Startday; } rvm.Description = req.Description; rvm.RequestLocation = ConvertToWPFLocation(req.RequestLocation); mvm.Requests.Add(rvm); } var rand = new Random(); foreach (Engineer en in resultmodel.Engineers) { var col = Color.FromRgb((byte)rand.Next(255), (byte)rand.Next(255), (byte)rand.Next(255)); var evm = new EngineerViewModel(); evm.Name = en.Name; evm.Skills = String.Concat(en.Skills); evm.EngineerLocation = ConvertToWPFLocation(en.HomeOffice); mvm.Engineers.Add(evm); var ovm = new MEPUI.OptionViewModel(); ovm.Brush = new SolidColorBrush(col); //berechne Rundreise des Engineers: if (resultmodel.AllowTripContinuation == true && en.AssignedRequests.Count > 0) { //erste anreise: ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(en.HomeOffice.Latitude, en.HomeOffice.Longitude)); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(en.AssignedRequests.Values[0].RequestLocation.Latitude, en.AssignedRequests.Values[0].RequestLocation.Longitude)); //Console.WriteLine("Erste Anreise:" + en.HomeOffice.City + " " + en.AssignedRequests.Values[0].RequestLocation.City + " Cost:" + resultmodel.cost_between_request_and_home(en.AssignedRequests.Values[0],en)); for (int i = 0; i < en.AssignedRequests.Count; i++) { Request re = en.AssignedRequests.Values[i]; // Console.WriteLine("Revenue:" + re.SelectedOption.Cost); var rvm = new RequestViewModel(); rvm.Duration = re.Duration; rvm.Startday = re.SelectedOption.Startday; rvm.City = re.RequestLocation.City; rvm.Description = re.Description; evm.AssignedRequests.Add(rvm); //ermittle Route: if (i + 1 < en.AssignedRequests.Count) { var rnext = en.AssignedRequests.Values[i + 1]; foreach (Route route in en.optimalRoute_between_Options(re.SelectedOption, rnext.SelectedOption)) { // Console.WriteLine(route.From.City + " " + route.To.City + " Cost:" + route.Cost); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(route.From.Latitude, route.From.Longitude)); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(route.To.Latitude, route.To.Longitude)); } } } //letzte Rückreise: ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(en.AssignedRequests.Values[en.AssignedRequests.Count - 1].RequestLocation.Latitude, en.AssignedRequests.Values[en.AssignedRequests.Count - 1].RequestLocation.Longitude)); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(en.HomeOffice.Latitude, en.HomeOffice.Longitude)); // Console.WriteLine("Letzte Rückreise" + en.AssignedRequests.Values[en.AssignedRequests.Count - 1].RequestLocation.City + " " + en.HomeOffice.City + " Cost:" + resultmodel.cost_between_request_and_home(en.AssignedRequests.Values[en.AssignedRequests.Count - 1], en)); mvm.Routes.Add(ovm); } else //Immer von zuhause aus zum Ziel: { foreach (Request re in en.AssignedRequests.Values) { var rvm = new RequestViewModel(); rvm.Duration = re.Duration; rvm.Startday = re.SelectedOption.Startday; rvm.City = re.RequestLocation.City; rvm.Description = re.Description; evm.AssignedRequests.Add(rvm); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(en.HomeOffice.Latitude, en.HomeOffice.Longitude)); ovm.MapLocations.Add(new Microsoft.Maps.MapControl.WPF.Location(re.RequestLocation.Latitude, re.RequestLocation.Longitude)); } mvm.Routes.Add(ovm); } } //Bug im Bing WPF Control - manueller Layout Refresh benötigt myMap.UpdateLayout(); var c = myMap.Center; c.Latitude += 0.00001; myMap.SetView(c, myMap.ZoomLevel); //zeichne Optionen: OptionGraph.Children.Clear(); if (resultmodel.Options.Count < 200) { //Zeichne Optionsgraph int request_column = 0; int option_row = 0; foreach (Request re in resultmodel.Requests) { var ui_request = new Label(); ui_request.Content = re.RequestLocation.City; ui_request.FontSize = 10; OptionGraph.Children.Add(ui_request); Canvas.SetLeft(ui_request, request_column * 110); foreach (Option o in re.Options) { var ui_option = new Label(); ui_option.Width = 100; ui_option.Height = 40; ui_option.Content = o.Id + " " + o.Description; if (o.State == Option.OptionState.Selected) { ui_option.Background = GreenBrush; } else if (o.State == Option.OptionState.Locked) { ui_option.Background = RedBrush; } else { ui_option.Background = BlackBrush; } OptionGraph.Children.Add(ui_option); Canvas.SetLeft(ui_option, request_column * 110); Canvas.SetTop(ui_option, option_row * 50 + 50); option_row += 1; } option_row = 0; request_column += 1; } } else { Label l = new Label(); l.Content = "Mehr als 200 Optionen können nicht angezeigt werden. Da die Ausgabe sehr langsam wäre."; OptionGraph.Children.Add(l); } }