-1

I am trying to solve a large routing problem with hundreds of pickup and delivery constraints, time-windows and demands. Within 2 seconds the solver states "no assignment found". Surely if it continued looking for a solution a bit longer it might find one? Or, if it has a proof that the problem is not feasible it could give some details? What is going on here?

Leevi L
  • 1,538
  • 2
  • 13
  • 28

1 Answers1

1

There are different status codes used by the solver, as you can see here in the official documentation: https://developers.google.com/optimization/routing/routing_options.

There are two distinct statuses for FAIL: ROUTING_FAIL_TIMEOUT and ROUTING_FAIL so it seems plausible that the solver has a proof of infeasibility. However, the solver relies on heuristics both to find initial solutions and to improve existing solutions while relying on constraint programming techniques such as propagation to check whether assignments are feasible.

Proving infeasibility is very difficult for a complex VRP problem since you need to identify some subset of mutually infeasible constraints and be able to deduce that no solution can satisfy them all at the same time. This is an NP-complete problem even for 3-SAT and while you can often do this in practice for SAT problems, it becomes very hard when the domains of the variables are large. I therefore doubt that there is a proof in your sense when the solver fails, but rather a "heuristic" FAIL.

Regarding details it is possible to log the search via the SearchLog or InitGoogleLogging. Look at the nurses_cp.cpp example: google::InitGoogleLogging(argv[0]);

hhr
  • 11
  • 4
  • > but rather a "heuristic" FAIL. Yes. > Look at the nurses_cp.cpp example: google::InitGoogleLogging(argv[0]); I will check it out. A heuristic fail might also hold some information. – Leevi L Oct 23 '19 at 12:48