首页 > 解决方案 > 使用python的非线性规划问题

问题描述

我有这个(非?)线性规划问题,不确定如何解决它。所以我有以下变量 x,y 及其界限:

x_lower=[0,0,0,0,0,0]
x_upper=[100,20,50,200,10,50]
list_y=[1.41,1.42,5.60,5.70,8.60,8.80]

我想通过以下条款传递这些:

back_true=(x*y)
back_false=(-x*y/y)
lay_true=(x+x*(y-1)**(-1))
lay_false=(-x*y/y)

其中 x 是一个随机整数,边界为 0,术语 x_upper[i] 与来自 list_y[i] 的术语“y”配对

这是为了获得 x 的组合,以最小化三个列表中项的和的最大值之间的差异,同时保持每个和结果的最小值非负。

res=[back_true[0],lay_false[1],back_false[2],lay_true[3],back_false[4],lay_true[5]]
res2=[back_false[0],lay_true[1],back_true[2],lay_false[3],back_false[4],lay_true[5]]
res3=[back_false[0],lay_true[1],back_false[2],lay_true[3],back_true[4],lay_false[5]])

因此,将通过使用以下与 list_y 配对的 lsits 来给出每个的最大值:

for x in [100,0,0,200,0,50] >>> res = 439.9634 (max); res2 = -13.59 ; res3 = -159.362
for x in [0,20,50,0,0,50] >>> res = -243.59 ; res2 = 404.0293 (max); res3 = -182.381
for x in [0,20,0,50,200,0] >>> res= 92.5531; res2 = -32.381; res3 = 1848.257 (max)

sum(res (max),res2 (max) ,res3 (max))= 2692.25

我想获得使三个 res 项的最大值之和最小化的组合。正如您所看到的,使一个术语的最大化违反了至少另一个的非负约束。

我不仅想将这些都保持在零以上,而且要获得三个“res”项的最大可能总和,即:

查找 'x' 的组合列表,其最小化 [sum(res,res2,res3) (maxes) 减去 sum(res,res2,res3) 使用 x 组合],而 res、res2、res3 中的每一个 >=0

有谁知道我该怎么做?

我正在与 scipy optimize 的 linprog 一起玩,但它似乎不需要像我想使用的那些更复杂的术语,所以不确定我是否可以使用它。

标签: python-3.xlinear-programmingscipy-optimize-minimize

解决方案


推荐阅读