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

Feature request: syntax for lexicographic and Pareto optimality #741

Open
matsc-at-sics-se opened this issue Oct 31, 2023 · 1 comment
Open

Comments

@matsc-at-sics-se
Copy link

Currently, solve items have the syntax:

<solve-item> ::= "solve" <annotations> "satisfy"
               | "solve" <annotations> "minimize" <expr>
               | "solve" <annotations> "maximize" <expr>

Sometimes, it's useful or desirable to have a lexicographic objective instead of a scalar one. I suggest adding the following syntax for that:

               | "solve" <annotations> "lex_minimize" <variables>
               | "solve" <annotations> "lex_maximize" <variables>

I think that's what you, Guido, had in mind when we were chatting at CP 2023.
It later occurred to me that a very similar syntax suggests itself for Pareto optimization for multiple objectives. I suggest:

               | "solve" <annotations> "pareto_minimize" <variables>
               | "solve" <annotations> "pareto_maximize" <variables>

The idea for the latter items is:

  • Without the -a flag: the search runs to completion (or timeout), at which point the collected set of mutually non-dominated solutions are output.
  • With the -a flag: each time an intermediate non-dominated solution is found, it is output. Note that such a solution can turn out to be dominated by solutions found later.

It is well known how and not too complicated to implement this functionality in solvers. I thought that having a standardized MiniZinc syntax for it might encourage solver implementers to get it done.

What do you think?

@informarte
Copy link

Notice that MiniZinc already has experimental annotations for lexicographic optimization, see https://github.com/MiniZinc/libminizinc/blob/master/share/minizinc/std/experimental.mzn.

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

No branches or pull requests

3 participants