Skip to content

[BUG] Routing solver: break-dimension bugs #1195

Open

Description

@np96

Describe the bug

For the entire problem setup and reproduce, see repro_break_dim_bugs.py.

Setup Observed Expected
A unreachable break TW [5, 5], break loc 200 s away status 0, route 0→1→0 (break silently missing) status 1 INFEASIBLE
B break TW [100, 200], customer at t=10, route can finish at t=20 status 0, route 0→2→1→0, cost 410.25 status 0, route 0→1→0, cost 20

Both stem from a single design assumption: every route has exactly N breaks. The cost formula max(0, breaks − N) only penalizes excess; squeeze unconditionally inserts every dim; eject_until_feasible protects breaks; find_break_insertions only moves existing breaks.

Observed

expect status 1 since the problem is infeasible
  A: cost=20.00 vehicles=1
      vehicle 0: 0(Depot) -> 1(Delivery) -> 0(Depot)
expect status 0 and no break in solution since it is not needed
  B: cost=410.25 vehicles=1
      vehicle 0: 0(Depot) -> 2(Break) -> 1(Delivery) -> 0(Depot)

Expected

expect status 1 since the problem is infeasible
  A: INFEASIBLE (status=1)
expect status 0 and no break in solution since it is not needed
  B: cost=20.00 vehicles=1
      vehicle 0: 0(Depot) -> 1(Delivery) -> 0(Depot)

Why it matters

This issue negatively affects UX and is a blocker for feature development.
Case A is a bug with straightforward fix.
Case B appears to be a solver/design limitation rather than a simple feasibility bug.

Environment

  • cuOpt: b311a990 (main), built from source (Release).
  • Single A100 80 GB PCIe
  • Driver Version: 580.65.06, CUDA Version: 13.0, nvcc V13.1.115
  • Linux 5.15.179, Python 3.14, miniconda.

Notes

  • Adding distance breaks semantics forces EVs travel around chargers to comply with the required breaks due to issue B.
  • To fix case A override inf_cost[BREAK] in route_t::compute_cost with max(0, required - breaks) using a dynamic required-count derived from the route's actual arrival_at_depot. Squeeze still inserts every dim so no construction path changes; all 83 routing tests pass.
  • an attempt to add in-LS eject-only candidate to fix case B perturbed LS convergence (heterogenous_breaks became flaky).

Activity

  1. added
    bugSomething isn't working
    on May 9, 2026
  2. changed the title [-][BUG][/-] [+][BUG] Routing solver: non-deterministic infeasibility and SIGFPE on break dimensions[/+] on May 9, 2026
  3. changed the title [-][BUG] Routing solver: non-deterministic infeasibility and SIGFPE on break dimensions[/-] [+][BUG] Routing solver: break-dimension bugs[/+] on May 11, 2026
  4. np96 commented on May 11, 2026

    @np96
    ContributorAuthor

    I've reframed the issue. Initially had bad setup with cached builds.
    @rg20 @anandhkb, please check case B.

  5. assigned and unassigned on May 11, 2026
  6. github-actions commented on Jun 2, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

  7. github-actions commented on Jun 24, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

  8. github-actions commented on Jul 16, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

  9. github-actions commented on Aug 6, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

  10. github-actions commented on Aug 27, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

  11. added a commit that references this issue on Sep 10, 2026
  12. np96 commented on Sep 11, 2026

    @np96
    ContributorAuthor

    @rg20 I've updated a fix PR, I believe this should both issues: unnecessary break enforcement and false feasibility.

  13. github-actions commented on Oct 3, 2026

    @github-actions

    🔔 Hi @anandhkb @rg20, this issue has had no activity for 21 days. Please update or let us know if it can be closed. Thank you!

    If this is an "epic" issue, then please add the "epic" label to this issue.
    If it is a PR and not ready for review, then please convert this to draft.
    If you just want to switch off this notification, then use the "skip inactivity reminder" label.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions