我有一个关于使用SCIP在分支和价格中分支的问题。 SCIP通常会在原始变量上分支吗?例如,在VRP示例中,它是基于主要问题变量还是原始问题变量分支?
如果要在原始变量上分支,是否需要添加自己的分支规则?
最佳答案
当单独谈论SCIP时,默认情况下,SCIP只会在模型中存在的变量上分支(这是进行分支和定价时的主变量)。 VRP示例只是一个针对定价者的非常简短的示例,并且没有实现特定于问题的分支规则。但是,通常,强烈建议实现自己的问题特定的分支规则,如在着色和装箱示例中所做的那样。它们都实现了Ryan&Foster分支。
Ben是正确的,分支到原始变量本身通常不是一个好主意,因为这可能会重新引入对称性。但是,主变量本身的分支通常也很糟糕,因为它们数量很大,而且只有极少数是非零的,因此分支将非常不平衡。在将变量固定为零之后,必须确保分支不会再次生成该变量的副本。
因此,我的建议是在没有对称性的情况下分支原始变量,或者像Ryan-Foster分支规则那样在约束(起源于原始问题)上分支。
另外,您应该看看GCG,它已经实现了包含通用分支规则的通用分支和价格。您需要将原始模型读入GCG,然后将根据您提供的结构对Dantzig-Wolfe进行重新表述。
关于c++ - SCIP中的分行和价格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28709002/