Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
     }
 }
Ejemplo n.º 4
0
        //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;
            }
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        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);
            }
        }
Ejemplo n.º 7
0
        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());
        }
Ejemplo n.º 8
0
        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);
            }
        }
Ejemplo n.º 9
0
        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;
 }
Ejemplo n.º 11
0
        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);
        }
Ejemplo n.º 12
0
        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);
            }
        }