首页 > 解决方案 > 根据 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 是二进制数。变量的乘法不应该总是被认为是非线性的吗?每次我试图将约束表示为变量的乘法,即使它们是二进制文件,我总是被告知约束是非线性的,但也许我正在绊倒。

标签: optimizationlinear-programmingpyomo

解决方案


一般来说,你写的不是线性的。但是,如果满足以下条件,求解器界面可以将其视为线性:

  • 您已经修复了coupling_temp2orsame_service变量(即,一个不再是自由变量,因此被视为常量)
  • OPERATIONS是一个空集(空集的叉积的和为 0)。

也就是说,一些“线性”求解器(如 Gurobi 和 Cplex)可以求解 QP:问题也可能二次的,并且求解器可以接受。


推荐阅读