From 32c06d7c2cce4f94889abf85698b62f2216a223a Mon Sep 17 00:00:00 2001 From: Braktar Date: Tue, 6 Jul 2021 15:44:36 +0200 Subject: [PATCH] Convert bindump hash result to solution model --- lib/interpreters/split_clustering.rb | 1 - ...oorly_populated_route_limit_result.bindump | Bin 98918 -> 160465 bytes .../lib/interpreters/split_clustering_test.rb | 2 +- test/test_helper.rb | 56 ++++++++++++++++++ 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/lib/interpreters/split_clustering.rb b/lib/interpreters/split_clustering.rb index 0586b774b..343d056d6 100644 --- a/lib/interpreters/split_clustering.rb +++ b/lib/interpreters/split_clustering.rb @@ -508,7 +508,6 @@ def self.remove_poorly_populated_routes(vrp, solution, limit) vehicle.timewindow&.end && (vehicle.timewindow.end - vehicle.timewindow.start) route_duration = route.detail.total_time || (route.activities.last.timing.begin_time - route.activities.first.timing.begin_time) - log "route #{route.vehicle.id} time: #{route_duration}/#{vehicle_worktime} percent: " \ "#{((route_duration / (vehicle_worktime || route_duration).to_f) * 100).to_i}%", level: :info diff --git a/test/fixtures/max_split_poorly_populated_route_limit_result.bindump b/test/fixtures/max_split_poorly_populated_route_limit_result.bindump index 95f85550bf2902a1a2237d6560f6c7d8f44da0aa..27fe55f96ba41eea0ed582cc6168f7ee338e453c 100644 GIT binary patch literal 160465 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�WJZW~ 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 literal 98918 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�iL>x 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

W@m-6iPHSy z(9&zh5Y6o5JzYL%^pIjY3L^Kj)^L^OZ70 z!}traa{o|l<@{WkoIHm)Wx>ylkx4d)i9TZ8-DT2hDb0FyYS!Z|z@1cUf)7AYuJqdb zNi!KlIyud2$WSoO4U4m!CvI!JNX{P#D5yQB(2GtmiQblSS@vUQa+t#N&0`8;YZ12m_#bhVp1** zT*e`oRn^NWEs9Uc&yvXj2yUW?Ngc}Q&k~b+3c!zz$pNqv$Eh&)r{Y4yX%N6tV-EjR zx;LRlR;bx!A)B{P^u(^)J)N|ipB$5crS;6h7eWXMt4ke#J^Ri4rS7By5Sm~yHjYB; z0E;am#d)I2PmVFLVvUlQ4zA2kzm_j$Yn1o_uBgWaf~ir$`yybxOf^dU<7>`Yqx6dB zx*8??6YSVG(AGoPr0$PgeEV%jPoF;a;@fs_x$!vs uA93u0fA!%F*QrNU0afouE;)1J%+cdF-Es8z?YmQc+C{XG6B1!a?Eeq*Ak{Mf diff --git a/test/lib/interpreters/split_clustering_test.rb b/test/lib/interpreters/split_clustering_test.rb index 5c735137f..ef689ac64 100644 --- a/test/lib/interpreters/split_clustering_test.rb +++ b/test/lib/interpreters/split_clustering_test.rb @@ -551,7 +551,7 @@ def test_max_split_poorly_populated_route_limit_result result = Marshal.load(File.binread('test/fixtures/max_split_poorly_populated_route_limit_result.bindump')) # rubocop: disable Security/MarshalLoad Interpreters::SplitClustering.remove_poor_routes(vrp, result) - assert_equal 0, result[:unassigned].size, 'remove_poor_routes should not remove any services from this result' + assert_equal 0, result.unassigned.size, 'remove_poor_routes should not remove any services from this result' end def test_max_split_functionality diff --git a/test/test_helper.rb b/test/test_helper.rb index dc0b60d6a..296d667c2 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -210,6 +210,62 @@ def self.load_vrps(test, options = {}) vrps end + def self.convert_bin_result(vrp, filename) + result = Marshal.load(File.binread("test/fixtures/#{filename}.bindump")) + solution = hash_result_conversion(vrp, result) if result.is_a?(Hash) + bin_dump(filename, solution) + solution + end + + def self.hash_result_conversion(vrp, result) + routes = result[:routes].map{ |route| + time_detail = Models::RouteDetail.new(start_time: route[:start_time], + end_time: route[:end_time], + total_time: route[:total_time], + total_travel_time: route[:total_travel_time], + total_distance: route[:total_distance]) + loads = route[:initial_loads].map{ |c_load| + c_unit = Models::Unit.new(id: c_load[:unit_id]) + Models::Load.new(current: c_load[:value], + quantity: Models::Quantity.new(unit: c_unit, value: 0)) + } + vehicle = vrp.vehicles.find{ |v| v.id == route[:vehicle_id] } + activities = route[:activities].map.with_index{ |act, a_i| + times = Models::Timing.new(begin_time: act[:begin_time], end_time: act[:end_time] || act[:departure_time], + travel_time: act[:travel_time], travel_distance: act[:travel_distance]) + loads = act[:detail][:quantities]&.map{ |c_load| + c_unit = Models::Unit.new(id: c_load[:unit]) + Models::Load.new(current: c_load[:current_load], + quantity: Models::Quantity.new(unit: c_unit, value: c_load[:value])) + } + + if act[:service_id] + service = vrp.services.find{ |s| s.id == act[:service_id] } + service.route_activity(loads: loads, timing: times) + elsif act[:rest_id] + c_rest = vrp.rests.find{ |rest| rest.id == act[:rest_id] } + c_rest.route_activity(loads: loads) + elsif a_i.zero? + vehicle.start_depot_activity(loads: loads, timing: times) + else + vehicle.end_depot_activity(loads: loads, timing: times) + end + }.compact + + Models::SolutionRoute.new(activities: activities, vehicle: vehicle, initial_loads: loads, detail: time_detail) + } + + unassigned = result[:unassigned].map{ |act| + service = vrp.services.find{ |s| s.id == act[:service_id] } + service.route_activity + } + Models::Solution.new(routes: routes, unassigned: unassigned) + end + + def self.bin_dump(filename, content) + File.open("test/fixtures/#{filename}.bindump", 'wb') { |f| f.write(Marshal.dump(content)) } + end + def self.expand_vehicles(vrp) periodic = Interpreters::PeriodicVisits.new(vrp) periodic.generate_vehicles(vrp)