Follow-up to #1597. LP/MIP support transparent remote execution: is_remote_execution_enabled() (checks CUOPT_REMOTE_HOST/CUOPT_REMOTE_PORT, see pdlp/backend_selection.cpp) makes the normal solve_lp()/solve_mip() route to solve_lp_remote()/solve_mip_remote() — non-invasive, works from any interface (C/Python/CLI) without code changes.
VRP has no equivalent: routing's Solve() never checks the env or calls a remote backend. #1597 adds only the explicit cuopt.grpc.routing.RoutingClient (you call it directly). Note CUOPT_GRPC_SERVER (used by the RoutingClient tests) is a different knob from the transparent CUOPT_REMOTE_HOST/CUOPT_REMOTE_PORT path.
Scope
- Add
solve_vrp_remote() (host cpu_routing_problem_t → gRPC submit → RoutingSolution), mirroring solve_lp_remote/solve_mip_remote.
- Hook
is_remote_execution_enabled() into routing's Solve() entry point so a GPU-less routing.Solve(...) transparently runs on a remote server when CUOPT_REMOTE_HOST/CUOPT_REMOTE_PORT are set.
🤖 Generated with Claude Code
Follow-up to #1597. LP/MIP support transparent remote execution:
is_remote_execution_enabled()(checksCUOPT_REMOTE_HOST/CUOPT_REMOTE_PORT, seepdlp/backend_selection.cpp) makes the normalsolve_lp()/solve_mip()route tosolve_lp_remote()/solve_mip_remote()— non-invasive, works from any interface (C/Python/CLI) without code changes.VRP has no equivalent: routing's
Solve()never checks the env or calls a remote backend. #1597 adds only the explicitcuopt.grpc.routing.RoutingClient(you call it directly). NoteCUOPT_GRPC_SERVER(used by the RoutingClient tests) is a different knob from the transparentCUOPT_REMOTE_HOST/CUOPT_REMOTE_PORTpath.Scope
solve_vrp_remote()(hostcpu_routing_problem_t→ gRPC submit →RoutingSolution), mirroringsolve_lp_remote/solve_mip_remote.is_remote_execution_enabled()into routing'sSolve()entry point so a GPU-lessrouting.Solve(...)transparently runs on a remote server whenCUOPT_REMOTE_HOST/CUOPT_REMOTE_PORTare set.🤖 Generated with Claude Code