From 37c7312e59eacc3433d55517cfdde343fa7ca7bd Mon Sep 17 00:00:00 2001 From: fonsecadeline Date: Thu, 15 Apr 2021 12:17:41 +0200 Subject: [PATCH] Skills available with scheduling --- CHANGELOG.md | 1 + .../scheduling_data_initialisation.rb | 1 + lib/heuristics/scheduling_heuristic.rb | 9 ++++++++- ...dd_missing_visits_candidate_routes.bindump | Bin 1134719 -> 1247042 bytes ...ut_allow_partial_assignment_routes.bindump | Bin 2156 -> 4028 bytes .../scheduling_instance_validity_test.rb | 8 -------- test/lib/heuristics/scheduling_test.rb | 14 ++++++++++++++ wrappers/ortools.rb | 2 +- wrappers/wrapper.rb | 13 ++++++------- 9 files changed, 31 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b199acad2..5adfe988d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## [v1.8.0-dev] - Unreleased ### Added +- Support skills in periodic heuristic (`first_solution_strategy='periodic'`) [#194](https://github.com/Mapotempo/optimizer-api/pull/194) ### Changed diff --git a/lib/heuristics/concerns/scheduling_data_initialisation.rb b/lib/heuristics/concerns/scheduling_data_initialisation.rb index 7e38afeb3..2b8e94658 100644 --- a/lib/heuristics/concerns/scheduling_data_initialisation.rb +++ b/lib/heuristics/concerns/scheduling_data_initialisation.rb @@ -26,6 +26,7 @@ def generate_route_structure(vrp) capacity = compute_capacities(vehicle[:capacities], true) vrp.units.reject{ |unit| capacity.has_key?(unit[:id]) }.each{ |unit| capacity[unit[:id]] = 0.0 } @candidate_routes[vehicle.original_id][vehicle.global_day_index] = { + vehicle: vehicle, vehicle_id: vehicle.id, global_day_index: vehicle.global_day_index, tw_start: (vehicle.timewindow.start < 84600) ? vehicle.timewindow.start : vehicle.timewindow.start - vehicle.global_day_index * 86400, diff --git a/lib/heuristics/scheduling_heuristic.rb b/lib/heuristics/scheduling_heuristic.rb index fafdb254d..4ac828a6b 100644 --- a/lib/heuristics/scheduling_heuristic.rb +++ b/lib/heuristics/scheduling_heuristic.rb @@ -842,8 +842,15 @@ def compatible_days(service_id, day) !@services_data[service_id][:raw].unavailable_days.include?(day) end + def compatible_vehicle(service_id, route_data) + # WARNING : this does not consider vehicle alternative skills properly + # we would need to know which skill_set is required in order that all services on same vehicle are compatible + route_data[:vehicle].skills.any?{ |skill_set| (@services_data[service_id][:raw].skills - skill_set).empty? } + end + def service_compatible_with_route(service_id, route_data) - compatible_days(service_id, route_data[:global_day_index]) + compatible_days(service_id, route_data[:global_day_index]) && + compatible_vehicle(service_id, route_data) end def find_best_index(service_id, route_data, first_visit = true) diff --git a/test/fixtures/add_missing_visits_candidate_routes.bindump b/test/fixtures/add_missing_visits_candidate_routes.bindump index 86fb190603ab0435214c8de63ed6a235c34e8347..2ea80a34df13e74a083767f9b6a0e1dc1e088873 100644 GIT binary patch delta 168078 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 aq-KewTZeTc;>moycfGsQ%!T5+-2V@ObBfRa delta 55702 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 I28Y`J2P%$;i2wiq diff --git a/test/fixtures/reaffecting_without_allow_partial_assignment_routes.bindump b/test/fixtures/reaffecting_without_allow_partial_assignment_routes.bindump index c9d971aaf78252777156d8ae5ab8db77ac349609..28219429a9c369aa89125f1cdfd64afe3e9247f8 100644 GIT binary patch literal 4028 zcmcgv+iu%N5G90yq;9sXSa$8iPUE(5ua4~4sk7Sxd`VgZEl{9BU;IF<$yGcsrDe&L zFBO9N1KK{Mf6`AW`rbbX@(G>YHC2jAAOx=Uz!hh9dAM`V%&hp1JG2ir=1%!B1QGY! zHnE>{hBdH;OJqLtLU^#z$c#2FqE?5ro<-t_MSjRGeCUV#94u0oXMQSKBB68{lPX%g zA42KXU*wi{`>}w&^c7ys+#0L}T=u59dN@d!1ks05d_?AYOeS!yA)MZ}-bp=RF$+Lm z3@y^k?)`{&B|4UR>>PT7o}WO-eF;6@CaYt<5O8n(0R62*3?xtd5Lfk6d?l%8lVl-_ zKM<(|m&~hQzYFI)M5~fY5vPaluudEm-CW9(QwX^K(Cly`ZsT7M1imNa2@n00%R%gq zf<-b}AmJ3lLSkzyN#K-4Q1X8vt|k?4@U0ow$jiB(9z$2QhjqG~+rhrt0eyGGxUpBj zqN{k_hSJgtdPk3I3Z1SO0Ui|qjGY76{X+rZhyVz--X^sxvIJTDPJ}#43Hi}vm`xfU zlPKX4GMx_Z(-yL~rn$_h_Ira!LL324F!B{Wr*zBvZL+HUNXcMq!XkI|gkiJzm_-%> z!Mn({RtIb)qqdQIw3b;Ig32|_>uilhT4P?d(jtwkROw-O#0^+Nn+F@CY|)~((wL*J zxoB)sW(jA97FjLM`BxM5o{%CrV;3D#kqHY) zal*TpMwrH=*@Hgx;AifqG3zTBh*J!%HR!Wb1`#{LLdU921#y4i(k2z}n5D?fqI9oqcf~}ah75<^NMF<3bLFj-WfS7k8JH*&2(kY@Jy_o`K>C(CMEPg-vX@~@#fl3Qq-B~X%-D`0)nTx8D z@Kho>)WK|-zv@cB(F68yiDJ{uF|GR;uC%GENh&LnXk|QXS}oW$)e&?0(7B;S=kaQ^ z=|Y<}=`FeluBtG)bXYF5h226`8#`Ck&U2*|jz+hMwy;+KFm?{$9}R#b0wBx;z!wDo zW9I-~{;GC>BLX1I1i;kJ_To1MfFlAR%zB&N74$uo5xVct4Qzn#Bk3RD?}vEZ$NNpZ zKEnHt@%n^*N}Jwo`WgB@_wLXwZ;d|a&~}Gzcj%5PKl+gF(mkAhFfQ3mu&RRHuWZ<9X3>#6sEetl?r+w>dss%$vGY;h*CWk(a|fOB)%V$G5%6VG*+ zax_!!1XKEyMJC;wV+xP_vE$af^1tKO*tx96BNmeq$2Zi~)WUpqsQ_?9fY+VZj|+8W z?A#7Ee^&rFA^^h7wk!-E*Ad&*VwWexHpDqlo}Jil)dTVHd;1o)uUi<7sMYIw;M6Ai zw+6rw0T5=kVjD@WBX(JfU6~NuFz-O+=ER<94>a*yhpCEYsye}x`Md5w_2!uR-+SQH glYQDZ%ha;?Q-Ac}h-IO_S!Q|Q8A+}qc2$Y}FD{oxwg3PC delta 76 zcmdlZ|3+Yf6r<=yX)7j{Otxy#&E>4+j4YY#)uNM^vKO;tasY+SbC@x*WpY-FTC+_K b 1 - } + vrp.vehicles.none?{ |vehicle| vehicle.skills.size > 1 } + end + + def assert_vehicles_no_alternative_skills_with_periodic_heuristic(vrp) + !vrp.preprocessing_first_solution_strategy.include?('periodic') || + vrp.vehicles.none?{ |vehicle| vehicle.skills.size > 1 } end def assert_no_direct_shipments(vrp) @@ -295,10 +298,6 @@ def assert_possible_to_get_distances_if_maximum_ride_distance(vrp) vrp.vehicles.none?(&:maximum_ride_distance) || (vrp.points.all?{ |point| point.location&.lat } || vrp.matrices.all?{ |matrix| matrix.distance && !matrix.distance.empty? }) end - def assert_no_skills_if_heuristic(vrp) - vrp.services.none?{ |service| !service.skills.empty? } || vrp.vehicles.none?{ |vehicle| !vehicle.skills.flatten.empty? } || vrp.preprocessing_first_solution_strategy.to_a.first != 'periodic' || !vrp.preprocessing_partitions.empty? - end - def assert_no_vehicle_free_approach_or_return_if_heuristic(vrp) vrp.vehicles.none?{ |vehicle| vehicle.free_approach || vehicle.free_return } || vrp.preprocessing_first_solution_strategy.to_a.first != 'periodic' end