You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We have observed what seems to be performance degradation when we use incremental solving in optimization tasks and timeouts occur during a sequence of incremental solves.
Consider a simplified case in which we run two solves in a row on the same ASP program using the incremental API. We run the first solve with a timeout of 5 sec and the second solve with a timeout of 60 sec. Both solves happen to time out, but the best cost found by the first (5 sec) solve is always better than the best cost found by the second (60 sec) solve. Is there anything we can do so that the 60 sec solve is more likely to return an equal or better cost than the 5 sec call? Perhaps there is a way to clean up the state of the search after the first solve so that the second call can start more or less "from scratch"? More details on one of the scenarios we experimented with is below.
Thanks!
The solving method carries out three main steps:
Set up an async solve by calling SolveHandle::solve(std::vector<literal_t>(),NULL,true)
Iteratively retrieve each model and keep track of the best cost vector found
If the timeout is reached, call SolveHandle::cancel() and return
We call the solving method twice in a row without changing the ASP program:
First, we call it with a timeout of 5 sec. The call times out, with a best cost of 308100
Next, we call it with a timeout of 60 sec. The call times out. The best cost returned is never as good as the cost found with the 5 sec timeout. In our experiments we have seen values as low as 309800 and as high as 366900.
Incidentally, we attempted the suggestions from #176 but they didn't make a difference.
The text was updated successfully, but these errors were encountered:
We have observed what seems to be performance degradation when we use incremental solving in optimization tasks and timeouts occur during a sequence of incremental solves.
Consider a simplified case in which we run two solves in a row on the same ASP program using the incremental API. We run the first solve with a timeout of 5 sec and the second solve with a timeout of 60 sec. Both solves happen to time out, but the best cost found by the first (5 sec) solve is always better than the best cost found by the second (60 sec) solve. Is there anything we can do so that the 60 sec solve is more likely to return an equal or better cost than the 5 sec call? Perhaps there is a way to clean up the state of the search after the first solve so that the second call can start more or less "from scratch"? More details on one of the scenarios we experimented with is below.
Thanks!
The solving method carries out three main steps:
We call the solving method twice in a row without changing the ASP program:
Incidentally, we attempted the suggestions from #176 but they didn't make a difference.
The text was updated successfully, but these errors were encountered: