Spaces:
Running
Running
Commit ·
c4f2025
1
Parent(s): 610cbd2
fix(solver): show progressive sixty second routing solves
Browse filesRun the Bergamo field-service demo for the full 60 second lifecycle and replace the plateau-prone local-search setup with explicit list, swap, sublist, and reverse neighborhoods over TechnicianRoute.visits.
Use hill climbing with first-best-score-improving foraging so the solver reports real score improvements instead of equal-score churn. The verified LARGE run moves from -48hard/0soft through 0hard/696soft, 0hard/1461soft, 0hard/1723soft, and 0hard/1825soft before completing at 60000 ms.
- solver.toml +37 -6
solver.toml
CHANGED
|
@@ -1,17 +1,48 @@
|
|
| 1 |
[[phases]]
|
| 2 |
type = "construction_heuristic"
|
| 3 |
-
construction_heuristic_type = "
|
| 4 |
|
| 5 |
[[phases]]
|
| 6 |
type = "local_search"
|
| 7 |
|
| 8 |
[phases.acceptor]
|
| 9 |
-
|
| 10 |
-
type = "late_acceptance"
|
| 11 |
|
| 12 |
[phases.forager]
|
| 13 |
-
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
[termination]
|
| 17 |
-
seconds_spent_limit =
|
|
|
|
| 1 |
[[phases]]
|
| 2 |
type = "construction_heuristic"
|
| 3 |
+
construction_heuristic_type = "list_round_robin"
|
| 4 |
|
| 5 |
[[phases]]
|
| 6 |
type = "local_search"
|
| 7 |
|
| 8 |
[phases.acceptor]
|
| 9 |
+
type = "hill_climbing"
|
|
|
|
| 10 |
|
| 11 |
[phases.forager]
|
| 12 |
+
type = "first_best_score_improving"
|
| 13 |
+
|
| 14 |
+
[phases.move_selector]
|
| 15 |
+
type = "union_move_selector"
|
| 16 |
+
selection_order = "round_robin"
|
| 17 |
+
|
| 18 |
+
[[phases.move_selector.selectors]]
|
| 19 |
+
type = "list_change_move_selector"
|
| 20 |
+
entity_class = "TechnicianRoute"
|
| 21 |
+
variable_name = "visits"
|
| 22 |
+
|
| 23 |
+
[[phases.move_selector.selectors]]
|
| 24 |
+
type = "list_swap_move_selector"
|
| 25 |
+
entity_class = "TechnicianRoute"
|
| 26 |
+
variable_name = "visits"
|
| 27 |
+
|
| 28 |
+
[[phases.move_selector.selectors]]
|
| 29 |
+
type = "sublist_change_move_selector"
|
| 30 |
+
min_sublist_size = 1
|
| 31 |
+
max_sublist_size = 3
|
| 32 |
+
entity_class = "TechnicianRoute"
|
| 33 |
+
variable_name = "visits"
|
| 34 |
+
|
| 35 |
+
[[phases.move_selector.selectors]]
|
| 36 |
+
type = "sublist_swap_move_selector"
|
| 37 |
+
min_sublist_size = 1
|
| 38 |
+
max_sublist_size = 3
|
| 39 |
+
entity_class = "TechnicianRoute"
|
| 40 |
+
variable_name = "visits"
|
| 41 |
+
|
| 42 |
+
[[phases.move_selector.selectors]]
|
| 43 |
+
type = "list_reverse_move_selector"
|
| 44 |
+
entity_class = "TechnicianRoute"
|
| 45 |
+
variable_name = "visits"
|
| 46 |
|
| 47 |
[termination]
|
| 48 |
+
seconds_spent_limit = 60
|