Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement portfolio and/or parallel solvers #7

Open
Lipen opened this issue Nov 20, 2021 · 0 comments
Open

Implement portfolio and/or parallel solvers #7

Lipen opened this issue Nov 20, 2021 · 0 comments

Comments

@Lipen
Copy link
Owner

Lipen commented Nov 20, 2021

We need to provide an interface for portfolio SAT solvers.
Portfolio solvers are solvers that spawn multiple instances of some SAT solver with different internal parameters, or just multiple instances of different solvers. In turn, these solvers try to solve the SAT problem in parallel — whichever solves first, wins. Some parallel/portfolio solver implementation (e.g., painless) also support sharing the learnt clauses etc. Nevertheless, in kotlin-satlib we just have to provide a common interface for such portfolio solvers.

  • To begin with, we could implement the simplest strategy of spawning all the supported solvers (MiniSat, Glucose, Cadical, etc) without any sharing of the internal data. Additionally, we could spawn multiple instances of, e.g., MiniSat, with different random seeds.
  • Next, we have to make sure that the resulting portfolio solver is capable of solving incrementally (we might want to asynchronously interrupt other solvers).
  • After that, we could also support dropping "bad" (e.g. slow or inefficient) solvers from the portfolio, maybe even replacing them with new instances.
  • While doing all of the above, we should either keep the interface the same as before (interface Solver), or derive/devise the new one (interface PortfolioSolver).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant