[SCIP] Question on symmetry handling with additional plugins
Christopher Hojny
c.hojny at tue.nl
Fri Feb 23 18:41:19 CET 2024
Dear Matheus,
In the current SCIP release, automatic symmetry handling in the presence
of custom constraint handlers is unfortunately not possible. The reason
is that we hard-coded symmetry detection mechanisms for the different
constraint handlers that are provided with the SCIP release. If an
unknown constraint type is detected, symmetry detection is disabled.
The current version of SCIP can thus only support symmetry handling if
you manually add symmetry handling constraints. If you know a set of
permutations that act on binary variables, you can use the function
cons_symresack.c:SCIPcreateSymbreakCons()
to explicitly add a separate symmetry handling constraint for each of
these permutations. In case you know that your symmetries have a
particular structure, you can make use of the orbitope constraint handler.
Orbitopes assume that you can arrange the binary variables of your
problem in a (p x q)-matrix such that the symmetries act on the
variables by reordering the columns of this matrix. That is, if you
exchange the first entry of column 1 and 2, then also the remaining
entries of these columns need to be exchanged simultaneously.
With the next release of SCIP, we will resolve the issue regarding
custom constraints. Constraint handlers will support an optional plug-in
that allows you to pass symmetry information of custom constraints to
SCIP. This feature is already available on github
https://github.com/scipopt/scip/tree/master
and an example illustrating the usage of this feature is provided in the
doxygen documentation that you can create.
If you would like to try this new feature, I am more than happy to
provide you further information.
Best,
Christopher
On 23-02-2024 15:43, Matheus Ota wrote:
>
> You don't often get email from matheusota at gmail.com. Learn why this is
> important <https://aka.ms/LearnAboutSenderIdentification>
>
>
> Dear SCIP team,
>
> I've implemented in SCIP/C++ a branch-and-cut algorithm where the
> cutting-planes are separated via a constraint handler. I want to add
> symmetry handling methods on top of this algorithm (like shifted column
> inequalities). So this leads me to the following question.
>
> - Looking at the documentation I can see that I may be able to do this
> easily by just activating a flag
> (https://www.scipopt.org/doc/html/SYMMETRY.php
> <https://eur02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.scipopt.org%2Fdoc%2Fhtml%2FSYMMETRY.php&data=05%7C02%7C%7Ce1c33f42b4874a096f9f08dc347deee9%7Ccc7df24760ce4a0f9d75704cf60efc64%7C0%7C0%7C638442962679529273%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=p7pEfuEnwryp9gCAHqT3DMGW9lH02z96AClXQcXzAZM%3D&reserved=0>). However I wonder if the additional cutting planes that I add iteratively will affect the symmetry handling. Do I need to manually include the orbitope plugin? And if so, how do I do that? Is there any example?
>
> Thank you for your time,
> Matheus
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip
More information about the Scip
mailing list