【发布时间】:2020-04-22 10:36:36
【问题描述】:
我正在研究一个图论问题。假设我们想找到一个图 G=(V,E),使得存在一个 V 的分区 X,最多包含 k 个等价类。当 S 是分区 X 的成员时,变量 p_S 的值为 1,否则为零。所以我们有一个约束,对于 V 的所有子集 S,所有变量 p_S 的总和最多为 k。
所以我想要做的是遍历所有值为 1 的 p_S,并根据我从 S 中提取的元素定义更多约束。这些约束将保留等价类的成员共享一些相互属性。
是否可以通过这种方式访问 p_S 变量?我该怎么做?
另外,如果我被允许在我的约束中使用二进制变量作为系数,我知道我可以不用迭代我的二进制变量。这可能吗?
提前致谢!
【问题讨论】:
-
一般来说,你需要线性化它。是的,
if I'm allowed to use binary variables as coefficients in my constraints是这背后的基本概念,但一般来说,您不能乘两个变量,这意味着您需要线性化这些产品(二进制 * 二进制、二进制 * 整数、二进制* 续)(通过附加变量和约束)。对于这些线性化中的每一个,都需要不同的方法和假设(例如先验界限)!由于这非常依赖于模型(我们不知道),因此无需多说。 -
感谢您的回复。我不明白线性化的概念,你能提供一个 case binary* binary 的例子吗?它不必与我的模型相关。
-
@sascha 这些都是很好的例子,谢谢!如果你从你的回复中做出正式的回答,我会接受。
-
因此线性化二进制变量的乘积涉及制定约束,其中包含右侧的决策变量。我刚刚意识到,在 Python CPLEX API 中,右手边必须是实数。那么我该如何完成这项工作呢?
标签: python iteration graph-theory mathematical-optimization cplex