-
Notifications
You must be signed in to change notification settings - Fork 3
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
Have @disjunction
automatically add exactly one constraints with a keyword argument
#72
Comments
I think we should force this on the @disjunction call. It wasn't there before because we couldn't distinguish Nested from non nested disjunctions. Now that we can, we can add the appropriate Exactly constraint. |
Ok, so you would prefer something like |
I think we should add it and not give the user the option of not adding it. |
One thing to consider is that under the new formal definition of GDP it seems like we are decoupling the exactly one constraint from the disjunction, so there might be cases where an exactly one constraint is not given. So, would it not be better to give the user an option to not add it and then have reformulations error that rely on this assumption? |
@bernalde, do you have any thoughts on this? |
This recent paper always includes the exactly constraint as part of the extended GDP notation: https://arxiv.org/pdf/2303.04375.pdf. |
Right and this paper also explicitly uses an exactly one constraint: https://www.sciencedirect.com/science/article/pii/S009813542300217X. The question is whether GDP requires there to always be an exactly one constraint. For instance, would it be possible to enforce exactly 2 out of 3 disjuncts? |
Not unless there were some valid reformulation, which is currently not the case. Conceptually, you need to select exactly one disjunct region (even if they are not proper (have some overlap)). |
The "exactly one" is an explicit way of writing an exclusive or for more than 2 elements. In GDP, it was usually written this exclusive or which is not quite well defined. In disjunctive programming, you do not enforce the "only one" condition; it is a disjunction in its true case (at least one), i.e., sum_i y_i <= 1. |
Thanks for the input @bernalde. After talking with @hdavid16 offline, the game plan is as follows:
This will enable users to specify things like |
Since 99% of the time this is the case, automating it would be nice. I think we should make it opt-in (i.e., the default would be
false
).One other thing to consider is whether the reformulations are still valid if this constraint is not given.
The text was updated successfully, but these errors were encountered: