[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