public void HybridOptimizationFrom1000Addresses() { // Create the manager with the api key Route4MeManager route4Me = new Route4MeManager("11111111111111111111111111111111"); #region ======= Add scheduled address book locations to an user account ================================ string sAddressFile = @"Data/addresses_1000.csv"; Schedule sched0 = new Schedule("daily", false); //var csv = new CsvReader(File.OpenText("file.csv")); using (TextReader reader = File.OpenText(sAddressFile)) { var csv = new CsvReader(reader); //int iCount = 0; while (csv.Read()) { var lng = csv.GetField(0); var lat = csv.GetField(1); var alias = csv.GetField(2); var address1 = csv.GetField(3); var city = csv.GetField(4); var state = csv.GetField(5); var zip = csv.GetField(6); var phone = csv.GetField(7); //var sched_date = csv.GetField(8); var sched_mode = csv.GetField(8); var sched_enabled = csv.GetField(9); var sched_every = csv.GetField(10); var sched_weekdays = csv.GetField(11); var sched_monthly_mode = csv.GetField(12); var sched_monthly_dates = csv.GetField(13); var sched_annually_usenth = csv.GetField(14); var sched_annually_months = csv.GetField(15); var sched_nth_n = csv.GetField(16); var sched_nth_what = csv.GetField(17); string sAddress = ""; if (address1 != null) { sAddress += address1.ToString().Trim(); } if (city != null) { sAddress += ", " + city.ToString().Trim(); } if (state != null) { sAddress += ", " + state.ToString().Trim(); } if (zip != null) { sAddress += ", " + zip.ToString().Trim(); } if (sAddress == "") { continue; } AddressBookContact newLocation = new AddressBookContact(); if (lng != null) { newLocation.cached_lng = Convert.ToDouble(lng); } if (lat != null) { newLocation.cached_lat = Convert.ToDouble(lat); } if (alias != null) { newLocation.address_alias = alias.ToString().Trim(); } newLocation.address_1 = sAddress; if (phone != null) { newLocation.address_phone_number = phone.ToString().Trim(); } //newLocation.schedule = new Schedule[]{}; if (!sched0.ValidateScheduleMode(sched_mode)) { continue; } bool blNth = false; if (sched0.ValidateScheduleMonthlyMode(sched_monthly_mode)) { if (sched_monthly_mode == "nth") { blNth = true; } } if (sched0.ValidateScheduleUseNth(sched_annually_usenth)) { if (sched_annually_usenth.ToString().ToLower() == "true") { blNth = true; } } Schedule schedule = new Schedule(sched_mode.ToString(), blNth); DateTime dt = DateTime.Now; //if (schedule.ValidateScheduleMode(sched_mode)) //{ schedule.mode = sched_mode.ToString(); if (schedule.ValidateScheduleEnabled(sched_enabled)) { schedule.enabled = Convert.ToBoolean(sched_enabled); if (schedule.ValidateScheduleEvery(sched_every)) { int iEvery = Convert.ToInt32(sched_every); switch (schedule.mode) { case "daily": schedule.daily.every = iEvery; break; case "weekly": if (schedule.ValidateScheduleWeekdays(sched_weekdays)) { schedule.weekly.every = iEvery; string[] arWeekdays = sched_weekdays.Split(','); List <int> lsWeekdays = new List <int>(); for (int i = 0; i < arWeekdays.Length; i++) { lsWeekdays.Add(Convert.ToInt32(arWeekdays[i])); } schedule.weekly.weekdays = lsWeekdays.ToArray(); } break; case "monthly": if (schedule.ValidateScheduleMonthlyMode(sched_monthly_mode)) { schedule.monthly.every = iEvery; schedule.monthly.mode = sched_monthly_mode.ToString(); switch (schedule.monthly.mode) { case "dates": if (schedule.ValidateScheduleMonthDays(sched_monthly_dates)) { string[] arMonthdays = sched_monthly_dates.Split(','); List <int> lsMonthdays = new List <int>(); for (int i = 0; i < arMonthdays.Length; i++) { lsMonthdays.Add(Convert.ToInt32(arMonthdays[i])); } schedule.monthly.dates = lsMonthdays.ToArray(); } break; case "nth": if (schedule.ValidateScheduleNthN(sched_nth_n)) { schedule.monthly.nth.n = Convert.ToInt32(sched_nth_n); } if (schedule.ValidateScheduleNthWhat(sched_nth_what)) { schedule.monthly.nth.what = Convert.ToInt32(sched_nth_what); } break; } } break; case "annually": if (schedule.ValidateScheduleUseNth(sched_annually_usenth)) { schedule.annually.every = iEvery; schedule.annually.use_nth = Convert.ToBoolean(sched_annually_usenth); if (schedule.annually.use_nth) { if (schedule.ValidateScheduleNthN(sched_nth_n)) { schedule.annually.nth.n = Convert.ToInt32(sched_nth_n); } if (schedule.ValidateScheduleNthWhat(sched_nth_what)) { schedule.annually.nth.what = Convert.ToInt32(sched_nth_what); } } else { if (schedule.ValidateScheduleYearMonths(sched_annually_months)) { string[] arYearmonths = sched_annually_months.Split(','); List <int> lsMonths = new List <int>(); for (int i = 0; i < arYearmonths.Length; i++) { lsMonths.Add(Convert.ToInt32(arYearmonths[i])); } schedule.annually.months = lsMonths.ToArray(); } } } break; } } } newLocation.schedule = (new List <Schedule>() { schedule }).ToArray(); //} string errorString; AddressBookContact resultContact = route4Me.AddAddressBookContact(newLocation, out errorString); showResult(resultContact, errorString); Thread.Sleep(1000); } }; #endregion Thread.Sleep(2000); #region ======= Get Hybrid Optimization ================================ TimeSpan tsp1day = new TimeSpan(1, 0, 0, 0); List <string> lsScheduledDays = new List <string>(); DateTime curDate = DateTime.Now; for (int i = 0; i < 5; i++) { curDate += tsp1day; lsScheduledDays.Add(curDate.ToString("yyyy-MM-dd")); } //string[] ScheduledDays = new string[] { "2017-03-06", "2017-03-07", "2017-03-08", "2017-03-09", "2017-03-10" }; Address[] Depots = new Address[] { new Address { AddressString = "2017 Ambler Ave, Abilene, TX, 79603-2239", IsDepot = true, Latitude = 32.474395, Longitude = -99.7447021, CurbsideLatitude = 32.474395, CurbsideLongitude = -99.7447021 }, new Address { AddressString = "807 Ridge Rd, Alamo, TX, 78516-9596", IsDepot = true, Latitude = 26.170834, Longitude = -98.116201, CurbsideLatitude = 26.170834, CurbsideLongitude = -98.116201 }, new Address { AddressString = "1430 W Amarillo Blvd, Amarillo, TX, 79107-5505", IsDepot = true, Latitude = 35.221969, Longitude = -101.835288, CurbsideLatitude = 35.221969, CurbsideLongitude = -101.835288 }, new Address { AddressString = "3611 Ne 24Th Ave, Amarillo, TX, 79107-7242", IsDepot = true, Latitude = 35.236626, Longitude = -101.795117, CurbsideLatitude = 35.236626, CurbsideLongitude = -101.795117 }, new Address { AddressString = "1525 New York Ave, Arlington, TX, 76010-4723", IsDepot = true, Latitude = 32.720524, Longitude = -97.080195, CurbsideLatitude = 32.720524, CurbsideLongitude = -97.080195 } }; string errorString1; string errorString2; string errorString3; foreach (string ScheduledDay in lsScheduledDays) { HybridOptimizationParameters hparams = new HybridOptimizationParameters() { target_date_string = ScheduledDay, timezone_offset_minutes = -240 }; DataObject resultOptimization = route4Me.GetOHybridptimization(hparams, out errorString1); string HybridOptimizationId = ""; if (resultOptimization != null) { HybridOptimizationId = resultOptimization.OptimizationProblemId; Console.WriteLine("Hybrid optimization generating executed successfully"); Console.WriteLine("Generated hybrid optimization ID: {0}", HybridOptimizationId); } else { Console.WriteLine("Hybrid optimization generating error: {0}", errorString1); continue; } //============== Add Depot To Hybrid Optimization =============== HybridDepotParameters hDepotParams = new HybridDepotParameters() { optimization_problem_id = HybridOptimizationId, delete_old_depots = true, new_depots = new Address[] { Depots[lsScheduledDays.IndexOf(ScheduledDay)] } }; var addDepotResult = route4Me.AddDepotsToHybridOptimization(hDepotParams, out errorString3); Thread.Sleep(5000); //============== Reoptimization ================================= OptimizationParameters optimizationParameters = new OptimizationParameters() { OptimizationProblemID = HybridOptimizationId, ReOptimize = true }; DataObject finalOptimization = route4Me.UpdateOptimization(optimizationParameters, out errorString2); Console.WriteLine(""); if (finalOptimization != null) { Console.WriteLine("ReOptimization executed successfully"); Console.WriteLine("Optimization Problem ID: {0}", finalOptimization.OptimizationProblemId); Console.WriteLine("State: {0}", finalOptimization.State); } else { Console.WriteLine("ReOptimization error: {0}", errorString2); } Thread.Sleep(5000); //================================================================= } #endregion }
public void HybridOptimizationFrom1000Orders() { // Create the manager with the api key Route4MeManager route4Me = new Route4MeManager("11111111111111111111111111111111"); #region ======= Add scheduled address book locations to an user account ================================ string sAddressFile = @"Data/orders_1000.csv"; using (TextReader reader = File.OpenText(sAddressFile)) { var csv = new CsvReader(reader); //int iCount = 0; while (csv.Read()) { var lng = csv.GetField(0); var lat = csv.GetField(1); var alias = csv.GetField(2); var address1 = csv.GetField(3); var city = csv.GetField(4); var state = csv.GetField(5); var zip = csv.GetField(6); var phone = csv.GetField(7); var sched_date = csv.GetField(8); string sAddress = ""; if (address1 != null) { sAddress += address1.ToString().Trim(); } if (city != null) { sAddress += ", " + city.ToString().Trim(); } if (state != null) { sAddress += ", " + state.ToString().Trim(); } if (zip != null) { sAddress += ", " + zip.ToString().Trim(); } if (sAddress == "") { continue; } Order newOrder = new Order(); if (lng != null) { newOrder.cached_lat = Convert.ToDouble(lng); } if (lat != null) { newOrder.cached_lng = Convert.ToDouble(lat); } if (alias != null) { newOrder.address_alias = alias.ToString().Trim(); } newOrder.address_1 = sAddress; if (phone != null) { newOrder.EXT_FIELD_phone = phone.ToString().Trim(); } DateTime dt = DateTime.Now; if (sched_date != null) { if (DateTime.TryParse(sched_date.ToString(), out dt)) { dt = Convert.ToDateTime(sched_date); newOrder.day_scheduled_for_YYMMDD = dt.ToString("yyyy-MM-dd"); } } string errorString; Order resultOrder = route4Me.AddOrder(newOrder, out errorString); showResult(resultOrder, errorString); Thread.Sleep(1000); //iCount++; //if (iCount == 60) break; } }; #endregion Thread.Sleep(2000); #region ======= Get Hybrid Optimization ================================ TimeSpan tsp1day = new TimeSpan(1, 0, 0, 0); List <string> lsScheduledDays = new List <string>(); DateTime curDate = DateTime.Now; for (int i = 0; i < 5; i++) { curDate += tsp1day; lsScheduledDays.Add(curDate.ToString("yyyy-MM-dd")); } Address[] Depots = new Address[] { new Address { AddressString = "2017 Ambler Ave, Abilene, TX, 79603-2239", IsDepot = true, Latitude = 32.474395, Longitude = -99.7447021, CurbsideLatitude = 32.474395, CurbsideLongitude = -99.7447021 }, new Address { AddressString = "807 Ridge Rd, Alamo, TX, 78516-9596", IsDepot = true, Latitude = 26.170834, Longitude = -98.116201, CurbsideLatitude = 26.170834, CurbsideLongitude = -98.116201 }, new Address { AddressString = "1430 W Amarillo Blvd, Amarillo, TX, 79107-5505", IsDepot = true, Latitude = 35.221969, Longitude = -101.835288, CurbsideLatitude = 35.221969, CurbsideLongitude = -101.835288 }, new Address { AddressString = "3611 Ne 24Th Ave, Amarillo, TX, 79107-7242", IsDepot = true, Latitude = 35.236626, Longitude = -101.795117, CurbsideLatitude = 35.236626, CurbsideLongitude = -101.795117 }, new Address { AddressString = "1525 New York Ave, Arlington, TX, 76010-4723", IsDepot = true, Latitude = 32.720524, Longitude = -97.080195, CurbsideLatitude = 32.720524, CurbsideLongitude = -97.080195 } }; string errorString1; string errorString2; string errorString3; foreach (string ScheduledDay in lsScheduledDays) { HybridOptimizationParameters hparams = new HybridOptimizationParameters() { target_date_string = ScheduledDay, timezone_offset_minutes = 480 }; DataObject resultOptimization = route4Me.GetOHybridptimization(hparams, out errorString1); string HybridOptimizationId = ""; if (resultOptimization != null) { HybridOptimizationId = resultOptimization.OptimizationProblemId; Console.WriteLine("Hybrid optimization generating executed successfully"); Console.WriteLine("Generated hybrid optimization ID: {0}", HybridOptimizationId); } else { Console.WriteLine("Hybrid optimization generating error: {0}", errorString1); continue; } //============== Add Depot To Hybrid Optimization =============== HybridDepotParameters hDepotParams = new HybridDepotParameters() { optimization_problem_id = HybridOptimizationId, delete_old_depots = true, new_depots = new Address[] { Depots[lsScheduledDays.IndexOf(ScheduledDay)] } }; var addDepotResult = route4Me.AddDepotsToHybridOptimization(hDepotParams, out errorString3); Thread.Sleep(5000); //============== Reoptimization ================================= OptimizationParameters optimizationParameters = new OptimizationParameters() { OptimizationProblemID = HybridOptimizationId, ReOptimize = true }; DataObject finalOptimization = route4Me.UpdateOptimization(optimizationParameters, out errorString2); Console.WriteLine(""); if (finalOptimization != null) { Console.WriteLine("ReOptimization executed successfully"); Console.WriteLine("Optimization Problem ID: {0}", finalOptimization.OptimizationProblemId); Console.WriteLine("State: {0}", finalOptimization.State); } else { Console.WriteLine("ReOptimization error: {0}", errorString2); } Thread.Sleep(5000); //================================================================= } #endregion }