PuLP:最小化决策变量的标准差

PuLP: Minimizing the standard deviation of decision variables

在 PuLP 中开发的优化问题中,我使用以下 objective 函数:

objective = p.lpSum(vec[r] for r in range(0,len(vec)))

所有变量都是非负整数,因此向量的总和给出了我的问题的单元总数。 现在我正在为这样一个事实而苦苦挣扎,即 PuLP 只给出了众多解决方案中的一个,我想将解决方案 space 缩小到有利于决策变量标准差最小的解决方案集的结果。 例如。假设 vec 是一个包含元素 612 的向量。那么 7/11、8/10、9/9 都是同样可行的解决方案,我希望 PuLP 在 9/9 到达。 然后 objective

objective = p.lpSum(vec[r]*vec[r] for r in range(0,len(vec)))

显然会创建一个成本函数,这将有助于解决这个问题,但遗憾的是,它是非线性的,PuLP 会抛出错误。 谁能指出我可能的解决方案?

您可以最小化范围或带宽,而不是最小化标准偏差(本质上是 non-linear)。沿着:

 minimize maxv-minv
 maxv >= vec[r]   for all r
 minv <= vec[r]   for all r