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
是一个包含元素 6
和 12
的向量。那么 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
在 PuLP 中开发的优化问题中,我使用以下 objective 函数:
objective = p.lpSum(vec[r] for r in range(0,len(vec)))
所有变量都是非负整数,因此向量的总和给出了我的问题的单元总数。
现在我正在为这样一个事实而苦苦挣扎,即 PuLP 只给出了众多解决方案中的一个,我想将解决方案 space 缩小到有利于决策变量标准差最小的解决方案集的结果。
例如。假设 vec
是一个包含元素 6
和 12
的向量。那么 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