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.'"; 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.
'; + } else { + echo "************ $key *************
"; + Route4Me::simplePrint((array) $value, true); + echo '*******************************
'; + } +} +echo "