在PuLP开发的一个优化问题中,我使用以下目标函数:
objective = p.lpSum(vec[r] for r in range(0,len(vec)))
所有变量都是非负整数,因此向量上的和给出了我的问题的总单位数。现在我正在努力解决这样一个事实,即PuLP只给出了许多解决方案中的一个,我希望将解决方案空间缩小到有利于具有最小决策变量标准差的解决方案集的结果。例如,vec
是包含元素6
和12
的向量。那么7/11、8/10、9/9都是同样可行的解决方案,我希望PuLP达到9/9。然后目标
objective = p.lpSum(vec[r]*vec[r] for r in range(0,len(vec)))
显然会创建一个成本函数,这将有助于这种情况,但是,它是非线性的,并且PuLP会抛出一个错误。谁能给我指出一个可能的解决方案?
您可以最小化范围或带宽,而不是最小化标准偏差(本质上是非线性的)。沿着以下行:
minimize maxv-minv
maxv >= vec[r] for all r
minv <= vec[r] for all r