optimization - 根据 Pyomo 的说法,这怎么可能是线性的?
问题描述
在线性化一些包含除法的约束时,我找到了一个有效的公式,并且被 Pyomo 解释为线性,我完全不知道为什么:
mod.coupling_temp2[m]*sum(mod.same_service[o1, o2, m] for o1, o2 in product(mod.OPERATIONS, mod.OPERATIONS)) == mod.sum_similarities[m]
Coupling_temp2 和 sum_similarities 是实数,而 same_service 是二进制数。变量的乘法不应该总是被认为是非线性的吗?每次我试图将约束表示为变量的乘法,即使它们是二进制文件,我总是被告知约束是非线性的,但也许我正在绊倒。
解决方案
一般来说,你写的不是线性的。但是,如果满足以下条件,求解器界面可以将其视为线性:
- 您已经修复了
coupling_temp2
orsame_service
变量(即,一个不再是自由变量,因此被视为常量) OPERATIONS
是一个空集(空集的叉积的和为 0)。
也就是说,一些“线性”求解器(如 Gurobi 和 Cplex)可以求解 QP:问题也可能是二次的,并且求解器可以接受。