diff --git a/examples/AdvancedConstraints/DriversDifferentWorkingTime.php b/examples/AdvancedConstraints/DriversDifferentWorkingTime.php new file mode 100644 index 0000000..058db25 --- /dev/null +++ b/examples/AdvancedConstraints/DriversDifferentWorkingTime.php @@ -0,0 +1,128 @@ + 'Start Depot', + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'lat' => 38.141598, + 'lng' => -80.190211 + ]) +]; + +$parameters = RouteParameters::fromArray([ + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Drivers Different Working Time Example - Single Depot, Multiple Driver '.date('Y-m-d H:i:s', time()), + 'route_date' => time() + 24 * 60 * 60, + 'route_time' => 6 * 3600, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'route_max_duration' => 8 * 60 * 60, + 'parts' => 8, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 4, + 'available_time_windows'=> [ + [ + 43200, + 72000 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 2, + 'available_time_windows'=> [ + [ + 43200, + 57600 + ] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time' => 3600 + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time' => 3600 + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setDepots($depots); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversDifferentWorkingTimeWithTerritories.php b/examples/AdvancedConstraints/DriversDifferentWorkingTimeWithTerritories.php new file mode 100644 index 0000000..6220e38 --- /dev/null +++ b/examples/AdvancedConstraints/DriversDifferentWorkingTimeWithTerritories.php @@ -0,0 +1,1092 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Drivers Different Working Time Example - Territories '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 15, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 57600 ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 72000 ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 57600 ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 72000 ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 57600 ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 100, + 'available_time_windows' => [ + [ 43200, 72000 ] + ], + 'tags' => [ + 'ZONE 03' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'alias' => '2505', + 'address' => '2505', + 'lat' => 25.767596, + 'lng' => -80.226998, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2687', + 'address' => '2687', + 'lat' => 25.786497, + 'lng' => -80.207408, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '472', + 'address' => '472', + 'lat' => 25.66043, + 'lng' => -80.417161, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1235', + 'address' => '1235', + 'lat' => 25.688111, + 'lng' => -80.456527, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2849', + 'address' => '2849', + 'lat' => 25.839934, + 'lng' => -80.189969, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '887', + 'address' => '887', + 'lat' => 25.755872, + 'lng' => -80.419184, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2584', + 'address' => '2584', + 'lat' => 25.720941, + 'lng' => -80.289537, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2750', + 'address' => '2750', + 'lat' => 25.837605, + 'lng' => -80.294638, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1018', + 'address' => '1018', + 'lat' => 25.693624, + 'lng' => -80.26164, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '714', + 'address' => '714', + 'lat' => 25.853241, + 'lng' => -80.205793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1220', + 'address' => '1220', + 'lat' => 25.463502, + 'lng' => -80.456949, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1360', + 'address' => '1360', + 'lat' => 25.712858, + 'lng' => -80.271239, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3818', + 'address' => '3818', + 'lat' => 25.900222, + 'lng' => -80.22482, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2717', + 'address' => '2717', + 'lat' => 25.894207, + 'lng' => -80.345417, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '591', + 'address' => '591', + 'lat' => 25.706562, + 'lng' => -80.412644, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2156', + 'address' => '2156', + 'lat' => 25.525801, + 'lng' => -80.401086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1339', + 'address' => '1339', + 'lat' => 25.630437, + 'lng' => -80.43103, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '797', + 'address' => '797', + 'lat' => 25.868294, + 'lng' => -80.302895, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2634', + 'address' => '2634', + 'lat' => 25.935107, + 'lng' => -80.260117, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2731', + 'address' => '2731', + 'lat' => 25.920058, + 'lng' => -80.229779, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1787', + 'address' => '1787', + 'lat' => 25.825283, + 'lng' => -80.189021, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1280', + 'address' => '1280', + 'lat' => 25.730165, + 'lng' => -80.441235, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1807', + 'address' => '1807', + 'lat' => 25.748351, + 'lng' => -80.250563, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1554', + 'address' => '1554', + 'lat' => 25.478459, + 'lng' => -80.470336, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1453', + 'address' => '1453', + 'lat' => 25.812783, + 'lng' => -80.351845, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3608', + 'address' => '3608', + 'lat' => 25.786452, + 'lng' => -80.323251, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3407', + 'address' => '3407', + 'lat' => 25.659019, + 'lng' => -80.415279, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1886', + 'address' => '1886', + 'lat' => 25.919989, + 'lng' => -80.356243, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1695', + 'address' => '1695', + 'lat' => 25.718286, + 'lng' => -80.460965, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3363', + 'address' => '3363', + 'lat' => 25.850832, + 'lng' => -80.318992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1174', + 'address' => '1174', + 'lat' => 25.685317, + 'lng' => -80.383784, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1991', + 'address' => '1991', + 'lat' => 25.933406, + 'lng' => -80.169637, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3444', + 'address' => '3444', + 'lat' => 25.883938, + 'lng' => -80.193806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2057', + 'address' => '2057', + 'lat' => 25.85603, + 'lng' => -80.187272, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1025', + 'address' => '1025', + 'lat' => 25.466222, + 'lng' => -80.420452, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1947', + 'address' => '1947', + 'lat' => 25.774612, + 'lng' => -80.382098, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3745', + 'address' => '3745', + 'lat' => 25.944004, + 'lng' => -80.150793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3633', + 'address' => '3633', + 'lat' => 25.949261, + 'lng' => -80.279658, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3591', + 'address' => '3591', + 'lat' => 25.928255, + 'lng' => -80.30407, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3491', + 'address' => '3491', + 'lat' => 25.468136, + 'lng' => -80.427913, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '566', + 'address' => '566', + 'lat' => 25.70715, + 'lng' => -80.370123, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2254', + 'address' => '2254', + 'lat' => 25.781458, + 'lng' => -80.393427, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2201', + 'address' => '2201', + 'lat' => 25.82146, + 'lng' => -80.186447, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1343', + 'address' => '1343', + 'lat' => 25.753276, + 'lng' => -80.274449, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3763', + 'address' => '3763', + 'lat' => 25.666494, + 'lng' => -80.491322, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2145', + 'address' => '2145', + 'lat' => 25.945329, + 'lng' => -80.255392, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1062', + 'address' => '1062', + 'lat' => 25.662835, + 'lng' => -80.397886, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2670', + 'address' => '2670', + 'lat' => 25.578398, + 'lng' => -80.339737, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3362', + 'address' => '3362', + 'lat' => 25.960922, + 'lng' => -80.155681, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2265', + 'address' => '2265', + 'lat' => 25.753368, + 'lng' => -80.291559, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1397', + 'address' => '1397', + 'lat' => 25.632576, + 'lng' => -80.361512, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1572', + 'address' => '1572', + 'lat' => 25.88969, + 'lng' => -80.369319, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2051', + 'address' => '2051', + 'lat' => 25.596058, + 'lng' => -80.391695, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '228', + 'address' => '228', + 'lat' => 25.73956, + 'lng' => -80.323772, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1411', + 'address' => '1411', + 'lat' => 25.695262, + 'lng' => -80.35019, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2161', + 'address' => '2161', + 'lat' => 25.879942, + 'lng' => -80.181312, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2653', + 'address' => '2653', + 'lat' => 25.897973, + 'lng' => -80.251393, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '635', + 'address' => '635', + 'lat' => 25.755448, + 'lng' => -80.345374, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '435', + 'address' => '435', + 'lat' => 25.840786, + 'lng' => -80.193978, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1898', + 'address' => '1898', + 'lat' => 25.707102, + 'lng' => -80.291837, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3540', + 'address' => '3540', + 'lat' => 25.554037, + 'lng' => -80.440758, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1448', + 'address' => '1448', + 'lat' => 25.438993, + 'lng' => -80.499711, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1508', + 'address' => '1508', + 'lat' => 25.935444, + 'lng' => -80.246957, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2114', + 'address' => '2114', + 'lat' => 25.624977, + 'lng' => -80.415332, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3168', + 'address' => '3168', + 'lat' => 25.656764, + 'lng' => -80.313604, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2296', + 'address' => '2296', + 'lat' => 25.71321, + 'lng' => -80.443086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3524', + 'address' => '3524', + 'lat' => 25.689408, + 'lng' => -80.326992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1742', + 'address' => '1742', + 'lat' => 25.68284, + 'lng' => -80.425377, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1844', + 'address' => '1844', + 'lat' => 25.718911, + 'lng' => -80.461655, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3488', + 'address' => '3488', + 'lat' => 25.702125, + 'lng' => -80.41488, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1418', + 'address' => '1418', + 'lat' => 25.597698, + 'lng' => -80.43969, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1937', + 'address' => '1937', + 'lat' => 25.716414, + 'lng' => -80.409463, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3007', + 'address' => '3007', + 'lat' => 25.56263, + 'lng' => -80.501592, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3589', + 'address' => '3589', + 'lat' => 25.877066, + 'lng' => -80.22757, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1274', + 'address' => '1274', + 'lat' => 25.888309, + 'lng' => -80.344764, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3559', + 'address' => '3559', + 'lat' => 25.672567, + 'lng' => -80.414705, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2526', + 'address' => '2526', + 'lat' => 25.507321, + 'lng' => -80.402466, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2518', + 'address' => '2518', + 'lat' => 25.632515, + 'lng' => -80.368998, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1282', + 'address' => '1282', + 'lat' => 25.771978, + 'lng' => -80.414949, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '676', + 'address' => '676', + 'lat' => 25.912758, + 'lng' => -80.22939, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1884', + 'address' => '1884', + 'lat' => 25.536208, + 'lng' => -80.386541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2412', + 'address' => '2412', + 'lat' => 25.85111, + 'lng' => -80.120576, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3742', + 'address' => '3742', + 'lat' => 25.933645, + 'lng' => -80.323814, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1331', + 'address' => '1331', + 'lat' => 25.67895, + 'lng' => -80.313754, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3100', + 'address' => '3100', + 'lat' => 25.533563, + 'lng' => -80.38402, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '655', + 'address' => '655', + 'lat' => 25.769052, + 'lng' => -80.243021, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '576', + 'address' => '576', + 'lat' => 25.764978, + 'lng' => -80.277512, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2917', + 'address' => '2917', + 'lat' => 25.654264, + 'lng' => -80.316461, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '580', + 'address' => '580', + 'lat' => 25.896584, + 'lng' => -80.185163, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2153', + 'address' => '2153', + 'lat' => 25.890803, + 'lng' => -80.157806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1892', + 'address' => '1892', + 'lat' => 25.538826, + 'lng' => -80.410054, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2509', + 'address' => '2509', + 'lat' => 25.440818, + 'lng' => -80.483541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1200', + 'address' => '1200', + 'lat' => 25.707728, + 'lng' => -80.44163, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '296', + 'address' => '296', + 'lat' => 25.851701, + 'lng' => -80.176098, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3541', + 'address' => '3541', + 'lat' => 25.462625, + 'lng' => -80.522619, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1720', + 'address' => '1720', + 'lat' => 25.92718, + 'lng' => -80.316562, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2036', + 'address' => '2036', + 'lat' => 25.670897, + 'lng' => -80.377996, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3293', + 'address' => '3293', + 'lat' => 25.897834, + 'lng' => -80.166847, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2655', + 'address' => '2655', + 'lat' => 25.522536, + 'lng' => -80.412345, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '760', + 'address' => '760', + 'lat' => 25.706278, + 'lng' => -80.255363, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1372', + 'address' => '1372', + 'lat' => 25.854665, + 'lng' => -80.219084, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '543', + 'address' => '543', + 'lat' => 25.691905, + 'lng' => -80.166846, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '734', + 'address' => '734', + 'lat' => 25.876138, + 'lng' => -80.17468, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2140', + 'address' => '2140', + 'lat' => 25.697937, + 'lng' => -80.305012, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '735', + 'address' => '735', + 'lat' => 25.738146, + 'lng' => -80.239778, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3690', + 'address' => '3690', + 'lat' => 25.610484, + 'lng' => -80.443037, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2401', + 'address' => '2401', + 'lat' => 25.864908, + 'lng' => -80.249759, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2111', + 'address' => '2111', + 'lat' => 25.470719, + 'lng' => -80.430468, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '169', + 'address' => '169', + 'lat' => 25.766635, + 'lng' => -80.229855, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1745', + 'address' => '1745', + 'lat' => 25.755992, + 'lng' => -80.245188, + 'tags' => [ + 'ZONE 01' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversSchedulesWithTerritoriesAndRetailLocation.php b/examples/AdvancedConstraints/DriversSchedulesWithTerritoriesAndRetailLocation.php new file mode 100644 index 0000000..61091ca --- /dev/null +++ b/examples/AdvancedConstraints/DriversSchedulesWithTerritoriesAndRetailLocation.php @@ -0,0 +1,1142 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Drivers Schedules - 3 Territories '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 10, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'RETAIL LOCATION', + 'address' => 'RETAIL LOCATION', + 'lat' => 25.8741751, + 'lng' => -80.1288583, + 'time' => 300 + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'RETAIL LOCATION', + 'address' => 'RETAIL LOCATION', + 'lat' => 25.8741751, + 'lng' => -80.1288583, + 'time' => 300 + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'RETAIL LOCATION', + 'address' => 'RETAIL LOCATION', + 'lat' => 25.8741751, + 'lng' => -80.1288583, + 'time' => 300 + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'RETAIL LOCATION', + 'address' => 'RETAIL LOCATION', + 'lat' => 25.8741751, + 'lng' => -80.1288583, + 'time' => 300 + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'RETAIL LOCATION', + 'address' => 'RETAIL LOCATION', + 'lat' => 25.8741751, + 'lng' => -80.1288583, + 'time' => 300 + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ 46800, 57600 ] + ], + 'tags' => [ + 'ZONE 03' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'alias' => '2505', + 'address' => '2505', + 'lat' => 25.767596, + 'lng' => -80.226998, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2687', + 'address' => '2687', + 'lat' => 25.786497, + 'lng' => -80.207408, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '472', + 'address' => '472', + 'lat' => 25.66043, + 'lng' => -80.417161, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1235', + 'address' => '1235', + 'lat' => 25.688111, + 'lng' => -80.456527, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2849', + 'address' => '2849', + 'lat' => 25.839934, + 'lng' => -80.189969, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '887', + 'address' => '887', + 'lat' => 25.755872, + 'lng' => -80.419184, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2584', + 'address' => '2584', + 'lat' => 25.720941, + 'lng' => -80.289537, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2750', + 'address' => '2750', + 'lat' => 25.837605, + 'lng' => -80.294638, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1018', + 'address' => '1018', + 'lat' => 25.693624, + 'lng' => -80.26164, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '714', + 'address' => '714', + 'lat' => 25.853241, + 'lng' => -80.205793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1220', + 'address' => '1220', + 'lat' => 25.463502, + 'lng' => -80.456949, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1360', + 'address' => '1360', + 'lat' => 25.712858, + 'lng' => -80.271239, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3818', + 'address' => '3818', + 'lat' => 25.900222, + 'lng' => -80.22482, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2717', + 'address' => '2717', + 'lat' => 25.894207, + 'lng' => -80.345417, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '591', + 'address' => '591', + 'lat' => 25.706562, + 'lng' => -80.412644, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2156', + 'address' => '2156', + 'lat' => 25.525801, + 'lng' => -80.401086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1339', + 'address' => '1339', + 'lat' => 25.630437, + 'lng' => -80.43103, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '797', + 'address' => '797', + 'lat' => 25.868294, + 'lng' => -80.302895, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2634', + 'address' => '2634', + 'lat' => 25.935107, + 'lng' => -80.260117, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2731', + 'address' => '2731', + 'lat' => 25.920058, + 'lng' => -80.229779, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1787', + 'address' => '1787', + 'lat' => 25.825283, + 'lng' => -80.189021, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1280', + 'address' => '1280', + 'lat' => 25.730165, + 'lng' => -80.441235, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1807', + 'address' => '1807', + 'lat' => 25.748351, + 'lng' => -80.250563, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1554', + 'address' => '1554', + 'lat' => 25.478459, + 'lng' => -80.470336, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1453', + 'address' => '1453', + 'lat' => 25.812783, + 'lng' => -80.351845, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3608', + 'address' => '3608', + 'lat' => 25.786452, + 'lng' => -80.323251, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3407', + 'address' => '3407', + 'lat' => 25.659019, + 'lng' => -80.415279, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1886', + 'address' => '1886', + 'lat' => 25.919989, + 'lng' => -80.356243, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1695', + 'address' => '1695', + 'lat' => 25.718286, + 'lng' => -80.460965, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3363', + 'address' => '3363', + 'lat' => 25.850832, + 'lng' => -80.318992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1174', + 'address' => '1174', + 'lat' => 25.685317, + 'lng' => -80.383784, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1991', + 'address' => '1991', + 'lat' => 25.933406, + 'lng' => -80.169637, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3444', + 'address' => '3444', + 'lat' => 25.883938, + 'lng' => -80.193806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2057', + 'address' => '2057', + 'lat' => 25.85603, + 'lng' => -80.187272, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1025', + 'address' => '1025', + 'lat' => 25.466222, + 'lng' => -80.420452, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1947', + 'address' => '1947', + 'lat' => 25.774612, + 'lng' => -80.382098, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3745', + 'address' => '3745', + 'lat' => 25.944004, + 'lng' => -80.150793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3633', + 'address' => '3633', + 'lat' => 25.949261, + 'lng' => -80.279658, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3591', + 'address' => '3591', + 'lat' => 25.928255, + 'lng' => -80.30407, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3491', + 'address' => '3491', + 'lat' => 25.468136, + 'lng' => -80.427913, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '566', + 'address' => '566', + 'lat' => 25.70715, + 'lng' => -80.370123, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2254', + 'address' => '2254', + 'lat' => 25.781458, + 'lng' => -80.393427, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2201', + 'address' => '2201', + 'lat' => 25.82146, + 'lng' => -80.186447, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1343', + 'address' => '1343', + 'lat' => 25.753276, + 'lng' => -80.274449, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3763', + 'address' => '3763', + 'lat' => 25.666494, + 'lng' => -80.491322, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2145', + 'address' => '2145', + 'lat' => 25.945329, + 'lng' => -80.255392, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1062', + 'address' => '1062', + 'lat' => 25.662835, + 'lng' => -80.397886, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2670', + 'address' => '2670', + 'lat' => 25.578398, + 'lng' => -80.339737, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3362', + 'address' => '3362', + 'lat' => 25.960922, + 'lng' => -80.155681, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2265', + 'address' => '2265', + 'lat' => 25.753368, + 'lng' => -80.291559, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1397', + 'address' => '1397', + 'lat' => 25.632576, + 'lng' => -80.361512, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1572', + 'address' => '1572', + 'lat' => 25.88969, + 'lng' => -80.369319, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2051', + 'address' => '2051', + 'lat' => 25.596058, + 'lng' => -80.391695, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '228', + 'address' => '228', + 'lat' => 25.73956, + 'lng' => -80.323772, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1411', + 'address' => '1411', + 'lat' => 25.695262, + 'lng' => -80.35019, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2161', + 'address' => '2161', + 'lat' => 25.879942, + 'lng' => -80.181312, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2653', + 'address' => '2653', + 'lat' => 25.897973, + 'lng' => -80.251393, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '635', + 'address' => '635', + 'lat' => 25.755448, + 'lng' => -80.345374, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '435', + 'address' => '435', + 'lat' => 25.840786, + 'lng' => -80.193978, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1898', + 'address' => '1898', + 'lat' => 25.707102, + 'lng' => -80.291837, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3540', + 'address' => '3540', + 'lat' => 25.554037, + 'lng' => -80.440758, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1448', + 'address' => '1448', + 'lat' => 25.438993, + 'lng' => -80.499711, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1508', + 'address' => '1508', + 'lat' => 25.935444, + 'lng' => -80.246957, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2114', + 'address' => '2114', + 'lat' => 25.624977, + 'lng' => -80.415332, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3168', + 'address' => '3168', + 'lat' => 25.656764, + 'lng' => -80.313604, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2296', + 'address' => '2296', + 'lat' => 25.71321, + 'lng' => -80.443086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3524', + 'address' => '3524', + 'lat' => 25.689408, + 'lng' => -80.326992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1742', + 'address' => '1742', + 'lat' => 25.68284, + 'lng' => -80.425377, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1844', + 'address' => '1844', + 'lat' => 25.718911, + 'lng' => -80.461655, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3488', + 'address' => '3488', + 'lat' => 25.702125, + 'lng' => -80.41488, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1418', + 'address' => '1418', + 'lat' => 25.597698, + 'lng' => -80.43969, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1937', + 'address' => '1937', + 'lat' => 25.716414, + 'lng' => -80.409463, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3007', + 'address' => '3007', + 'lat' => 25.56263, + 'lng' => -80.501592, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3589', + 'address' => '3589', + 'lat' => 25.877066, + 'lng' => -80.22757, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1274', + 'address' => '1274', + 'lat' => 25.888309, + 'lng' => -80.344764, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3559', + 'address' => '3559', + 'lat' => 25.672567, + 'lng' => -80.414705, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2526', + 'address' => '2526', + 'lat' => 25.507321, + 'lng' => -80.402466, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2518', + 'address' => '2518', + 'lat' => 25.632515, + 'lng' => -80.368998, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1282', + 'address' => '1282', + 'lat' => 25.771978, + 'lng' => -80.414949, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '676', + 'address' => '676', + 'lat' => 25.912758, + 'lng' => -80.22939, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1884', + 'address' => '1884', + 'lat' => 25.536208, + 'lng' => -80.386541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2412', + 'address' => '2412', + 'lat' => 25.85111, + 'lng' => -80.120576, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3742', + 'address' => '3742', + 'lat' => 25.933645, + 'lng' => -80.323814, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1331', + 'address' => '1331', + 'lat' => 25.67895, + 'lng' => -80.313754, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3100', + 'address' => '3100', + 'lat' => 25.533563, + 'lng' => -80.38402, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '655', + 'address' => '655', + 'lat' => 25.769052, + 'lng' => -80.243021, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '576', + 'address' => '576', + 'lat' => 25.764978, + 'lng' => -80.277512, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2917', + 'address' => '2917', + 'lat' => 25.654264, + 'lng' => -80.316461, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '580', + 'address' => '580', + 'lat' => 25.896584, + 'lng' => -80.185163, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2153', + 'address' => '2153', + 'lat' => 25.890803, + 'lng' => -80.157806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1892', + 'address' => '1892', + 'lat' => 25.538826, + 'lng' => -80.410054, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2509', + 'address' => '2509', + 'lat' => 25.440818, + 'lng' => -80.483541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1200', + 'address' => '1200', + 'lat' => 25.707728, + 'lng' => -80.44163, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '296', + 'address' => '296', + 'lat' => 25.851701, + 'lng' => -80.176098, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3541', + 'address' => '3541', + 'lat' => 25.462625, + 'lng' => -80.522619, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1720', + 'address' => '1720', + 'lat' => 25.92718, + 'lng' => -80.316562, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2036', + 'address' => '2036', + 'lat' => 25.670897, + 'lng' => -80.377996, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3293', + 'address' => '3293', + 'lat' => 25.897834, + 'lng' => -80.166847, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2655', + 'address' => '2655', + 'lat' => 25.522536, + 'lng' => -80.412345, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '760', + 'address' => '760', + 'lat' => 25.706278, + 'lng' => -80.255363, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1372', + 'address' => '1372', + 'lat' => 25.854665, + 'lng' => -80.219084, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '543', + 'address' => '543', + 'lat' => 25.691905, + 'lng' => -80.166846, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '734', + 'address' => '734', + 'lat' => 25.876138, + 'lng' => -80.17468, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2140', + 'address' => '2140', + 'lat' => 25.697937, + 'lng' => -80.305012, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '735', + 'address' => '735', + 'lat' => 25.738146, + 'lng' => -80.239778, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3690', + 'address' => '3690', + 'lat' => 25.610484, + 'lng' => -80.443037, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2401', + 'address' => '2401', + 'lat' => 25.864908, + 'lng' => -80.249759, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2111', + 'address' => '2111', + 'lat' => 25.470719, + 'lng' => -80.430468, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '169', + 'address' => '169', + 'lat' => 25.766635, + 'lng' => -80.229855, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1745', + 'address' => '1745', + 'lat' => 25.755992, + 'lng' => -80.245188, + 'tags' => [ + 'ZONE 01' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV1.php b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV1.php new file mode 100644 index 0000000..b620566 --- /dev/null +++ b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV1.php @@ -0,0 +1,1113 @@ + 'DEPOT', + 'lat' => 25.694341, + 'lng' => -80.166036 + ]) +]; + +$parameters = RouteParameters::fromArray([ + 'rt' => true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => '10 Drivers Schedules '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 10, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 50400, + 64800 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 75600 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 72000 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 75600 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 68400 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 75600 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 68400 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 79200 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 43200, + 57600 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 79200 + ] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'alias' => 'DEPOT', + 'address' => 'DEPOT', + 'is_depot' => true, + 'lat' => 25.694341, + 'lng' => -80.166036, + 'time' => 0 + ]), + Address::fromArray([ + 'alias' => '2505', + 'address' => '2505', + 'lat' => 25.767596, + 'lng' => -80.226998 + ]), + Address::fromArray([ + 'alias' => '2687', + 'address' => '2687', + 'lat' => 25.786497, + 'lng' => -80.207408 + ]), + Address::fromArray([ + 'alias' => '472', + 'address' => '472', + 'lat' => 25.66043, + 'lng' => -80.417161 + ]), + Address::fromArray([ + 'alias' => '1235', + 'address' => '1235', + 'lat' => 25.688111, + 'lng' => -80.456527 + ]), + Address::fromArray([ + 'alias' => '2849', + 'address' => '2849', + 'lat' => 25.839934, + 'lng' => -80.189969 + ]), + Address::fromArray([ + 'alias' => '887', + 'address' => '887', + 'lat' => 25.755872, + 'lng' => -80.419184 + ]), + Address::fromArray([ + 'alias' => '2584', + 'address' => '2584', + 'lat' => 25.720941, + 'lng' => -80.289537 + ]), + Address::fromArray([ + 'alias' => '2750', + 'address' => '2750', + 'lat' => 25.837605, + 'lng' => -80.294638 + ]), + Address::fromArray([ + 'alias' => '1018', + 'address' => '1018', + 'lat' => 25.693624, + 'lng' => -80.26164 + ]), + Address::fromArray([ + 'alias' => '714', + 'address' => '714', + 'lat' => 25.853241, + 'lng' => -80.205793 + ]), + Address::fromArray([ + 'alias' => '1220', + 'address' => '1220', + 'lat' => 25.463502, + 'lng' => -80.456949 + ]), + Address::fromArray([ + 'alias' => '1360', + 'address' => '1360', + 'lat' => 25.712858, + 'lng' => -80.271239 + ]), + Address::fromArray([ + 'alias' => '3818', + 'address' => '3818', + 'lat' => 25.900222, + 'lng' => -80.22482 + ]), + Address::fromArray([ + 'alias' => '2717', + 'address' => '2717', + 'lat' => 25.894207, + 'lng' => -80.345417 + ]), + Address::fromArray([ + 'alias' => '591', + 'address' => '591', + 'lat' => 25.706562, + 'lng' => -80.412644 + ]), + Address::fromArray([ + 'alias' => '2156', + 'address' => '2156', + 'lat' => 25.525801, + 'lng' => -80.401086 + ]), + Address::fromArray([ + 'alias' => '1339', + 'address' => '1339', + 'lat' => 25.630437, + 'lng' => -80.43103 + ]), + Address::fromArray([ + 'alias' => '797', + 'address' => '797', + 'lat' => 25.868294, + 'lng' => -80.302895 + ]), + Address::fromArray([ + 'alias' => '2634', + 'address' => '2634', + 'lat' => 25.935107, + 'lng' => -80.260117 + ]), + Address::fromArray([ + 'alias' => '2731', + 'address' => '2731', + 'lat' => 25.920058, + 'lng' => -80.229779 + ]), + Address::fromArray([ + 'alias' => '1787', + 'address' => '1787', + 'lat' => 25.825283, + 'lng' => -80.189021 + ]), + Address::fromArray([ + 'alias' => '1280', + 'address' => '1280', + 'lat' => 25.730165, + 'lng' => -80.441235 + ]), + Address::fromArray([ + 'alias' => '1807', + 'address' => '1807', + 'lat' => 25.748351, + 'lng' => -80.250563 + ]), + Address::fromArray([ + 'alias' => '1554', + 'address' => '1554', + 'lat' => 25.478459, + 'lng' => -80.470336 + ]), + Address::fromArray([ + 'alias' => '1453', + 'address' => '1453', + 'lat' => 25.812783, + 'lng' => -80.351845 + ]), + Address::fromArray([ + 'alias' => '3608', + 'address' => '3608', + 'lat' => 25.786452, + 'lng' => -80.323251 + ]), + Address::fromArray([ + 'alias' => '3407', + 'address' => '3407', + 'lat' => 25.659019, + 'lng' => -80.415279 + ]), + Address::fromArray([ + 'alias' => '1886', + 'address' => '1886', + 'lat' => 25.919989, + 'lng' => -80.356243 + ]), + Address::fromArray([ + 'alias' => '1695', + 'address' => '1695', + 'lat' => 25.718286, + 'lng' => -80.460965 + ]), + Address::fromArray([ + 'alias' => '3363', + 'address' => '3363', + 'lat' => 25.850832, + 'lng' => -80.318992 + ]), + Address::fromArray([ + 'alias' => '1174', + 'address' => '1174', + 'lat' => 25.685317, + 'lng' => -80.383784 + ]), + Address::fromArray([ + 'alias' => '1991', + 'address' => '1991', + 'lat' => 25.933406, + 'lng' => -80.169637 + ]), + Address::fromArray([ + 'alias' => '3444', + 'address' => '3444', + 'lat' => 25.883938, + 'lng' => -80.193806 + ]), + Address::fromArray([ + 'alias' => '2057', + 'address' => '2057', + 'lat' => 25.85603, + 'lng' => -80.187272 + ]), + Address::fromArray([ + 'alias' => '1025', + 'address' => '1025', + 'lat' => 25.466222, + 'lng' => -80.420452 + ]), + Address::fromArray([ + 'alias' => '1947', + 'address' => '1947', + 'lat' => 25.774612, + 'lng' => -80.382098 + ]), + Address::fromArray([ + 'alias' => '3745', + 'address' => '3745', + 'lat' => 25.944004, + 'lng' => -80.150793 + ]), + Address::fromArray([ + 'alias' => '3633', + 'address' => '3633', + 'lat' => 25.949261, + 'lng' => -80.279658 + ]), + Address::fromArray([ + 'alias' => '3591', + 'address' => '3591', + 'lat' => 25.928255, + 'lng' => -80.30407 + ]), + Address::fromArray([ + 'alias' => '3491', + 'address' => '3491', + 'lat' => 25.468136, + 'lng' => -80.427913 + ]), + Address::fromArray([ + 'alias' => '566', + 'address' => '566', + 'lat' => 25.70715, + 'lng' => -80.370123 + ]), + Address::fromArray([ + 'alias' => '2254', + 'address' => '2254', + 'lat' => 25.781458, + 'lng' => -80.393427 + ]), + Address::fromArray([ + 'alias' => '2201', + 'address' => '2201', + 'lat' => 25.82146, + 'lng' => -80.186447 + ]), + Address::fromArray([ + 'alias' => '1343', + 'address' => '1343', + 'lat' => 25.753276, + 'lng' => -80.274449 + ]), + Address::fromArray([ + 'alias' => '3763', + 'address' => '3763', + 'lat' => 25.666494, + 'lng' => -80.491322 + ]), + Address::fromArray([ + 'alias' => '2145', + 'address' => '2145', + 'lat' => 25.945329, + 'lng' => -80.255392 + ]), + Address::fromArray([ + 'alias' => '1062', + 'address' => '1062', + 'lat' => 25.662835, + 'lng' => -80.397886 + ]), + Address::fromArray([ + 'alias' => '2670', + 'address' => '2670', + 'lat' => 25.578398, + 'lng' => -80.339737 + ]), + Address::fromArray([ + 'alias' => '3362', + 'address' => '3362', + 'lat' => 25.960922, + 'lng' => -80.155681 + ]), + Address::fromArray([ + 'alias' => '2265', + 'address' => '2265', + 'lat' => 25.753368, + 'lng' => -80.291559 + ]), + Address::fromArray([ + 'alias' => '1397', + 'address' => '1397', + 'lat' => 25.632576, + 'lng' => -80.361512 + ]), + Address::fromArray([ + 'alias' => '1572', + 'address' => '1572', + 'lat' => 25.88969, + 'lng' => -80.369319 + ]), + Address::fromArray([ + 'alias' => '2051', + 'address' => '2051', + 'lat' => 25.596058, + 'lng' => -80.391695 + ]), + Address::fromArray([ + 'alias' => '228', + 'address' => '228', + 'lat' => 25.73956, + 'lng' => -80.323772 + ]), + Address::fromArray([ + 'alias' => '1411', + 'address' => '1411', + 'lat' => 25.695262, + 'lng' => -80.35019 + ]), + Address::fromArray([ + 'alias' => '2161', + 'address' => '2161', + 'lat' => 25.879942, + 'lng' => -80.181312 + ]), + Address::fromArray([ + 'alias' => '2653', + 'address' => '2653', + 'lat' => 25.897973, + 'lng' => -80.251393 + ]), + Address::fromArray([ + 'alias' => '635', + 'address' => '635', + 'lat' => 25.755448, + 'lng' => -80.345374 + ]), + Address::fromArray([ + 'alias' => '435', + 'address' => '435', + 'lat' => 25.840786, + 'lng' => -80.193978 + ]), + Address::fromArray([ + 'alias' => '1898', + 'address' => '1898', + 'lat' => 25.707102, + 'lng' => -80.291837 + ]), + Address::fromArray([ + 'alias' => '3540', + 'address' => '3540', + 'lat' => 25.554037, + 'lng' => -80.440758 + ]), + Address::fromArray([ + 'alias' => '1448', + 'address' => '1448', + 'lat' => 25.438993, + 'lng' => -80.499711 + ]), + Address::fromArray([ + 'alias' => '1508', + 'address' => '1508', + 'lat' => 25.935444, + 'lng' => -80.246957 + ]), + Address::fromArray([ + 'alias' => '2114', + 'address' => '2114', + 'lat' => 25.624977, + 'lng' => -80.415332 + ]), + Address::fromArray([ + 'alias' => '3168', + 'address' => '3168', + 'lat' => 25.656764, + 'lng' => -80.313604 + ]), + Address::fromArray([ + 'alias' => '2296', + 'address' => '2296', + 'lat' => 25.71321, + 'lng' => -80.443086 + ]), + Address::fromArray([ + 'alias' => '3524', + 'address' => '3524', + 'lat' => 25.689408, + 'lng' => -80.326992 + ]), + Address::fromArray([ + 'alias' => '1742', + 'address' => '1742', + 'lat' => 25.68284, + 'lng' => -80.425377 + ]), + Address::fromArray([ + 'alias' => '1844', + 'address' => '1844', + 'lat' => 25.718911, + 'lng' => -80.461655 + ]), + Address::fromArray([ + 'alias' => '3488', + 'address' => '3488', + 'lat' => 25.702125, + 'lng' => -80.41488 + ]), + Address::fromArray([ + 'alias' => '1418', + 'address' => '1418', + 'lat' => 25.597698, + 'lng' => -80.43969 + ]), + Address::fromArray([ + 'alias' => '1937', + 'address' => '1937', + 'lat' => 25.716414, + 'lng' => -80.409463 + ]), + Address::fromArray([ + 'alias' => '3007', + 'address' => '3007', + 'lat' => 25.56263, + 'lng' => -80.501592 + ]), + Address::fromArray([ + 'alias' => '3589', + 'address' => '3589', + 'lat' => 25.877066, + 'lng' => -80.22757 + ]), + Address::fromArray([ + 'alias' => '1274', + 'address' => '1274', + 'lat' => 25.888309, + 'lng' => -80.344764 + ]), + Address::fromArray([ + 'alias' => '3559', + 'address' => '3559', + 'lat' => 25.672567, + 'lng' => -80.414705 + ]), + Address::fromArray([ + 'alias' => '2526', + 'address' => '2526', + 'lat' => 25.507321, + 'lng' => -80.402466 + ]), + Address::fromArray([ + 'alias' => '2518', + 'address' => '2518', + 'lat' => 25.632515, + 'lng' => -80.368998 + ]), + Address::fromArray([ + 'alias' => '1282', + 'address' => '1282', + 'lat' => 25.771978, + 'lng' => -80.414949 + ]), + Address::fromArray([ + 'alias' => '676', + 'address' => '676', + 'lat' => 25.912758, + 'lng' => -80.22939 + ]), + Address::fromArray([ + 'alias' => '1884', + 'address' => '1884', + 'lat' => 25.536208, + 'lng' => -80.386541 + ]), + Address::fromArray([ + 'alias' => '2412', + 'address' => '2412', + 'lat' => 25.85111, + 'lng' => -80.120576 + ]), + Address::fromArray([ + 'alias' => '3742', + 'address' => '3742', + 'lat' => 25.933645, + 'lng' => -80.323814 + ]), + Address::fromArray([ + 'alias' => '1331', + 'address' => '1331', + 'lat' => 25.67895, + 'lng' => -80.313754 + ]), + Address::fromArray([ + 'alias' => '3100', + 'address' => '3100', + 'lat' => 25.533563, + 'lng' => -80.38402 + ]), + Address::fromArray([ + 'alias' => '655', + 'address' => '655', + 'lat' => 25.769052, + 'lng' => -80.243021 + ]), + Address::fromArray([ + 'alias' => '576', + 'address' => '576', + 'lat' => 25.764978, + 'lng' => -80.277512 + ]), + Address::fromArray([ + 'alias' => '2917', + 'address' => '2917', + 'lat' => 25.654264, + 'lng' => -80.316461 + ]), + Address::fromArray([ + 'alias' => '580', + 'address' => '580', + 'lat' => 25.896584, + 'lng' => -80.185163 + ]), + Address::fromArray([ + 'alias' => '2153', + 'address' => '2153', + 'lat' => 25.890803, + 'lng' => -80.157806 + ]), + Address::fromArray([ + 'alias' => '1892', + 'address' => '1892', + 'lat' => 25.538826, + 'lng' => -80.410054 + ]), + Address::fromArray([ + 'alias' => '2509', + 'address' => '2509', + 'lat' => 25.440818, + 'lng' => -80.483541 + ]), + Address::fromArray([ + 'alias' => '1200', + 'address' => '1200', + 'lat' => 25.707728, + 'lng' => -80.44163 + ]), + Address::fromArray([ + 'alias' => '296', + 'address' => '296', + 'lat' => 25.851701, + 'lng' => -80.176098 + ]), + Address::fromArray([ + 'alias' => '3541', + 'address' => '3541', + 'lat' => 25.462625, + 'lng' => -80.522619 + ]), + Address::fromArray([ + 'alias' => '1720', + 'address' => '1720', + 'lat' => 25.92718, + 'lng' => -80.316562 + ]), + Address::fromArray([ + 'alias' => '2036', + 'address' => '2036', + 'lat' => 25.670897, + 'lng' => -80.377996 + ]), + Address::fromArray([ + 'alias' => '3293', + 'address' => '3293', + 'lat' => 25.897834, + 'lng' => -80.166847 + ]), + Address::fromArray([ + 'alias' => '2655', + 'address' => '2655', + 'lat' => 25.522536, + 'lng' => -80.412345 + ]), + Address::fromArray([ + 'alias' => '760', + 'address' => '760', + 'lat' => 25.706278, + 'lng' => -80.255363 + ]), + Address::fromArray([ + 'alias' => '1372', + 'address' => '1372', + 'lat' => 25.854665, + 'lng' => -80.219084 + ]), + Address::fromArray([ + 'alias' => '543', + 'address' => '543', + 'lat' => 25.691905, + 'lng' => -80.166846 + ]), + Address::fromArray([ + 'alias' => '734', + 'address' => '734', + 'lat' => 25.876138, + 'lng' => -80.17468 + ]), + Address::fromArray([ + 'alias' => '2140', + 'address' => '2140', + 'lat' => 25.697937, + 'lng' => -80.305012 + ]), + Address::fromArray([ + 'alias' => '735', + 'address' => '735', + 'lat' => 25.738146, + 'lng' => -80.239778 + ]), + Address::fromArray([ + 'alias' => '3690', + 'address' => '3690', + 'lat' => 25.610484, + 'lng' => -80.443037 + ]), + Address::fromArray([ + 'alias' => '2401', + 'address' => '2401', + 'lat' => 25.864908, + 'lng' => -80.249759 + ]), + Address::fromArray([ + 'alias' => '2111', + 'address' => '2111', + 'lat' => 25.470719, + 'lng' => -80.430468 + ]), + Address::fromArray([ + 'alias' => '169', + 'address' => '169', + 'lat' => 25.766635, + 'lng' => -80.229855 + ]), + Address::fromArray([ + 'alias' => '1745', + 'address' => '1745', + 'lat' => 25.755992, + 'lng' => -80.245188 + ]), + Address::fromArray([ + 'alias' => '3640', + 'address' => '3640', + 'lat' => 25.717794, + 'lng' => -80.34849 + ]), + Address::fromArray([ + 'alias' => '2924', + 'address' => '2924', + 'lat' => 25.561033, + 'lng' => -80.383616 + ]), + Address::fromArray([ + 'alias' => '3723', + 'address' => '3723', + 'lat' => 25.954617, + 'lng' => -80.275544 + ]), + Address::fromArray([ + 'alias' => '3683', + 'address' => '3683', + 'lat' => 25.667635, + 'lng' => -80.451966 + ]), + Address::fromArray([ + 'alias' => '3878', + 'address' => '3878', + 'lat' => 25.573239, + 'lng' => -80.396679 + ]), + Address::fromArray([ + 'alias' => '1580', + 'address' => '1580', + 'lat' => 25.866567, + 'lng' => -80.272164 + ]), + Address::fromArray([ + 'alias' => '3514', + 'address' => '3514', + 'lat' => 25.885891, + 'lng' => -80.210434 + ]), + Address::fromArray([ + 'alias' => '1430', + 'address' => '1430', + 'lat' => 25.738665, + 'lng' => -80.340541 + ]), + Address::fromArray([ + 'alias' => '1772', + 'address' => '1772', + 'lat' => 25.834132, + 'lng' => -80.364386 + ]), + Address::fromArray([ + 'alias' => '918', + 'address' => '918', + 'lat' => 25.954939, + 'lng' => -80.267666 + ]), + Address::fromArray([ + 'alias' => '1080', + 'address' => '1080', + 'lat' => 25.619834, + 'lng' => -80.366447 + ]), + Address::fromArray([ + 'alias' => '3044', + 'address' => '3044', + 'lat' => 25.82931, + 'lng' => -80.19783 + ]), + Address::fromArray([ + 'alias' => '3644', + 'address' => '3644', + 'lat' => 25.643624, + 'lng' => -80.509277 + ]), + Address::fromArray([ + 'alias' => '2221', + 'address' => '2221', + 'lat' => 25.872052, + 'lng' => -80.33531 + ]), + Address::fromArray([ + 'alias' => '2303', + 'address' => '2303', + 'lat' => 25.808094, + 'lng' => -80.281248 + ]), + Address::fromArray([ + 'alias' => '1931', + 'address' => '1931', + 'lat' => 25.736135, + 'lng' => -80.426188 + ]), + Address::fromArray([ + 'alias' => '1328', + 'address' => '1328', + 'lat' => 25.468268, + 'lng' => -80.42194 + ]), + Address::fromArray([ + 'alias' => '671', + 'address' => '671', + 'lat' => 25.944484, + 'lng' => -80.329091 + ]), + Address::fromArray([ + 'alias' => '3409', + 'address' => '3409', + 'lat' => 25.852165, + 'lng' => -80.293438 + ]), + Address::fromArray([ + 'alias' => '796', + 'address' => '796', + 'lat' => 25.658376, + 'lng' => -80.392911 + ]), + Address::fromArray([ + 'alias' => '1262', + 'address' => '1262', + 'lat' => 25.740565, + 'lng' => -80.222564 + ]), + Address::fromArray([ + 'alias' => '1489', + 'address' => '1489', + 'lat' => 25.49048, + 'lng' => -80.41572 + ]), + Address::fromArray([ + 'alias' => '3200', + 'address' => '3200', + 'lat' => 25.462866, + 'lng' => -80.483135 + ]), + Address::fromArray([ + 'alias' => '1858', + 'address' => '1858', + 'lat' => 25.812964, + 'lng' => -80.279631 + ]), + Address::fromArray([ + 'alias' => '804', + 'address' => '804', + 'lat' => 25.558081, + 'lng' => -80.358893 + ]), + Address::fromArray([ + 'alias' => '968', + 'address' => '968', + 'lat' => 25.95048, + 'lng' => -80.329778 + ]), + Address::fromArray([ + 'alias' => '2020', + 'address' => '2020', + 'lat' => 25.677095, + 'lng' => -80.438494 + ]), + Address::fromArray([ + 'alias' => '2542', + 'address' => '2542', + 'lat' => 25.747892, + 'lng' => -80.244994 + ]), + Address::fromArray([ + 'alias' => '3124', + 'address' => '3124', + 'lat' => 25.58947, + 'lng' => -80.394781 + ]), + Address::fromArray([ + 'alias' => '3405', + 'address' => '3405', + 'lat' => 25.860687, + 'lng' => -80.198642 + ]), + Address::fromArray([ + 'alias' => '1910', + 'address' => '1910', + 'lat' => 25.747395, + 'lng' => -80.402058 + ]), + Address::fromArray([ + 'alias' => '2628', + 'address' => '2628', + 'lat' => 25.837379, + 'lng' => -80.29829 + ]), + Address::fromArray([ + 'alias' => '3911', + 'address' => '3911', + 'lat' => 25.773261, + 'lng' => -80.212652 + ]), + Address::fromArray([ + 'alias' => '1556', + 'address' => '1556', + 'lat' => 25.457798, + 'lng' => -80.483813 + ]), + Address::fromArray([ + 'alias' => '1223', + 'address' => '1223', + 'lat' => 25.696267, + 'lng' => -80.445327 + ]), + Address::fromArray([ + 'alias' => '3143', + 'address' => '3143', + 'lat' => 25.888873, + 'lng' => -80.349537 + ]), + Address::fromArray([ + 'alias' => '3652', + 'address' => '3652', + 'lat' => 25.514252, + 'lng' => -80.479673 + ]), + Address::fromArray([ + 'alias' => '633', + 'address' => '633', + 'lat' => 25.710656, + 'lng' => -80.261291 + ]), + Address::fromArray([ + 'alias' => '1966', + 'address' => '1966', + 'lat' => 25.64854, + 'lng' => -80.391705 + ]), + Address::fromArray([ + 'alias' => '1304', + 'address' => '1304', + 'lat' => 25.935256, + 'lng' => -80.176192 + ]), + Address::fromArray([ + 'alias' => '2630', + 'address' => '2630', + 'lat' => 25.87202, + 'lng' => -80.340732 + ]), + Address::fromArray([ + 'alias' => '1178', + 'address' => '1178', + 'lat' => 25.513946, + 'lng' => -80.415489 + ]), + Address::fromArray([ + 'alias' => '1392', + 'address' => '1392', + 'lat' => 25.667853, + 'lng' => -80.355043 + ]), + Address::fromArray([ + 'alias' => '3309', + 'address' => '3309', + 'lat' => 25.761921, + 'lng' => -80.368253 + ]), + Address::fromArray([ + 'alias' => '2601', + 'address' => '2601', + 'lat' => 25.85515, + 'lng' => -80.219475 + ]), + Address::fromArray([ + 'alias' => '2764', + 'address' => '2764', + 'lat' => 25.957565, + 'lng' => -80.247184 + ]), + Address::fromArray([ + 'alias' => '2211', + 'address' => '2211', + 'lat' => 25.766697, + 'lng' => -80.295361 + ]), + Address::fromArray([ + 'alias' => '286', + 'address' => '286', + 'lat' => 25.789592, + 'lng' => -80.217941 + ]), + Address::fromArray([ + 'alias' => '2308', + 'address' => '2308', + 'lat' => 25.810126, + 'lng' => -80.196814 + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setDepots($depots); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV2.php b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV2.php new file mode 100644 index 0000000..9188d92 --- /dev/null +++ b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV2.php @@ -0,0 +1,1556 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => '12 Drivers Schedules '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 12, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 50400, + 64800 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 75600 + ] + ], + 'tags' => [ + 'ZONE 04' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 72000 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 75600 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 68400 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 75600 + ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 54000, + 68400 + ] + ], + 'tags' => [ + 'ZONE 05' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 79200 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 43200, + 57600 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 57600, + 79200 + ] + ], + 'tags' => [ + 'ZONE 05' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 50400, + 64800 + ] + ], + 'tags' => [ + 'ZONE 04' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 43200, + 61200 + ] + ], + 'tags' => [ + 'ZONE 04' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'alias' => 'DEPOT', + 'address' => 'DEPOT', + 'is_depot' => true, + 'lat' => 25.694341, + 'lng' => -80.166036, + 'time' => 0 + ]), + Address::fromArray([ + 'alias' => '2505', + 'address' => '2505', + 'lat' => 25.767596, + 'lng' => -80.226998, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2687', + 'address' => '2687', + 'lat' => 25.786497, + 'lng' => -80.207408, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '472', + 'address' => '472', + 'lat' => 25.66043, + 'lng' => -80.417161, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1235', + 'address' => '1235', + 'lat' => 25.688111, + 'lng' => -80.456527, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2849', + 'address' => '2849', + 'lat' => 25.839934, + 'lng' => -80.189969, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '887', + 'address' => '887', + 'lat' => 25.755872, + 'lng' => -80.419184, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2584', + 'address' => '2584', + 'lat' => 25.720941, + 'lng' => -80.289537, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2750', + 'address' => '2750', + 'lat' => 25.837605, + 'lng' => -80.294638, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1018', + 'address' => '1018', + 'lat' => 25.693624, + 'lng' => -80.26164, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '714', + 'address' => '714', + 'lat' => 25.853241, + 'lng' => -80.205793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1220', + 'address' => '1220', + 'lat' => 25.463502, + 'lng' => -80.456949, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1360', + 'address' => '1360', + 'lat' => 25.712858, + 'lng' => -80.271239, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3818', + 'address' => '3818', + 'lat' => 25.900222, + 'lng' => -80.22482, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2717', + 'address' => '2717', + 'lat' => 25.894207, + 'lng' => -80.345417, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '591', + 'address' => '591', + 'lat' => 25.706562, + 'lng' => -80.412644, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2156', + 'address' => '2156', + 'lat' => 25.525801, + 'lng' => -80.401086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1339', + 'address' => '1339', + 'lat' => 25.630437, + 'lng' => -80.43103, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '797', + 'address' => '797', + 'lat' => 25.868294, + 'lng' => -80.302895, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2634', + 'address' => '2634', + 'lat' => 25.935107, + 'lng' => -80.260117, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2731', + 'address' => '2731', + 'lat' => 25.920058, + 'lng' => -80.229779, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1787', + 'address' => '1787', + 'lat' => 25.825283, + 'lng' => -80.189021, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1280', + 'address' => '1280', + 'lat' => 25.730165, + 'lng' => -80.441235, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1807', + 'address' => '1807', + 'lat' => 25.748351, + 'lng' => -80.250563, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1554', + 'address' => '1554', + 'lat' => 25.478459, + 'lng' => -80.470336, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1453', + 'address' => '1453', + 'lat' => 25.812783, + 'lng' => -80.351845, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3608', + 'address' => '3608', + 'lat' => 25.786452, + 'lng' => -80.323251, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3407', + 'address' => '3407', + 'lat' => 25.659019, + 'lng' => -80.415279, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1886', + 'address' => '1886', + 'lat' => 25.919989, + 'lng' => -80.356243, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1695', + 'address' => '1695', + 'lat' => 25.718286, + 'lng' => -80.460965, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3363', + 'address' => '3363', + 'lat' => 25.850832, + 'lng' => -80.318992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1174', + 'address' => '1174', + 'lat' => 25.685317, + 'lng' => -80.383784, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1991', + 'address' => '1991', + 'lat' => 25.933406, + 'lng' => -80.169637, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3444', + 'address' => '3444', + 'lat' => 25.883938, + 'lng' => -80.193806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2057', + 'address' => '2057', + 'lat' => 25.85603, + 'lng' => -80.187272, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1025', + 'address' => '1025', + 'lat' => 25.466222, + 'lng' => -80.420452, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1947', + 'address' => '1947', + 'lat' => 25.774612, + 'lng' => -80.382098, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3745', + 'address' => '3745', + 'lat' => 25.944004, + 'lng' => -80.150793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3633', + 'address' => '3633', + 'lat' => 25.949261, + 'lng' => -80.279658, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3591', + 'address' => '3591', + 'lat' => 25.928255, + 'lng' => -80.30407, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3491', + 'address' => '3491', + 'lat' => 25.468136, + 'lng' => -80.427913, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '566', + 'address' => '566', + 'lat' => 25.70715, + 'lng' => -80.370123, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2254', + 'address' => '2254', + 'lat' => 25.781458, + 'lng' => -80.393427, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2201', + 'address' => '2201', + 'lat' => 25.82146, + 'lng' => -80.186447, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1343', + 'address' => '1343', + 'lat' => 25.753276, + 'lng' => -80.274449, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3763', + 'address' => '3763', + 'lat' => 25.666494, + 'lng' => -80.491322, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2145', + 'address' => '2145', + 'lat' => 25.945329, + 'lng' => -80.255392, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1062', + 'address' => '1062', + 'lat' => 25.662835, + 'lng' => -80.397886, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2670', + 'address' => '2670', + 'lat' => 25.578398, + 'lng' => -80.339737, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3362', + 'address' => '3362', + 'lat' => 25.960922, + 'lng' => -80.155681, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2265', + 'address' => '2265', + 'lat' => 25.753368, + 'lng' => -80.291559, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1397', + 'address' => '1397', + 'lat' => 25.632576, + 'lng' => -80.361512, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '1572', + 'address' => '1572', + 'lat' => 25.88969, + 'lng' => -80.369319, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '2051', + 'address' => '2051', + 'lat' => 25.596058, + 'lng' => -80.391695, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '228', + 'address' => '228', + 'lat' => 25.73956, + 'lng' => -80.323772, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '1411', + 'address' => '1411', + 'lat' => 25.695262, + 'lng' => -80.35019, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2161', + 'address' => '2161', + 'lat' => 25.879942, + 'lng' => -80.181312, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '2653', + 'address' => '2653', + 'lat' => 25.897973, + 'lng' => -80.251393, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '635', + 'address' => '635', + 'lat' => 25.755448, + 'lng' => -80.345374, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '435', + 'address' => '435', + 'lat' => 25.840786, + 'lng' => -80.193978, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '1898', + 'address' => '1898', + 'lat' => 25.707102, + 'lng' => -80.291837, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3540', + 'address' => '3540', + 'lat' => 25.554037, + 'lng' => -80.440758, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '1448', + 'address' => '1448', + 'lat' => 25.438993, + 'lng' => -80.499711, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '1508', + 'address' => '1508', + 'lat' => 25.935444, + 'lng' => -80.246957, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2114', + 'address' => '2114', + 'lat' => 25.624977, + 'lng' => -80.415332, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3168', + 'address' => '3168', + 'lat' => 25.656764, + 'lng' => -80.313604, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2296', + 'address' => '2296', + 'lat' => 25.71321, + 'lng' => -80.443086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3524', + 'address' => '3524', + 'lat' => 25.689408, + 'lng' => -80.326992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1742', + 'address' => '1742', + 'lat' => 25.68284, + 'lng' => -80.425377, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1844', + 'address' => '1844', + 'lat' => 25.718911, + 'lng' => -80.461655, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3488', + 'address' => '3488', + 'lat' => 25.702125, + 'lng' => -80.41488, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1418', + 'address' => '1418', + 'lat' => 25.597698, + 'lng' => -80.43969, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1937', + 'address' => '1937', + 'lat' => 25.716414, + 'lng' => -80.409463, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '3007', + 'address' => '3007', + 'lat' => 25.56263, + 'lng' => -80.501592, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '3589', + 'address' => '3589', + 'lat' => 25.877066, + 'lng' => -80.22757, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1274', + 'address' => '1274', + 'lat' => 25.888309, + 'lng' => -80.344764, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '3559', + 'address' => '3559', + 'lat' => 25.672567, + 'lng' => -80.414705, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '2526', + 'address' => '2526', + 'lat' => 25.507321, + 'lng' => -80.402466, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2518', + 'address' => '2518', + 'lat' => 25.632515, + 'lng' => -80.368998, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1282', + 'address' => '1282', + 'lat' => 25.771978, + 'lng' => -80.414949, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '676', + 'address' => '676', + 'lat' => 25.912758, + 'lng' => -80.22939, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1884', + 'address' => '1884', + 'lat' => 25.536208, + 'lng' => -80.386541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2412', + 'address' => '2412', + 'lat' => 25.85111, + 'lng' => -80.120576, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '3742', + 'address' => '3742', + 'lat' => 25.933645, + 'lng' => -80.323814, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1331', + 'address' => '1331', + 'lat' => 25.67895, + 'lng' => -80.313754, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3100', + 'address' => '3100', + 'lat' => 25.533563, + 'lng' => -80.38402, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '655', + 'address' => '655', + 'lat' => 25.769052, + 'lng' => -80.243021, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '576', + 'address' => '576', + 'lat' => 25.764978, + 'lng' => -80.277512, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2917', + 'address' => '2917', + 'lat' => 25.654264, + 'lng' => -80.316461, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '580', + 'address' => '580', + 'lat' => 25.896584, + 'lng' => -80.185163, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2153', + 'address' => '2153', + 'lat' => 25.890803, + 'lng' => -80.157806, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1892', + 'address' => '1892', + 'lat' => 25.538826, + 'lng' => -80.410054, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2509', + 'address' => '2509', + 'lat' => 25.440818, + 'lng' => -80.483541, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1200', + 'address' => '1200', + 'lat' => 25.707728, + 'lng' => -80.44163, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '296', + 'address' => '296', + 'lat' => 25.851701, + 'lng' => -80.176098, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '3541', + 'address' => '3541', + 'lat' => 25.462625, + 'lng' => -80.522619, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1720', + 'address' => '1720', + 'lat' => 25.92718, + 'lng' => -80.316562, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2036', + 'address' => '2036', + 'lat' => 25.670897, + 'lng' => -80.377996, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3293', + 'address' => '3293', + 'lat' => 25.897834, + 'lng' => -80.166847, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '2655', + 'address' => '2655', + 'lat' => 25.522536, + 'lng' => -80.412345, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '760', + 'address' => '760', + 'lat' => 25.706278, + 'lng' => -80.255363, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1372', + 'address' => '1372', + 'lat' => 25.854665, + 'lng' => -80.219084, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '543', + 'address' => '543', + 'lat' => 25.691905, + 'lng' => -80.166846, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '734', + 'address' => '734', + 'lat' => 25.876138, + 'lng' => -80.17468, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '2140', + 'address' => '2140', + 'lat' => 25.697937, + 'lng' => -80.305012, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '735', + 'address' => '735', + 'lat' => 25.738146, + 'lng' => -80.239778, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3690', + 'address' => '3690', + 'lat' => 25.610484, + 'lng' => -80.443037, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '2401', + 'address' => '2401', + 'lat' => 25.864908, + 'lng' => -80.249759, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2111', + 'address' => '2111', + 'lat' => 25.470719, + 'lng' => -80.430468, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '169', + 'address' => '169', + 'lat' => 25.766635, + 'lng' => -80.229855, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1745', + 'address' => '1745', + 'lat' => 25.755992, + 'lng' => -80.245188, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '3640', + 'address' => '3640', + 'lat' => 25.717794, + 'lng' => -80.34849, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2924', + 'address' => '2924', + 'lat' => 25.561033, + 'lng' => -80.383616, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '3723', + 'address' => '3723', + 'lat' => 25.954617, + 'lng' => -80.275544, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '3683', + 'address' => '3683', + 'lat' => 25.667635, + 'lng' => -80.451966, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3878', + 'address' => '3878', + 'lat' => 25.573239, + 'lng' => -80.396679, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1580', + 'address' => '1580', + 'lat' => 25.866567, + 'lng' => -80.272164, + 'tags' => [ + 'ZONE 04' + ] + ]), + Address::fromArray([ + 'alias' => '3514', + 'address' => '3514', + 'lat' => 25.885891, + 'lng' => -80.210434, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1430', + 'address' => '1430', + 'lat' => 25.738665, + 'lng' => -80.340541, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1772', + 'address' => '1772', + 'lat' => 25.834132, + 'lng' => -80.364386, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '918', + 'address' => '918', + 'lat' => 25.954939, + 'lng' => -80.267666, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1080', + 'address' => '1080', + 'lat' => 25.619834, + 'lng' => -80.366447, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3044', + 'address' => '3044', + 'lat' => 25.82931, + 'lng' => -80.19783, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3644', + 'address' => '3644', + 'lat' => 25.643624, + 'lng' => -80.509277, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2221', + 'address' => '2221', + 'lat' => 25.872052, + 'lng' => -80.33531, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '2303', + 'address' => '2303', + 'lat' => 25.808094, + 'lng' => -80.281248, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1931', + 'address' => '1931', + 'lat' => 25.736135, + 'lng' => -80.426188, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1328', + 'address' => '1328', + 'lat' => 25.468268, + 'lng' => -80.42194, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '671', + 'address' => '671', + 'lat' => 25.944484, + 'lng' => -80.329091, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3409', + 'address' => '3409', + 'lat' => 25.852165, + 'lng' => -80.293438, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '796', + 'address' => '796', + 'lat' => 25.658376, + 'lng' => -80.392911, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1262', + 'address' => '1262', + 'lat' => 25.740565, + 'lng' => -80.222564, + 'tags' => [ + 'ZONE 05' + ] + ]), + Address::fromArray([ + 'alias' => '1489', + 'address' => '1489', + 'lat' => 25.49048, + 'lng' => -80.41572, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3200', + 'address' => '3200', + 'lat' => 25.462866, + 'lng' => -80.483135, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1858', + 'address' => '1858', + 'lat' => 25.812964, + 'lng' => -80.279631, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '804', + 'address' => '804', + 'lat' => 25.558081, + 'lng' => -80.358893, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '968', + 'address' => '968', + 'lat' => 25.95048, + 'lng' => -80.329778, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2020', + 'address' => '2020', + 'lat' => 25.677095, + 'lng' => -80.438494, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2542', + 'address' => '2542', + 'lat' => 25.747892, + 'lng' => -80.244994, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3124', + 'address' => '3124', + 'lat' => 25.58947, + 'lng' => -80.394781, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3405', + 'address' => '3405', + 'lat' => 25.860687, + 'lng' => -80.198642, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1910', + 'address' => '1910', + 'lat' => 25.747395, + 'lng' => -80.402058, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2628', + 'address' => '2628', + 'lat' => 25.837379, + 'lng' => -80.29829, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3911', + 'address' => '3911', + 'lat' => 25.773261, + 'lng' => -80.212652, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1556', + 'address' => '1556', + 'lat' => 25.457798, + 'lng' => -80.483813, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1223', + 'address' => '1223', + 'lat' => 25.696267, + 'lng' => -80.445327, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3143', + 'address' => '3143', + 'lat' => 25.888873, + 'lng' => -80.349537, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3652', + 'address' => '3652', + 'lat' => 25.514252, + 'lng' => -80.479673, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '633', + 'address' => '633', + 'lat' => 25.710656, + 'lng' => -80.261291, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1966', + 'address' => '1966', + 'lat' => 25.64854, + 'lng' => -80.391705, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1304', + 'address' => '1304', + 'lat' => 25.935256, + 'lng' => -80.176192, + 'tags' => [ + 'ZONE 03' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV3.php b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV3.php new file mode 100644 index 0000000..d589fd5 --- /dev/null +++ b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV3.php @@ -0,0 +1,1158 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Drivers Schedules - 3 Territories '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 9, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 01' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 02' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 1, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'ZONE 03' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'alias' => '2505', + 'address' => '2505', + 'lat' => 25.767596, + 'lng' => -80.226998, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2687', + 'address' => '2687', + 'lat' => 25.786497, + 'lng' => -80.207408, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '472', + 'address' => '472', + 'lat' => 25.66043, + 'lng' => -80.417161, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1235', + 'address' => '1235', + 'lat' => 25.688111, + 'lng' => -80.456527, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2849', + 'address' => '2849', + 'lat' => 25.839934, + 'lng' => -80.189969, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '887', + 'address' => '887', + 'lat' => 25.755872, + 'lng' => -80.419184, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2584', + 'address' => '2584', + 'lat' => 25.720941, + 'lng' => -80.289537, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2750', + 'address' => '2750', + 'lat' => 25.837605, + 'lng' => -80.294638, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1018', + 'address' => '1018', + 'lat' => 25.693624, + 'lng' => -80.26164, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '714', + 'address' => '714', + 'lat' => 25.853241, + 'lng' => -80.205793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1220', + 'address' => '1220', + 'lat' => 25.463502, + 'lng' => -80.456949, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1360', + 'address' => '1360', + 'lat' => 25.712858, + 'lng' => -80.271239, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3818', + 'address' => '3818', + 'lat' => 25.900222, + 'lng' => -80.22482, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2717', + 'address' => '2717', + 'lat' => 25.894207, + 'lng' => -80.345417, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '591', + 'address' => '591', + 'lat' => 25.706562, + 'lng' => -80.412644, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2156', + 'address' => '2156', + 'lat' => 25.525801, + 'lng' => -80.401086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1339', + 'address' => '1339', + 'lat' => 25.630437, + 'lng' => -80.43103, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '797', + 'address' => '797', + 'lat' => 25.868294, + 'lng' => -80.302895, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2634', + 'address' => '2634', + 'lat' => 25.935107, + 'lng' => -80.260117, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2731', + 'address' => '2731', + 'lat' => 25.920058, + 'lng' => -80.229779, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1787', + 'address' => '1787', + 'lat' => 25.825283, + 'lng' => -80.189021, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1280', + 'address' => '1280', + 'lat' => 25.730165, + 'lng' => -80.441235, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1807', + 'address' => '1807', + 'lat' => 25.748351, + 'lng' => -80.250563, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1554', + 'address' => '1554', + 'lat' => 25.478459, + 'lng' => -80.470336, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1453', + 'address' => '1453', + 'lat' => 25.812783, + 'lng' => -80.351845, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3608', + 'address' => '3608', + 'lat' => 25.786452, + 'lng' => -80.323251, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3407', + 'address' => '3407', + 'lat' => 25.659019, + 'lng' => -80.415279, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1886', + 'address' => '1886', + 'lat' => 25.919989, + 'lng' => -80.356243, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1695', + 'address' => '1695', + 'lat' => 25.718286, + 'lng' => -80.460965, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3363', + 'address' => '3363', + 'lat' => 25.850832, + 'lng' => -80.318992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1174', + 'address' => '1174', + 'lat' => 25.685317, + 'lng' => -80.383784, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1991', + 'address' => '1991', + 'lat' => 25.933406, + 'lng' => -80.169637, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3444', + 'address' => '3444', + 'lat' => 25.883938, + 'lng' => -80.193806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2057', + 'address' => '2057', + 'lat' => 25.85603, + 'lng' => -80.187272, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1025', + 'address' => '1025', + 'lat' => 25.466222, + 'lng' => -80.420452, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1947', + 'address' => '1947', + 'lat' => 25.774612, + 'lng' => -80.382098, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3745', + 'address' => '3745', + 'lat' => 25.944004, + 'lng' => -80.150793, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3633', + 'address' => '3633', + 'lat' => 25.949261, + 'lng' => -80.279658, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3591', + 'address' => '3591', + 'lat' => 25.928255, + 'lng' => -80.30407, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3491', + 'address' => '3491', + 'lat' => 25.468136, + 'lng' => -80.427913, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '566', + 'address' => '566', + 'lat' => 25.70715, + 'lng' => -80.370123, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2254', + 'address' => '2254', + 'lat' => 25.781458, + 'lng' => -80.393427, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2201', + 'address' => '2201', + 'lat' => 25.82146, + 'lng' => -80.186447, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1343', + 'address' => '1343', + 'lat' => 25.753276, + 'lng' => -80.274449, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3763', + 'address' => '3763', + 'lat' => 25.666494, + 'lng' => -80.491322, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2145', + 'address' => '2145', + 'lat' => 25.945329, + 'lng' => -80.255392, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1062', + 'address' => '1062', + 'lat' => 25.662835, + 'lng' => -80.397886, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2670', + 'address' => '2670', + 'lat' => 25.578398, + 'lng' => -80.339737, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3362', + 'address' => '3362', + 'lat' => 25.960922, + 'lng' => -80.155681, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2265', + 'address' => '2265', + 'lat' => 25.753368, + 'lng' => -80.291559, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1397', + 'address' => '1397', + 'lat' => 25.632576, + 'lng' => -80.361512, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1572', + 'address' => '1572', + 'lat' => 25.88969, + 'lng' => -80.369319, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2051', + 'address' => '2051', + 'lat' => 25.596058, + 'lng' => -80.391695, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '228', + 'address' => '228', + 'lat' => 25.73956, + 'lng' => -80.323772, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1411', + 'address' => '1411', + 'lat' => 25.695262, + 'lng' => -80.35019, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2161', + 'address' => '2161', + 'lat' => 25.879942, + 'lng' => -80.181312, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2653', + 'address' => '2653', + 'lat' => 25.897973, + 'lng' => -80.251393, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '635', + 'address' => '635', + 'lat' => 25.755448, + 'lng' => -80.345374, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '435', + 'address' => '435', + 'lat' => 25.840786, + 'lng' => -80.193978, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1898', + 'address' => '1898', + 'lat' => 25.707102, + 'lng' => -80.291837, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3540', + 'address' => '3540', + 'lat' => 25.554037, + 'lng' => -80.440758, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1448', + 'address' => '1448', + 'lat' => 25.438993, + 'lng' => -80.499711, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1508', + 'address' => '1508', + 'lat' => 25.935444, + 'lng' => -80.246957, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2114', + 'address' => '2114', + 'lat' => 25.624977, + 'lng' => -80.415332, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3168', + 'address' => '3168', + 'lat' => 25.656764, + 'lng' => -80.313604, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2296', + 'address' => '2296', + 'lat' => 25.71321, + 'lng' => -80.443086, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3524', + 'address' => '3524', + 'lat' => 25.689408, + 'lng' => -80.326992, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1742', + 'address' => '1742', + 'lat' => 25.68284, + 'lng' => -80.425377, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1844', + 'address' => '1844', + 'lat' => 25.718911, + 'lng' => -80.461655, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3488', + 'address' => '3488', + 'lat' => 25.702125, + 'lng' => -80.41488, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1418', + 'address' => '1418', + 'lat' => 25.597698, + 'lng' => -80.43969, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1937', + 'address' => '1937', + 'lat' => 25.716414, + 'lng' => -80.409463, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3007', + 'address' => '3007', + 'lat' => 25.56263, + 'lng' => -80.501592, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3589', + 'address' => '3589', + 'lat' => 25.877066, + 'lng' => -80.22757, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1274', + 'address' => '1274', + 'lat' => 25.888309, + 'lng' => -80.344764, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3559', + 'address' => '3559', + 'lat' => 25.672567, + 'lng' => -80.414705, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2526', + 'address' => '2526', + 'lat' => 25.507321, + 'lng' => -80.402466, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2518', + 'address' => '2518', + 'lat' => 25.632515, + 'lng' => -80.368998, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1282', + 'address' => '1282', + 'lat' => 25.771978, + 'lng' => -80.414949, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '676', + 'address' => '676', + 'lat' => 25.912758, + 'lng' => -80.22939, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1884', + 'address' => '1884', + 'lat' => 25.536208, + 'lng' => -80.386541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2412', + 'address' => '2412', + 'lat' => 25.85111, + 'lng' => -80.120576, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3742', + 'address' => '3742', + 'lat' => 25.933645, + 'lng' => -80.323814, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1331', + 'address' => '1331', + 'lat' => 25.67895, + 'lng' => -80.313754, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3100', + 'address' => '3100', + 'lat' => 25.533563, + 'lng' => -80.38402, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '655', + 'address' => '655', + 'lat' => 25.769052, + 'lng' => -80.243021, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '576', + 'address' => '576', + 'lat' => 25.764978, + 'lng' => -80.277512, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '2917', + 'address' => '2917', + 'lat' => 25.654264, + 'lng' => -80.316461, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '580', + 'address' => '580', + 'lat' => 25.896584, + 'lng' => -80.185163, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2153', + 'address' => '2153', + 'lat' => 25.890803, + 'lng' => -80.157806, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '1892', + 'address' => '1892', + 'lat' => 25.538826, + 'lng' => -80.410054, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2509', + 'address' => '2509', + 'lat' => 25.440818, + 'lng' => -80.483541, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1200', + 'address' => '1200', + 'lat' => 25.707728, + 'lng' => -80.44163, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '296', + 'address' => '296', + 'lat' => 25.851701, + 'lng' => -80.176098, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '3541', + 'address' => '3541', + 'lat' => 25.462625, + 'lng' => -80.522619, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '1720', + 'address' => '1720', + 'lat' => 25.92718, + 'lng' => -80.316562, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2036', + 'address' => '2036', + 'lat' => 25.670897, + 'lng' => -80.377996, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '3293', + 'address' => '3293', + 'lat' => 25.897834, + 'lng' => -80.166847, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2655', + 'address' => '2655', + 'lat' => 25.522536, + 'lng' => -80.412345, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '760', + 'address' => '760', + 'lat' => 25.706278, + 'lng' => -80.255363, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1372', + 'address' => '1372', + 'lat' => 25.854665, + 'lng' => -80.219084, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '543', + 'address' => '543', + 'lat' => 25.691905, + 'lng' => -80.166846, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '734', + 'address' => '734', + 'lat' => 25.876138, + 'lng' => -80.17468, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2140', + 'address' => '2140', + 'lat' => 25.697937, + 'lng' => -80.305012, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '735', + 'address' => '735', + 'lat' => 25.738146, + 'lng' => -80.239778, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3690', + 'address' => '3690', + 'lat' => 25.610484, + 'lng' => -80.443037, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '2401', + 'address' => '2401', + 'lat' => 25.864908, + 'lng' => -80.249759, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'alias' => '2111', + 'address' => '2111', + 'lat' => 25.470719, + 'lng' => -80.430468, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'alias' => '169', + 'address' => '169', + 'lat' => 25.766635, + 'lng' => -80.229855, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '1745', + 'address' => '1745', + 'lat' => 25.755992, + 'lng' => -80.245188, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'alias' => '3640', + 'address' => '3640', + 'lat' => 25.717794, + 'lng' => -80.34849, + 'tags' => [ + 'ZONE 01' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV4.php b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV4.php new file mode 100644 index 0000000..b38cd16 --- /dev/null +++ b/examples/AdvancedConstraints/DriversScheduleswithTerritoriesV4.php @@ -0,0 +1,1078 @@ +getUsers(); + +if ($response==NULL || !isset($response['results']) || sizeof($response['results'])<3) { + echo "Cannot retrieve 3 members"; + return; +} + +$parameters = RouteParameters::fromArray([ + 'rt' => true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Drivers Schedules - 3 Territories '.date('Y-m-d H:i:s', time()), + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'parts' => 9, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'available_time_windows' => [ + [ + 25200, + 75000 + ] + ], + 'route4me_members_id' => [ + $response['results'][0]['member_id'], + $response['results'][1]['member_id'], + $response['results'][2]['member_id'] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 500, + 'available_time_windows' => [ + [ + 45200, + 85000 + ] + ], + 'route4me_members_id' => [ + $response['results'][0]['member_id'], + $response['results'][1]['member_id'], + $response['results'][2]['member_id'] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => 'DEPOT', + 'is_depot' => true, + 'lat' => 25.723025, + 'lng' => -80.452883, + 'time' => 0 + ]), + Address::fromArray([ + 'address' => '2158', + 'is_depot' => false, + 'lat' => 25.603049, + 'lng' => -80.348022, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '253', + 'is_depot' => false, + 'lat' => 25.618737, + 'lng' => -80.329138, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1527', + 'is_depot' => false, + 'lat' => 25.660645, + 'lng' => -80.284289, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1889', + 'is_depot' => false, + 'lat' => 25.816771, + 'lng' => -80.265282, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3998', + 'is_depot' => false, + 'lat' => 25.830834, + 'lng' => -80.336474, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1988', + 'is_depot' => false, + 'lat' => 25.934509, + 'lng' => -80.216283, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3566', + 'is_depot' => false, + 'lat' => 25.826221, + 'lng' => -80.247753, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2659', + 'is_depot' => false, + 'lat' => 25.60218, + 'lng' => -80.384538, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '2477', + 'is_depot' => false, + 'lat' => 25.679245, + 'lng' => -80.281254, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3968', + 'is_depot' => false, + 'lat' => 25.655636, + 'lng' => -80.350484, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1700', + 'is_depot' => false, + 'lat' => 25.871786, + 'lng' => -80.341298, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1804', + 'is_depot' => false, + 'lat' => 25.690688, + 'lng' => -80.318216, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '209', + 'is_depot' => false, + 'lat' => 25.893571, + 'lng' => -80.20119, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '834', + 'is_depot' => false, + 'lat' => 25.951618, + 'lng' => -80.29993, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1530', + 'is_depot' => false, + 'lat' => 25.818694, + 'lng' => -80.354931, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1696', + 'is_depot' => false, + 'lat' => 25.748019, + 'lng' => -80.243968, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1596', + 'is_depot' => false, + 'lat' => 25.834085, + 'lng' => -80.193554, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3563', + 'is_depot' => false, + 'lat' => 25.690451, + 'lng' => -80.272227, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3622', + 'is_depot' => false, + 'lat' => 25.602187, + 'lng' => -80.411931, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1805', + 'is_depot' => false, + 'lat' => 25.780564, + 'lng' => -80.415264, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1655', + 'is_depot' => false, + 'lat' => 25.779567, + 'lng' => -80.356258, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1533', + 'is_depot' => false, + 'lat' => 25.459839, + 'lng' => -80.44416, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '269', + 'is_depot' => false, + 'lat' => 25.777716, + 'lng' => -80.25451, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '1238', + 'is_depot' => false, + 'lat' => 25.821602, + 'lng' => -80.12694, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3312', + 'is_depot' => false, + 'lat' => 25.894716, + 'lng' => -80.33056, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3989', + 'is_depot' => false, + 'lat' => 25.553594, + 'lng' => -80.374832, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '457', + 'is_depot' => false, + 'lat' => 25.636562, + 'lng' => -80.451262, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3105', + 'is_depot' => false, + 'lat' => 25.737308, + 'lng' => -80.43438, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3317', + 'is_depot' => false, + 'lat' => 25.752353, + 'lng' => -80.215284, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3589', + 'is_depot' => false, + 'lat' => 25.877066, + 'lng' => -80.22757, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3313', + 'is_depot' => false, + 'lat' => 25.93445, + 'lng' => -80.257547, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '385', + 'is_depot' => false, + 'lat' => 25.902516, + 'lng' => -80.254678, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2601', + 'is_depot' => false, + 'lat' => 25.85515, + 'lng' => -80.219475, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '602', + 'is_depot' => false, + 'lat' => 25.513304, + 'lng' => -80.387233, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '2710', + 'is_depot' => false, + 'lat' => 25.626475, + 'lng' => -80.428484, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1187', + 'is_depot' => false, + 'lat' => 25.781259, + 'lng' => -80.402599, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2155', + 'is_depot' => false, + 'lat' => 25.760206, + 'lng' => -80.330144, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '990', + 'is_depot' => false, + 'lat' => 25.9182, + 'lng' => -80.352967, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2810', + 'is_depot' => false, + 'lat' => 25.763907, + 'lng' => -80.293502, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3294', + 'is_depot' => false, + 'lat' => 25.576745, + 'lng' => -80.380201, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3578', + 'is_depot' => false, + 'lat' => 25.441741, + 'lng' => -80.454027, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1040', + 'is_depot' => false, + 'lat' => 25.741545, + 'lng' => -80.320633, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2184', + 'is_depot' => false, + 'lat' => 25.769002, + 'lng' => -80.404676, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '842', + 'is_depot' => false, + 'lat' => 25.705431, + 'lng' => -80.398938, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1668', + 'is_depot' => false, + 'lat' => 25.770751, + 'lng' => -80.21817, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2603', + 'is_depot' => false, + 'lat' => 25.660366, + 'lng' => -80.376896, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1304', + 'is_depot' => false, + 'lat' => 25.935256, + 'lng' => -80.176192, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3281', + 'is_depot' => false, + 'lat' => 25.962562, + 'lng' => -80.250286, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2855', + 'is_depot' => false, + 'lat' => 25.781819, + 'lng' => -80.235649, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2518', + 'is_depot' => false, + 'lat' => 25.632515, + 'lng' => -80.368998, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '46', + 'is_depot' => false, + 'lat' => 25.741641, + 'lng' => -80.221332, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3185', + 'is_depot' => false, + 'lat' => 25.945872, + 'lng' => -80.310623, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3309', + 'is_depot' => false, + 'lat' => 25.761921, + 'lng' => -80.368253, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2586', + 'is_depot' => false, + 'lat' => 25.792323, + 'lng' => -80.336024, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '237', + 'is_depot' => false, + 'lat' => 25.749872, + 'lng' => -80.393815, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '2192', + 'is_depot' => false, + 'lat' => 25.94228, + 'lng' => -80.174436, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2887', + 'is_depot' => false, + 'lat' => 25.753024, + 'lng' => -80.232491, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3485', + 'is_depot' => false, + 'lat' => 25.547749, + 'lng' => -80.375777, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3832', + 'is_depot' => false, + 'lat' => 25.489671, + 'lng' => -80.419657, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1393', + 'is_depot' => false, + 'lat' => 25.872401, + 'lng' => -80.295227, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '781', + 'is_depot' => false, + 'lat' => 25.912158, + 'lng' => -80.204096, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2165', + 'is_depot' => false, + 'lat' => 25.745813, + 'lng' => -80.275891, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '537', + 'is_depot' => false, + 'lat' => 25.843267, + 'lng' => -80.373141, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '235', + 'is_depot' => false, + 'lat' => 25.877239, + 'lng' => -80.222824, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1175', + 'is_depot' => false, + 'lat' => 25.924446, + 'lng' => -80.162018, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2235', + 'is_depot' => false, + 'lat' => 25.850434, + 'lng' => -80.183362, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2775', + 'is_depot' => false, + 'lat' => 25.647769, + 'lng' => -80.410684, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1556', + 'is_depot' => false, + 'lat' => 25.457798, + 'lng' => -80.483813, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3233', + 'is_depot' => false, + 'lat' => 25.593026, + 'lng' => -80.382412, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3534', + 'is_depot' => false, + 'lat' => 25.867923, + 'lng' => -80.24087, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3205', + 'is_depot' => false, + 'lat' => 25.656392, + 'lng' => -80.291358, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '2893', + 'is_depot' => false, + 'lat' => 25.867024, + 'lng' => -80.201303, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1555', + 'is_depot' => false, + 'lat' => 25.776622, + 'lng' => -80.415111, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3218', + 'is_depot' => false, + 'lat' => 25.832436, + 'lng' => -80.280374, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '899', + 'is_depot' => false, + 'lat' => 25.855764, + 'lng' => -80.187256, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1027', + 'is_depot' => false, + 'lat' => 25.735087, + 'lng' => -80.259917, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3448', + 'is_depot' => false, + 'lat' => 25.84728, + 'lng' => -80.266024, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '884', + 'is_depot' => false, + 'lat' => 25.480335, + 'lng' => -80.458004, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '448', + 'is_depot' => false, + 'lat' => 25.684473, + 'lng' => -80.451831, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3643', + 'is_depot' => false, + 'lat' => 25.677524, + 'lng' => -80.425454, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1952', + 'is_depot' => false, + 'lat' => 25.754493, + 'lng' => -80.342664, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3507', + 'is_depot' => false, + 'lat' => 25.874399, + 'lng' => -80.345727, + 'time' => 300, + 'tags' => [ + 'ZONE 02' + ] + ]), + Address::fromArray([ + 'address' => '3520', + 'is_depot' => false, + 'lat' => 25.483806, + 'lng' => -80.428498, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1611', + 'is_depot' => false, + 'lat' => 25.713302, + 'lng' => -80.440269, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1402', + 'is_depot' => false, + 'lat' => 25.72308, + 'lng' => -80.444812, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1211', + 'is_depot' => false, + 'lat' => 25.699226, + 'lng' => -80.422237, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1161', + 'is_depot' => false, + 'lat' => 25.835215, + 'lng' => -80.252216, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1274', + 'is_depot' => false, + 'lat' => 25.888309, + 'lng' => -80.344764, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '1341', + 'is_depot' => false, + 'lat' => 25.716966, + 'lng' => -80.438179, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '2946', + 'is_depot' => false, + 'lat' => 25.530972, + 'lng' => -80.448924, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '813', + 'is_depot' => false, + 'lat' => 25.488095, + 'lng' => -80.450334, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '3862', + 'is_depot' => false, + 'lat' => 25.954786, + 'lng' => -80.16335, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '759', + 'is_depot' => false, + 'lat' => 25.555122, + 'lng' => -80.335284, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '52', + 'is_depot' => false, + 'lat' => 25.927916, + 'lng' => -80.268189, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '909', + 'is_depot' => false, + 'lat' => 25.832815, + 'lng' => -80.217156, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '2768', + 'is_depot' => false, + 'lat' => 25.835259, + 'lng' => -80.223997, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3967', + 'is_depot' => false, + 'lat' => 25.630732, + 'lng' => -80.366065, + 'time' => 300, + 'tags' => [ + 'ZONE 01' + ] + ]), + Address::fromArray([ + 'address' => '1974', + 'is_depot' => false, + 'lat' => 25.931024, + 'lng' => -80.217991, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]), + Address::fromArray([ + 'address' => '3147', + 'is_depot' => false, + 'lat' => 25.921095, + 'lng' => -80.261839, + 'time' => 300, + 'tags' => [ + 'ZONE 03' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); + diff --git a/examples/AdvancedConstraints/DriversSkills.php b/examples/AdvancedConstraints/DriversSkills.php new file mode 100644 index 0000000..feed02e --- /dev/null +++ b/examples/AdvancedConstraints/DriversSkills.php @@ -0,0 +1,182 @@ +getUsers(); + +if ($response==NULL || !isset($response['results']) || sizeof($response['results'])<3) { + echo "Cannot retrieve 3 members"; + return; +} + +$parameters = RouteParameters::fromArray([ + 'rt' => true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Automatic Driver Skills Example - SDMD '.date('Y-m-d H:i:s', time()), + 'route_time' => 0, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'vehicle_capacity' => 100, + 'vehicle_max_distance_mi' => 10000, + 'route_max_duration' => 86400, + 'parts' => 20, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'available_time_windows' => [ + [ + 25200, + 75000 + ] + ], + 'route4me_members_id' => [ + $response['results'][0]['member_id'], + $response['results'][1]['member_id'], + $response['results'][2]['member_id'] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 500, + 'available_time_windows' => [ + [ + 45200, + 85000 + ] + ], + 'route4me_members_id' => [ + $response['results'][0]['member_id'], + $response['results'][1]['member_id'], + $response['results'][2]['member_id'] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'is_depot' => TRUE, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300, + 'tags' => [ + 'Class A CDL' + ] + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300, + 'tags' => [ + 'Class A CDL' + ] + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300, + 'tags' => [ + 'Class A CDL' + ] + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300, + 'tags' => [ + 'Class A CDL' + ] + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'Class B CDL' + ] + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'Class B CDL' + ] + ]), + Address::fromArray([ + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'Class B CDL' + ] + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time_window_start' => 62000, + 'time_window_end' => 85000, + 'time' => 300, + 'tags' => [ + 'Class B CDL' + ] + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time_window_start' => 62000, + 'time_window_end' => 85000, + 'time' => 300, + 'tags' => [ + 'Class B CDL' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/DriversTimeShift.php b/examples/AdvancedConstraints/DriversTimeShift.php new file mode 100644 index 0000000..f8c2f71 --- /dev/null +++ b/examples/AdvancedConstraints/DriversTimeShift.php @@ -0,0 +1,172 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Driver Shift Example - SDMD '.date('Y-m-d H:i:s', time()), + 'route_time' => 0, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'vehicle_capacity' => 100, + 'vehicle_max_distance_mi' => 10000, + 'route_max_duration' => 86400, + 'parts' => 20, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ 25200, 75000 ] + ], + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 500, + 'members_count' => 6, + 'available_time_windows' => [ + [ 45200, 55000 ], + [ 62000, 85000 ] + ], + 'tags' => [ + 'TAG003' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'is_depot' => true, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time_window_start' => 45200, + 'time_window_end' => 55000, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time_window_start' => 62000, + 'time_window_end' => 85000, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time_window_start' => 62000, + 'time_window_end' => 85000, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/OptimizationUsingTerritoriesAddresses.php b/examples/AdvancedConstraints/OptimizationUsingTerritoriesAddresses.php new file mode 100644 index 0000000..d6f17d1 --- /dev/null +++ b/examples/AdvancedConstraints/OptimizationUsingTerritoriesAddresses.php @@ -0,0 +1,327 @@ + true, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Single Depot, Multiple Driver - 3 Territories IDs '.date('Y-m-d H:i:s', time()), + 'route_time' => 46800, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 3, + 'available_time_windows' => [ + [ + 46800, + 57600 + ] + ], + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 4, + 'available_time_windows' => [ + [ + 46800, + 61200 + ] + ], + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'members_count' => 3, + 'available_time_windows' => [ + [ + 46800, + 64800 + ] + ], + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'contact_id' => 39572676, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 39581376, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 39581377, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 78214429, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 78214430, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79640463, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79640464, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686339, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686340, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686342, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686343, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686344, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686345, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686346, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79799829, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 80186392, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 80186404, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 80189905, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 80189907, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 80281002, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 81764287, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 81764288, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 81827204, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 82206385, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 82207302, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080734, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080735, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080736, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080738, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080740, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 53080742, + 'tags' => [ + 'A34BA30C717D1194FC0230252DF0C45C' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686342, + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686343, + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686344, + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686345, + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686346, + 'tags' => [ + 'DA6A8F10313CCFEC843978FC065F235B' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686342, + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686343, + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686344, + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686345, + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ]), + Address::fromArray([ + 'contact_id' => 79686346, + 'tags' => [ + '8142ABF2D693336987726ECDB5ED2D6D' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/PersistentLocation.php b/examples/AdvancedConstraints/PersistentLocation.php new file mode 100644 index 0000000..9c96515 --- /dev/null +++ b/examples/AdvancedConstraints/PersistentLocation.php @@ -0,0 +1,139 @@ + false, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Persistent Location - Single Depot - Multiple Driver '.date('Y-m-d H:i:s', time()), + 'route_time' => 25200, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ + 25200, + 75000 + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'DEPOT END LOCATION', + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 300 + ] + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ + 45200, + 95000 + ] + ], + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'DEPOT END LOCATION', + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 300 + ] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'is_depot' => true, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time' => 300 + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/RetailLocation.php b/examples/AdvancedConstraints/RetailLocation.php new file mode 100644 index 0000000..b428e61 --- /dev/null +++ b/examples/AdvancedConstraints/RetailLocation.php @@ -0,0 +1,120 @@ + TRUE, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Retail Location - Single Depot - Multiple Driver '.date('Y-m-d H:i:s', time()), + 'route_time' => 25200, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'advanced_constraints'=> [ + [ + 'members_count' => 10, + 'available_time_windows' => + [ + [ + 25200, + 30000 + ] + ], + 'location_sequence_pattern' => + [ + [ + 'alias' => 'AFTER DEPOT LOCATION', + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300 + ], + '', + [ + 'alias' => 'BEFORE DEPOT LOCATION', + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 300 + ] + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'alias' => 'DEPOT', + 'is_depot' => true, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time' => 300 + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/SomeAddressesWithoutTags.php b/examples/AdvancedConstraints/SomeAddressesWithoutTags.php new file mode 100644 index 0000000..9da29bb --- /dev/null +++ b/examples/AdvancedConstraints/SomeAddressesWithoutTags.php @@ -0,0 +1,157 @@ + Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Fleet Example 2 - Single Depot, Multiple Driver '.date('Y-m-d H:i:s', time()), + 'route_time' => 0, + 'vehicle_capacity' => 100, + 'vehicle_max_distance_mi' => 10000, + 'route_max_duration' => 86400, + 'parts' => 20, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ + 25200, + 75000 + ] + ], + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 500, + 'members_count' => 6, + 'available_time_windows' => [ + [ + 45200, + 95000 + ] + ], + 'tags' => [ + 'TAG003' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'is_depot' => true, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 300 + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/AdvancedConstraints/TagsDifferentTimeWindowsFleets.php b/examples/AdvancedConstraints/TagsDifferentTimeWindowsFleets.php new file mode 100644 index 0000000..ea67990 --- /dev/null +++ b/examples/AdvancedConstraints/TagsDifferentTimeWindowsFleets.php @@ -0,0 +1,167 @@ + Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Fleet Example - Single Depot, Multiple Driver '.date('Y-m-d H:i:s', time()), + 'route_time' => 0, + 'vehicle_capacity' => 100, + 'vehicle_max_distance_mi' => 10000, + 'route_max_duration' => 86400, + 'parts' => 20, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'advanced_constraints'=> [ + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ + 25200, + 75000 + ] + ], + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ], + [ + 'max_cargo_volume' => 0.0, + 'max_capacity' => 200, + 'members_count' => 10, + 'available_time_windows' => [ + [ + 45200, + 95000 + ] + ], + 'tags' => [ + 'TAG003' + ] + ] + ] + +]); + +$addresses = [ + Address::fromArray([ + 'address' => '1604 PARKRIDGE PKWY, Louisville, KY, 40214', + 'is_depot' => true, + 'lat' => 38.141598, + 'lng' => -85.793846, + 'time' => 300 + ]), + Address::fromArray([ + 'address' => '1407 MCCOY, Louisville, KY, 40215', + 'lat' => 38.202496, + 'lng' => -85.786514, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '4805 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.178844, + 'lng' => -85.774864, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '730 CECIL AVENUE, Louisville, KY, 40211', + 'lat' => 38.248684, + 'lng' => -85.821121, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '650 SOUTH 29TH ST UNIT 315, Louisville, KY, 40211', + 'lat' => 38.251923, + 'lng' => -85.800034, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '4629 HILLSIDE DRIVE, Louisville, KY, 40216', + 'lat' => 38.176067, + 'lng' => -85.824638, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '4738 BELLEVUE AVE, Louisville, KY, 40215', + 'lat' => 38.179806, + 'lng' => -85.775558, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]), + Address::fromArray([ + 'address' => '318 SO. 39TH STREET, Louisville, KY, 40212', + 'lat' => 38.259335, + 'lng' => -85.815094, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '1324 BLUEGRASS AVE, Louisville, KY, 40215', + 'lat' => 38.179253, + 'lng' => -85.785118, + 'time' => 300, + 'tags' => [ + 'TAG001', + 'TAG002' + ] + ]), + Address::fromArray([ + 'address' => '7305 ROYAL WOODS DR, Louisville, KY, 40214', + 'lat' => 38.162472, + 'lng' => -85.792854, + 'time' => 300, + 'tags' => [ + 'TAG003' + ] + ]) +]; + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/OptimizationWithAdvancedConstraints.php b/examples/OptimizationWithAdvancedConstraints.php new file mode 100644 index 0000000..5e0cb62 --- /dev/null +++ b/examples/OptimizationWithAdvancedConstraints.php @@ -0,0 +1,67 @@ + 'Start Depot', + 'address' => '1 MIAD Terminal J 2nd Floor, Miami,FL, (305) 876-0980', + 'lat' => 25.774254, + 'lng' => -80.190211 + ]) +]; + +$parameters = RouteParameters::fromArray([ + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Optimization With Same Last Location '.date('Y-m-d H:i:s', time()), + 'route_date' => time() + 24 * 60 * 60, + 'route_time' => 6 * 3600, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'advanced_constraints' => [ + [ + 'location_sequence_pattern' => [ + '', + [ + 'alias' => 'End Depot', + 'address' => '9681 SW 72nd St, Miami,FL, (305) 598-4933', + 'lng' => -80.34972, + 'lat' => 25.70185 + ] + ] + ] + ], + +]); + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setDepots($depots); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); + +echo Route4Me::object2json($problem); diff --git a/examples/OptimizationWithAdvancedConstraintsMemberCount.php b/examples/OptimizationWithAdvancedConstraintsMemberCount.php new file mode 100644 index 0000000..791ba28 --- /dev/null +++ b/examples/OptimizationWithAdvancedConstraintsMemberCount.php @@ -0,0 +1,87 @@ + 'Start Depot', + 'is_depot' => true, + 'address' => '1 Fritz Sonnenberg Rd, Green Point, Cape Town, 8051, South Africa', + 'lat' => -33.90410680000001, + 'lng' => 18.4010964 + ]) +]; + +$parameters = RouteParameters::fromArray([ + 'rt' => 0, + 'algorithm_type' => Algorithmtype::ADVANCED_CVRP_TW, + 'route_name' => 'Optimization With Same Last Location and Member Count '.date('Y-m-d H:i:s', time()), + 'route_date' => time() + 24 * 60 * 60, + 'route_time' => 6 * 3600, + 'distance_unit' => DistanceUnit::MILES, + 'device_type' => DeviceType::WEB, + 'optimize' => OptimizationType::DISTANCE, + 'travel_mode' => TravelMode::DRIVING, + 'route_max_duration' => 7200, + 'store_route' => true, + 'parts' => 2, + 'parts_min' => 2, + 'advanced_constraints' => [ + [ + 'members_count' => 2, + 'location_sequence_pattern' => [ + '', + [ + 'lat' => -33.92136, + 'lng' => 18.4181938, + 'is_depot' => false, + 'address' => '105 Bree St, Cape Town City Centre, Cape Town, 8001, South Africa', + 'order_id' => 50, + 'route_destination_id' => 736611941, + ] + ] + ] + ], + +]); + +$optimizationParams = new OptimizationProblemParams(); +$optimizationParams->setAddresses($addresses); +$optimizationParams->setDepots($depots); +$optimizationParams->setParameters($parameters); + +$problem = OptimizationProblem::optimize($optimizationParams); +echo "
";
+foreach ((array) $problem as $key => $value) {
+ if (is_string($value)) {
+ echo $key.' --> '.$value.'
';
+ } else {
+ echo "************ $key *************
";
+ Route4Me::simplePrint((array) $value, true);
+ echo '*******************************
';
+ }
+}
+echo "";
diff --git a/examples/Order/NewOrder.php b/examples/Order/NewOrder.php
index c23ae53..250b89c 100644
--- a/examples/Order/NewOrder.php
+++ b/examples/Order/NewOrder.php
@@ -23,11 +23,9 @@
'EXT_FIELD_email' => 'progman@gmail.com',
'EXT_FIELD_phone' => '380380380380',
'EXT_FIELD_custom_data' => [
- 0 => [
'order_id' => '10',
- 'name' => 'Bill Soul',
- ],
- ],
+ 'name' => 'Bill Soul'
+ ]
]);
$order = new Order();
diff --git a/examples/Order/UpdateOrder.php b/examples/Order/UpdateOrder.php
index cad3637..8297fab 100644
--- a/examples/Order/UpdateOrder.php
+++ b/examples/Order/UpdateOrder.php
@@ -25,9 +25,7 @@
$randomOrder['address_2'] = 'Lviv';
$randomOrder['EXT_FIELD_phone'] = '032268593';
$randomOrder['EXT_FIELD_custom_data'] = [
- 0 => [
- 'customer_no' => '11',
- ],
+ 'customer_no' => '11'
];
$response = $order->updateOrder($randomOrder);
diff --git a/examples/Order/update_order_data.json b/examples/Order/update_order_data.json
index c53b635..11e5931 100644
--- a/examples/Order/update_order_data.json
+++ b/examples/Order/update_order_data.json
@@ -1,10 +1,8 @@
{
"order_id": "7205711",
"address_2": "Lviv",
- "EXT_FIELD_custom_data" : [
- {
+ "EXT_FIELD_custom_data" : {
"customer_no" : 11
- }
- ],
+ },
"EXT_FIELD_phone": "032268593"
}
\ No newline at end of file
diff --git a/examples/addresses_adv_constr.json b/examples/addresses_adv_constr.json
new file mode 100644
index 0000000..d8ba822
--- /dev/null
+++ b/examples/addresses_adv_constr.json
@@ -0,0 +1,415 @@
+[
+ {
+ "alias": "Stop 01",
+ "address": "1016 W Flagler St, Miami,FL, (305) 545-7788",
+ "time": 60,
+ "lat": 25.77346,
+ "lng": -80.21184
+ },
+ {
+ "alias": "Stop 02",
+ "address": "10775 NW 27th Ave, Miami,FL, (305) 681-5444",
+ "time": 60,
+ "lat": 25.872631,
+ "lng": -80.242546
+ },
+ {
+ "alias": "Stop 03",
+ "address": "10855 Caribbean Blvd, Miami,FL, (305) 254-3487",
+ "time": 60,
+ "lat": 25.57937,
+ "lng": -80.36775
+ },
+ {
+ "alias": "Stop 04",
+ "address": "11207 SW 152nd St, Miami,FL, (305) 255-3594",
+ "time": 60,
+ "lat": 25.627888,
+ "lng": -80.374825
+ },
+ {
+ "alias": "Stop 05",
+ "address": "11301 SW 40th St, Miami,FL, (305) 223-0179",
+ "time": 60,
+ "lat": 25.73233,
+ "lng": -80.37771
+ },
+ {
+ "alias": "Stop 06",
+ "address": "11390 NW 41st St, Miami,FL, (305) 471-6809",
+ "time": 60,
+ "lat": 25.8114,
+ "lng": -80.38101
+ },
+ {
+ "alias": "Stop 07",
+ "address": "11500 SW 88th St, Miami,FL 33156, (305) 595-2347",
+ "time": 60,
+ "lat": 25.686363,
+ "lng": -80.382386
+ },
+ {
+ "alias": "Stop 08",
+ "address": "11990 SW 8th St, Miami,FL, (305) 221-8542",
+ "time": 60,
+ "lat": 25.76071,
+ "lng": -80.3905
+ },
+ {
+ "alias": "Stop 09",
+ "address": "12185 SW 26th St, Miami,FL, (305) 229-6854",
+ "time": 60,
+ "lat": 25.74454,
+ "lng": -80.39194
+ },
+ {
+ "alias": "Stop 10",
+ "address": "12198 SW 117th Ave, Miami,FL, (305) 232-4665",
+ "time": 60,
+ "lat": 25.65576,
+ "lng": -80.38363
+ },
+ {
+ "alias": "Stop 11",
+ "address": "13000 Biscayne Blvd, Miami,FL, (305) 899-9578",
+ "time": 60,
+ "lat": 25.89554,
+ "lng": -80.16196
+ },
+ {
+ "alias": "Stop 12",
+ "address": "13101 N Kendall Dr, Miami,FL, (305) 386-3998",
+ "time": 60,
+ "lat": 25.685873,
+ "lng": -80.403082
+ },
+ {
+ "alias": "Stop 13",
+ "address": "13702 SW 56th St, Miami,FL, (305) 387-1356",
+ "time": 60,
+ "lat": 25.71425,
+ "lng": -80.41537
+ },
+ {
+ "alias": "Stop 14",
+ "address": "13708 SW 152nd St, Miami,FL, (305) 232-2860",
+ "time": 60,
+ "lat": 25.62612,
+ "lng": -80.41472
+ },
+ {
+ "alias": "Stop 15",
+ "address": "1400 SW 8th St, Miami,FL, (305) 285-0974",
+ "time": 60,
+ "lat": 25.76564,
+ "lng": -80.21863
+ },
+ {
+ "alias": "Stop 16",
+ "address": "14401 S Dixie Hwy, Miami,FL, (305) 238-2615",
+ "time": 60,
+ "lat": 25.636156,
+ "lng": -80.33744
+ },
+ {
+ "alias": "Stop 17",
+ "address": "14670 SW 8th St, Miami,FL, (305) 228-4343",
+ "time": 60,
+ "lat": 25.760715,
+ "lng": -80.431091
+ },
+ {
+ "alias": "Stop 18",
+ "address": "14699 SW 42th St, Miami,FL, (305) 226-2422",
+ "time": 60,
+ "lat": 25.72883,
+ "lng": -80.42994
+ },
+ {
+ "alias": "Stop 19",
+ "address": "15096 N 7th, Miami,FL, (305) 681-5719",
+ "time": 60,
+ "lat": 25.913763,
+ "lng": -80.185277
+ },
+ {
+ "alias": "Stop 20",
+ "address": "15295 SW 104th St, Miami,FL, (305) 388-0560",
+ "time": 60,
+ "lat": 25.67014,
+ "lng": -80.4436
+ },
+ {
+ "alias": "Stop 21",
+ "address": "15710 SW 56th St, Miami,FL 33193, (305) 383-1447",
+ "time": 60,
+ "lat": 25.713488,
+ "lng": -80.447262
+ },
+ {
+ "alias": "Stop 22",
+ "address": "15715 SW 88th St, Miami,FL, (305) 387-4249",
+ "time": 60,
+ "lat": 25.68451,
+ "lng": -80.44645
+ },
+ {
+ "alias": "Stop 23",
+ "address": "16701 NW 67th Ave, Miami,FL, (305) 822-6232",
+ "time": 60,
+ "lat": 25.92534,
+ "lng": -80.30914
+ },
+ {
+ "alias": "Stop 24",
+ "address": "18340 SW 137th Ave, Miami,FL, (305) 235-5573",
+ "time": 60,
+ "lat": 25.597383,
+ "lng": -80.413682
+ },
+ {
+ "alias": "Stop 25",
+ "address": "18350 NE 18th Rd, Miami,FL, (305) 940-0454",
+ "time": 60,
+ "lat": 25.760338,
+ "lng": -80.201042
+ },
+ {
+ "alias": "Stop 26",
+ "address": "1930 Opa Locks Blvd, Miami,FL, (305) 685-8855",
+ "time": 60,
+ "lat": 25.89911,
+ "lng": -80.227429
+ },
+ {
+ "alias": "Stop 27",
+ "address": "20101 NW 2nd Ave, Miami,FL, (305) 652-5933",
+ "time": 60,
+ "lat": 25.95929,
+ "lng": -80.20552
+ },
+ {
+ "alias": "Stop 28",
+ "address": "20315 Old Cutler Dr, Miami,FL, (305) 235-5600",
+ "time": 60,
+ "lat": 25.57872,
+ "lng": -80.33552
+ },
+ {
+ "alias": "Stop 29",
+ "address": "2200 NW 36th St, Miami,FL, (305) 633-1385",
+ "time": 60,
+ "lat": 25.80926,
+ "lng": -80.23225
+ },
+ {
+ "alias": "Stop 30",
+ "address": "2300 SW 87 Ave, Miami,FL, (305) 220-0024",
+ "time": 60,
+ "lat": 25.728979,
+ "lng": -80.237442
+ },
+ {
+ "alias": "Stop 31",
+ "address": "2405 NW 87th Ave, Miami,FL, (305) 468-1822",
+ "time": 60,
+ "lat": 25.795971,
+ "lng": -80.336746
+ },
+ {
+ "alias": "Stop 32",
+ "address": "2940 SW 8th St, Miami,FL, (305) 541-4768",
+ "time": 60,
+ "lat": 25.76496,
+ "lng": -80.24175
+ },
+ {
+ "alias": "Stop 33",
+ "address": "299 SW 8th St, Miami,FL, (305) 856-6770",
+ "time": 60,
+ "lat": 25.76634,
+ "lng": -80.19895
+ },
+ {
+ "alias": "Stop 34",
+ "address": "3200 S Dixie Hwy, Miami,FL, (305) 448-0531",
+ "time": 60,
+ "lat": 25.73672,
+ "lng": -80.24598
+ },
+ {
+ "alias": "Stop 35",
+ "address": "3280 Coral Way, Miami,FL, (305) 444-5466",
+ "time": 60,
+ "lat": 25.749842,
+ "lng": -80.248146
+ },
+ {
+ "alias": "Stop 36",
+ "address": "345 NE Second Ave, Miami,FL, (305) 371-8161",
+ "time": 60,
+ "lat": 25.777982,
+ "lng": -80.190265
+ },
+ {
+ "alias": "Stop 37",
+ "address": "3501 Biscayne Blvd, Miami,FL, (305) 573-6064",
+ "time": 60,
+ "lat": 25.809969,
+ "lng": -80.189212
+ },
+ {
+ "alias": "Stop 38",
+ "address": "3747 NW 7th St, Miami,FL, (305) 646-0423",
+ "time": 60,
+ "lat": 25.779057,
+ "lng": -80.256599
+ },
+ {
+ "alias": "Stop 39",
+ "address": "4180 SW 9th St, Miami,FL, (305) 443-9366",
+ "time": 60,
+ "lat": 25.763493,
+ "lng": -80.263054
+ },
+ {
+ "alias": "Stop 40",
+ "address": "5650 NW 7th St, Miami,FL, (305) 262-3961",
+ "time": 60,
+ "lat": 25.777905,
+ "lng": -80.287376
+ },
+ {
+ "alias": "Stop 41",
+ "address": "5700 NW 79th Ave, Miami,FL, (305) 599-2660",
+ "time": 60,
+ "lat": 25.825348,
+ "lng": -80.325882
+ },
+ {
+ "alias": "Stop 42",
+ "address": "5851 NW 177th St [WM], Miami,FL, (305) 362-5633",
+ "time": 60,
+ "lat": 25.935284,
+ "lng": -80.295874
+ },
+ {
+ "alias": "Stop 43",
+ "address": "599 NW 62nd St, Miami,FL, (305) 751-5636",
+ "time": 60,
+ "lat": 25.832267,
+ "lng": -80.206914
+ },
+ {
+ "alias": "Stop 44",
+ "address": "610 NE 125th St, Miami,FL, (305) 899-2882",
+ "time": 60,
+ "lat": 25.89006,
+ "lng": -80.1861
+ },
+ {
+ "alias": "Stop 45",
+ "address": "6150 S Dixie Hwy, Miami,FL, (305) 661-7131",
+ "time": 60,
+ "lat": 25.70162,
+ "lng": -80.29261
+ },
+ {
+ "alias": "Stop 46",
+ "address": "6700 Bird Rd, Miami,FL, (305) 667-3551",
+ "time": 60,
+ "lat": 25.733185,
+ "lng": -80.302994
+ },
+ {
+ "alias": "Stop 47",
+ "address": "7281 SW 8th St, Miami,FL, (305) 261-3441",
+ "time": 60,
+ "lat": 25.76285,
+ "lng": -80.3134
+ },
+ {
+ "alias": "Stop 48",
+ "address": "7405 NW 36th St, Miami,FL, (305) 593-0376",
+ "time": 60,
+ "lat": 25.80958,
+ "lng": -80.31534
+ },
+ {
+ "alias": "Stop 49",
+ "address": "7901 Bird Rd, Miami,FL, (305) 264-1244",
+ "time": 60,
+ "lat": 25.73344,
+ "lng": -80.32354
+ },
+ {
+ "alias": "Stop 50",
+ "address": "7995 W Flagler St, Miami,FL, (305) 265-0177",
+ "time": 60,
+ "lat": 25.76994,
+ "lng": -80.32561
+ },
+ {
+ "alias": "Stop 51",
+ "address": "8050 NW 27th Ave, Miami,FL, (305) 836-4792",
+ "time": 60,
+ "lat": 25.847599,
+ "lng": -80.242125
+ },
+ {
+ "alias": "Stop 52",
+ "address": "8116 Biscayne Blvd, Miami,FL, (305) 756-0400",
+ "time": 60,
+ "lat": 25.849853,
+ "lng": -80.185022
+ },
+ {
+ "alias": "Stop 53",
+ "address": "8403 NW 12th St, Miami,FL, (305) 477-3163",
+ "time": 60,
+ "lat": 25.78306,
+ "lng": -80.33235
+ },
+ {
+ "alias": "Stop 54",
+ "address": "8505 NW 186th St, Miami,FL, (305) 829-5113",
+ "time": 60,
+ "lat": 25.594749,
+ "lng": -80.33017
+ },
+ {
+ "alias": "Stop 55",
+ "address": "8651 NW 13th Terrace [WM], Miami,FL, (305) 592-8220",
+ "time": 60,
+ "lat": 25.785265,
+ "lng": -80.335815
+ },
+ {
+ "alias": "Stop 56",
+ "address": "901 NW 17 St Ste A, Miami,FL, (305) 326-0044",
+ "time": 60,
+ "lat": 25.79146,
+ "lng": -80.210311
+ },
+ {
+ "alias": "Stop 57",
+ "address": "9250 NW 7th Ave, Miami,FL, (305) 759-1042",
+ "time": 60,
+ "lat": 25.860037,
+ "lng": -80.209764
+ },
+ {
+ "alias": "Stop 58",
+ "address": "9341 SW 56th St, Miami,FL, (305) 270-1943",
+ "time": 60,
+ "lat": 25.71652,
+ "lng": -80.34581
+ },
+ {
+ "alias": "Stop 59",
+ "address": "9501 NW 41st St, Miami,FL, (305) 594-7530",
+ "time": 60,
+ "lat": 25.818621,
+ "lng": -80.355331
+ }
+]
diff --git a/examples/addresses_adv_constr2.json b/examples/addresses_adv_constr2.json
new file mode 100644
index 0000000..d788add
--- /dev/null
+++ b/examples/addresses_adv_constr2.json
@@ -0,0 +1,352 @@
+[
+ {
+ "address": "Albow Ctr, Hatfield St, Cape Town City Centre, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9294",
+ "lng": "18.416649",
+ "order_id": 0
+ },
+ {
+ "address": "28 Bay View, Tamboerskloof, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9297095",
+ "lng": "18.3991118",
+ "order_id": 1
+ },
+ {
+ "address": "De Roos St, Zonnebloem, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.928036",
+ "lng": "18.428898",
+ "order_id": 2
+ },
+ {
+ "address": "10 Ave protea, Fresnaye, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9236307",
+ "lng": "18.3880934",
+ "order_id": 3
+ },
+ {
+ "address": "160 Sir Lowry Rd, Zonnebloem, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.9277289",
+ "lng": "18.4371343",
+ "order_id": 4
+ },
+ {
+ "address": "179 Buitengracht St, Gardens, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.926305",
+ "lng": "18.4116006",
+ "order_id": 5
+ },
+ {
+ "address": "16 Kimberley Rd, Observatory, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.9400943",
+ "lng": "18.4714619",
+ "order_id": 6
+ },
+ {
+ "address": "19 Rosmead Ave, Gardens, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9389815",
+ "lng": "18.4080165",
+ "order_id": 7
+ },
+ {
+ "address": "Beach Rd, Three Anchor Bay, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9081432",
+ "lng": "18.3954149",
+ "order_id": 8
+ },
+ {
+ "address": "5th Floor, 22 Long St, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9201966",
+ "lng": "18.4213882",
+ "order_id": 9
+ },
+ {
+ "address": "160 Sir Lowry Rd, Zonnebloem, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.9277289",
+ "lng": "18.4371343",
+ "order_id": 10
+ },
+ {
+ "address": "Wembley Square, Roodehek St, Gardens, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9327695",
+ "lng": "18.4230611",
+ "order_id": 11
+ },
+ {
+ "address": "323 Beach Rd, Bantry Bay, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.923209",
+ "lng": "18.3778997",
+ "order_id": 12
+ },
+ {
+ "address": "239 Beach Rd, Sea Point, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9130286",
+ "lng": "18.3885208",
+ "order_id": 13
+ },
+ {
+ "address": "Bantry Bay 1, Bantry Bay, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9265221",
+ "lng": "18.3789738",
+ "order_id": 14
+ },
+ {
+ "address": "8 Briar Rd, Salt River, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.9319045",
+ "lng": "18.4589113",
+ "order_id": 15
+ },
+ {
+ "address": "Albow Ctr, Hatfield St, Cape Town City Centre, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9294",
+ "lng": "18.416649",
+ "order_id": 16
+ },
+ {
+ "address": "23 Derry St, Vredehoek, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9385199",
+ "lng": "18.42734",
+ "order_id": 17
+ },
+ {
+ "address": "125 Longmarket St, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9237964",
+ "lng": "18.421624",
+ "order_id": 18
+ },
+ {
+ "address": "13 Devonshire St, Woodstock, Cape Town, 7915, South Africa",
+ "is_depot": false,
+ "lat": "-33.9360033",
+ "lng": "18.4523871",
+ "order_id": 19
+ },
+ {
+ "address": "26 Rhodes Ave, University Estate, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.93821",
+ "lng": "18.4513399",
+ "order_id": 20
+ },
+ {
+ "address": "2nd Floor, 66 Plein St, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9258763",
+ "lng": "18.4212556",
+ "order_id": 21
+ },
+ {
+ "address": "24 Richmond Rd, Mowbray, Cape Town, 7700, South Africa",
+ "is_depot": false,
+ "lat": "-33.9462844",
+ "lng": "18.4813678",
+ "order_id": 22
+ },
+ {
+ "address": "35 Beach Rd, Mouille Point, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.8999958",
+ "lng": "18.4078875",
+ "order_id": 23
+ },
+ {
+ "address": "25 Merriman Rd, Signal Hill, Cape Town, 8051, South Africa",
+ "is_depot": false,
+ "lat": "-33.9131687",
+ "lng": "18.4095001",
+ "order_id": 24
+ },
+ {
+ "address": "18 Upper Pepper St, Schotsche Kloof, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.92283",
+ "lng": "18.41365",
+ "order_id": 25
+ },
+ {
+ "address": "7 Beatty Rd, University Estate, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.938175",
+ "lng": "18.451614",
+ "order_id": 26
+ },
+ {
+ "address": "10th Floor, 35 Lower Long St, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9178987",
+ "lng": "18.4245626",
+ "order_id": 27
+ },
+ {
+ "address": "4 Loop St, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9179479",
+ "lng": "18.4225973",
+ "order_id": 28
+ },
+ {
+ "address": "14 Kei Apple Rd, Sea Point, Cape Town, 8060, South Africa",
+ "is_depot": false,
+ "lat": "-33.9215342",
+ "lng": "18.3836797",
+ "order_id": 29
+ },
+ {
+ "address": "9 Davenport Rd, Vredehoek, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9406358",
+ "lng": "18.4197181",
+ "order_id": 30
+ },
+ {
+ "address": "31 Burnside Rd, Tamboerskloof, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9282",
+ "lng": "18.4050958",
+ "order_id": 31
+ },
+ {
+ "address": "011, Jocyn Court, 19 Rochester Rd, Bantry Bay, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9255484",
+ "lng": "18.3800261",
+ "order_id": 32
+ },
+ {
+ "address": "14 Tuin Plein, Cape Town City Centre, Cape Town, 8000, South Africa",
+ "is_depot": false,
+ "lat": "-33.9297236",
+ "lng": "18.4185608",
+ "order_id": 33
+ },
+ {
+ "address": "299 Beach Rd, Sea Point, Cape Town, 8060, South Africa",
+ "is_depot": false,
+ "lat": "-33.9203532",
+ "lng": "18.3818329",
+ "order_id": 34
+ },
+ {
+ "address": "3 Ella St, Schotsche Kloof, Cape Town, 8051, South Africa",
+ "is_depot": false,
+ "lat": "-33.9165727",
+ "lng": "18.4136263",
+ "order_id": 35
+ },
+ {
+ "address": "Sea Point, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9206032",
+ "lng": "18.3930108",
+ "order_id": 36
+ },
+ {
+ "address": "33 Ludlow Rd, Vredehoek, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9388796",
+ "lng": "18.4241053",
+ "order_id": 37
+ },
+ {
+ "address": "59 Victoria Rd, Clifton, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9371518",
+ "lng": "18.3783157",
+ "order_id": 38
+ },
+ {
+ "address": "V&A Waterfront Shop 7223, Victoria Wharf Shopping Centre, Victoria & Alfred Waterfront, Cape Town, 8002, South Africa",
+ "is_depot": false,
+ "lat": "-33.9024366",
+ "lng": "18.421185",
+ "order_id": 39
+ },
+ {
+ "address": "7 Campground Rd, Mowbray, Cape Town, 7700, South Africa",
+ "is_depot": false,
+ "lat": "-33.950007",
+ "lng": "18.4812287",
+ "order_id": 40
+ },
+ {
+ "address": "19 Upper Orange St, Oranjezicht, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9354079",
+ "lng": "18.4142753",
+ "order_id": 41
+ },
+ {
+ "address": "42 Earl St, Woodstock, Cape Town, 7915, South Africa",
+ "is_depot": false,
+ "lat": "-33.9306316",
+ "lng": "18.4472121",
+ "order_id": 42
+ },
+ {
+ "address": "Highlands Estate, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-34.0129346",
+ "lng": "18.5455744",
+ "order_id": 43
+ },
+ {
+ "address": "Beach Rd, Woodstock, Cape Town, 7915, South Africa",
+ "is_depot": false,
+ "lat": "-33.9247362",
+ "lng": "18.4466721",
+ "order_id": 44
+ },
+ {
+ "address": "297 High Level Rd, Fresnaye, Cape Town, 8005, South Africa",
+ "is_depot": false,
+ "lat": "-33.9215721",
+ "lng": "18.3894228",
+ "order_id": 45
+ },
+ {
+ "address": "0B Prestwich St, De Waterkant, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.912734",
+ "lng": "18.4177486",
+ "order_id": 46
+ },
+ {
+ "address": "7 Campground Rd, Mowbray, Cape Town, 7700, South Africa",
+ "is_depot": false,
+ "lat": "-33.950007",
+ "lng": "18.4812287",
+ "order_id": 47
+ },
+ {
+ "address": "1 Seymour St, Observatory, Cape Town, 7925, South Africa",
+ "is_depot": false,
+ "lat": "-33.93522",
+ "lng": "18.47028",
+ "order_id": 48
+ },
+ {
+ "address": "4 Stirling St, Zonnebloem, Cape Town, 8001, South Africa",
+ "is_depot": false,
+ "lat": "-33.9319567",
+ "lng": "18.4261389",
+ "order_id": 49
+ }
+]
diff --git a/src/Route4Me/Address.php b/src/Route4Me/Address.php
index 6a83970..b3b3bcb 100644
--- a/src/Route4Me/Address.php
+++ b/src/Route4Me/Address.php
@@ -96,6 +96,7 @@ class Address extends Common
public $wait_time_to_next_destination;
public $path_to_next = [];
public $additional_status;
+ public $tags = [];
public function __construct()
{
diff --git a/src/Route4Me/AddressBookLocation.php b/src/Route4Me/AddressBookLocation.php
index 3ff4625..2011321 100644
--- a/src/Route4Me/AddressBookLocation.php
+++ b/src/Route4Me/AddressBookLocation.php
@@ -127,13 +127,13 @@ class AddressBookLocation extends Common
/**
* An array of the contact's schedules.
- * @var Schedule[]
+ * @var array of Schedule
*/
public $schedule;
/**
* Time when the contact was created.
- * @var long
+ * @var integer
*/
public $created_timestamp;
@@ -157,37 +157,37 @@ class AddressBookLocation extends Common
/**
* When the contact was last visited.
- * @var long
+ * @var integer
*/
public $last_visited_timestamp;
/**
* When the contact was last routed.
- * @var long
+ * @var integer
*/
public $last_routed_timestamp;
/**
* Start of the contact's local time window.
- * @var long
+ * @var integer
*/
public $local_time_window_start;
/**
* End of the contact's local time window.
- * @var long
+ * @var integer
*/
public $local_time_window_end;
/**
* Start of the contact's second local time window.
- * @var long
+ * @var integer
*/
public $local_time_window_start_2;
/**
* End of the contact's second local time window.
- * @var long
+ * @var integer
*/
public $local_time_window_end_2;
diff --git a/src/Route4Me/Constants.php b/src/Route4Me/Constants.php
index c74da8d..f02f871 100644
--- a/src/Route4Me/Constants.php
+++ b/src/Route4Me/Constants.php
@@ -6,6 +6,6 @@
class Constants
{
- const API_KEY = '11111111111111111111111111111111';
+ const API_KEY = '5B05A8B6C4DB22C0CD6966F01D5FB4E0';
const DEMO_API_KEY = '11111111111111111111111111111111';
}
\ No newline at end of file
diff --git a/src/Route4Me/CustomNoteTypeResponse.php b/src/Route4Me/CustomNoteTypeResponse.php
index 9717061..ae03e1e 100644
--- a/src/Route4Me/CustomNoteTypeResponse.php
+++ b/src/Route4Me/CustomNoteTypeResponse.php
@@ -14,7 +14,7 @@ class CustomNoteTypeResponse extends Common
/**
* Note custom type
- * @var CustomNoteType
+ * @var object of type CustomNoteType
*/
public $note_custom_type;
diff --git a/src/Route4Me/DirectionStep.php b/src/Route4Me/DirectionStep.php
index d7ad6e5..f0f4588 100644
--- a/src/Route4Me/DirectionStep.php
+++ b/src/Route4Me/DirectionStep.php
@@ -19,7 +19,7 @@ class DirectionStep extends Common
/**
* Name (brief)
- * @var strng
+ * @var string
*/
public $directions;
diff --git a/src/Route4Me/Enum/AlgorithmType.php b/src/Route4Me/Enum/AlgorithmType.php
index b94dd84..113b791 100644
--- a/src/Route4Me/Enum/AlgorithmType.php
+++ b/src/Route4Me/Enum/AlgorithmType.php
@@ -4,14 +4,12 @@
class AlgorithmType
{
- const STATE_NEW = 0;
const TSP = 1;
const VRP = 2;
const CVRP_TW_SD = 3;
const CVRP_TW_MD = 4;
const TSP_TW = 5;
const TSP_TW_CR = 6;
- const OPTIMIZATION_STATE_IN_QUEUE = 7;
const ADVANCED_CVRP_TW = 9;
const ALG_NONE = 100;
const ALG_LEGACY_DISTRIBUTED = 101;
diff --git a/src/Route4Me/Enum/StatusUpdateType.php b/src/Route4Me/Enum/StatusUpdateType.php
index 41de19b..caf853e 100644
--- a/src/Route4Me/Enum/StatusUpdateType.php
+++ b/src/Route4Me/Enum/StatusUpdateType.php
@@ -19,7 +19,6 @@ class StatusUpdateType
const LEFT_INFORMATION = 'left_information';
const SPOKE_WITH_DECISION_MAKER = 'spoke_with_decision_maker';
const SPOKE_WITH_DECISION_INFLUENCER = 'spoke_with_decision_influencer';
- const SPOKE_WITH_DECISION_INFLUENCER = 'spoke_with_decision_influencer';
const COMPETITIVE_ACCOUNT = 'competitive_account';
const SCHEDULED_FOLLOW_UP_MEETING = 'scheduled_follow_up_meeting';
const SCHEDULED_LUNCH = 'scheduled_lunch';
diff --git a/src/Route4Me/Members/Member.php b/src/Route4Me/Members/Member.php
index 0594feb..4cfbf3e 100644
--- a/src/Route4Me/Members/Member.php
+++ b/src/Route4Me/Members/Member.php
@@ -4,7 +4,7 @@
use Route4Me\Enum\Endpoint;
use Route4Me\Route4Me;
-use Unirest\Exception;
+use Exception;
class Member extends \Route4Me\Common
{
diff --git a/src/Route4Me/Members/MemberConfiguration.php b/src/Route4Me/Members/MemberConfiguration.php
index baaa9d1..ff83721 100644
--- a/src/Route4Me/Members/MemberConfiguration.php
+++ b/src/Route4Me/Members/MemberConfiguration.php
@@ -9,7 +9,7 @@
use Route4Me\Route4Me;
use Route4Me\Enum\Endpoint;
use Route4Me\Exception\BadParam;
-use Unirest\Exception;
+use Exception;
class MemberConfiguration extends \Route4Me\Common
{
diff --git a/src/Route4Me/Members/MemberResponseV4.php b/src/Route4Me/Members/MemberResponseV4.php
index 5151643..6b31034 100644
--- a/src/Route4Me/Members/MemberResponseV4.php
+++ b/src/Route4Me/Members/MemberResponseV4.php
@@ -59,7 +59,7 @@ class MemberResponseV4 extends \Route4Me\Common
*/
public $member_email;
- /** @var stringn $member_first_name
+ /** @var string $member_first_name
* User's first name.
*/
public $member_first_name;
diff --git a/src/Route4Me/OptimizationProblem.php b/src/Route4Me/OptimizationProblem.php
index f79c50b..3c768a0 100644
--- a/src/Route4Me/OptimizationProblem.php
+++ b/src/Route4Me/OptimizationProblem.php
@@ -59,19 +59,19 @@ class OptimizationProblem extends Common
/**
* When the optimization problem was created.
- * @var long
+ * @var integer
*/
public $created_timestamp;
/**
* An Unix Timestamp the Optimization Problem was scheduled for.
- * @var long
+ * @var integer
*/
public $scheduled_for;
/**
* When the optimization completed.
- * @var long
+ * @var integer
*/
public $optimization_completed_timestamp;
@@ -199,22 +199,22 @@ public static function update($params)
$allBodyFields = ['addresses', 'parameters'];
$query = is_array($params)
- ? (isset($params['optimization_problem_id']) || isset($params['parameters']))
+ ? ((isset($params['optimization_problem_id']) || isset($params['parameters']))
? Route4Me::generateRequestParameters($allQueryFields, $params)
- : null
- : (isset($params->optimization_problem_id) || isset($params->parameters))
+ : null)
+ : ((isset($params->optimization_problem_id) || isset($params->parameters))
? Route4Me::generateRequestParameters($allQueryFields, $params)
- : null;
+ : null);
$body = is_array($params)
- ? (isset($params['addresses']) && sizeof($params['addresses'])>0) ||
+ ? ((isset($params['addresses']) && sizeof($params['addresses'])>0) ||
(isset($params['parameters']) && sizeof($params['parameters'])>0)
? Route4Me::generateRequestParameters($allBodyFields, $params)
- : null
- : (isset($params->addresses) && sizeof($params->addresses)>0) ||
+ : null)
+ : ((isset($params->addresses) && sizeof($params->addresses)>0) ||
(isset($params->parameters) && sizeof($params->parameters)>0)
? Route4Me::generateRequestParameters($allBodyFields, $params)
- : null;
+ : null);
$optimize = Route4Me::makeRequst([
'url' => Endpoint::OPTIMIZATION_PROBLEM,
diff --git a/src/Route4Me/Route.php b/src/Route4Me/Route.php
index 457de0d..3038d8b 100644
--- a/src/Route4Me/Route.php
+++ b/src/Route4Me/Route.php
@@ -298,7 +298,7 @@ class Route extends Common
/**
* A vehicle assigned to the route.
- * @var Vehicles\VehicleResponseV4
+ * @var object of type VehicleResponseV4
*/
public $vehicle=[];
@@ -408,7 +408,7 @@ public static function fromArray(array $params)
/**
* @param RouteParametersQuery $params
- * @return An array of the routes
+ * @return array of the routes
* @throws Exception\ApiError
*/
public static function getRoutes($params = null)
@@ -498,7 +498,7 @@ public function resequenceAllAddresses($params)
/**
* Reoptimize a route
- * @param $params type Route
+ * @param $params object of type Route
* @return mixed|string
* @throws Exception\ApiError
*/
@@ -523,7 +523,7 @@ public function reoptimizeRoute($params)
* @param remove_origin if true, the origin routes will be removed.
* @param depot_lat the depot's latitude
* @param depot_lng the depot's longitude
- * @return Status response
+ * @return object of type Status
* @throws Exception\ApiError
*/
public function mergeRoutes($params)
@@ -546,7 +546,7 @@ public function mergeRoutes($params)
* @param route_id a route ID to be shared.
* @param response_format the response format.
* @param recipient_email Recipient email.
- * @return Status response
+ * @return object of type Status
* @throws Exception\ApiError
*/
public function shareRoute($params)
diff --git a/src/Route4Me/Route4Me.php b/src/Route4Me/Route4Me.php
index a057205..e12d7f4 100644
--- a/src/Route4Me/Route4Me.php
+++ b/src/Route4Me/Route4Me.php
@@ -146,18 +146,20 @@ public static function makeRequst($options)
}
/**
- * @param $object: JSON object
+ * @param $object object JSON
*/
public static function object2array($object)
{
return @json_decode(@json_encode($object), 1);
}
+
+ //public static function object2json
/**
* Prints on the screen main keys and values of the array.
*
* @param $results: object to be printed on the screen
- * @param $deepPrinting: if true, object will be printed recursively
+ * @param $deepPrinting Boolean: if true, object will be printed recursively
*/
public static function simplePrint($results, $deepPrinting = null)
{
@@ -213,11 +215,22 @@ public static function simplePrint($results, $deepPrinting = null)
}
}
+ /**
+ * Converts an object to a JSON string.
+ * @param $obj: object, the object to convert.
+ * @param $prettify: integer, the option parameter.
+ * Default value JSON_PRETTY_PRINT is for getting prettified JSON string.
+ * If $prettify=NULL, minified JSON string is returned.
+ */
+ public static function object2json($obj, $prettify=JSON_PRETTY_PRINT) {
+ return json_encode($obj, $prettify);
+ }
+
/**
* Generates query or body parameters.
*
- * @param $allFields: all known fields could be used for parameters generation
- * @param $params: input parameters (array or object)
+ * @param $allFields array: all known fields could be used for parameters generation
+ * @param $params object: input parameters (array or object)
*/
public static function generateRequestParameters($allFields, $params)
{
@@ -243,7 +256,7 @@ public static function generateRequestParameters($allFields, $params)
/**
* Returns an array of the object properties.
*
- * @param $object: An object
+ * @param $object object
* @param $exclude: array of the object parameters to be excluded from the returned array
*/
public static function getObjectProperties($object, $exclude)
@@ -265,7 +278,7 @@ public static function getObjectProperties($object, $exclude)
* Returns url path generated from the array of the fields and parameters.
*
* @param $allFields; array of the paossible fields (parameter names)
- * @param $params: input parameters (array or object)
+ * @param $params array: input parameters
*/
public static function generateUrlPath($allFields, $params)
{
diff --git a/src/Route4Me/RouteParameters.php b/src/Route4Me/RouteParameters.php
index 9aa0203..01a0dfc 100644
--- a/src/Route4Me/RouteParameters.php
+++ b/src/Route4Me/RouteParameters.php
@@ -2,7 +2,6 @@
namespace Route4Me;
-use phpDocumentor\Reflection\Types\Boolean;
use Route4Me\V5\Addresses\RouteAdvancedConstraints;
/**
@@ -54,7 +53,7 @@ class RouteParameters extends Common
/**
* By disabling optimization, the route optimization engine
* will not resequence the stops in your.
- * @var disable_optimization
+ * @var Boolean disable_optimization
*/
public $disable_optimization;
@@ -139,7 +138,7 @@ class RouteParameters extends Common
* When using a multiple driver algorithm, this is the maximum permissible duration of a generated route.