用Python解决线性规划问题

3

我想使用Python解决线性规划问题。模型如下:

Maximizing x1 + x2  
S.t:  
    x1 + x2 <=1  
    0<= x1 , x2 <=1

所以我尝试了这个:

from gekko import GEKKO

model = GEKKO(remote=False)
x1 = model.Var(0.2 , lb=0 , ub=1)
x2 = model.Var(0.2 , lb=0 , ub=1)

model.Equation = (sum(x1 , x2) <=1)

model.Maximize(sum(x1 , x2))

但我收到的是:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_8024/1372822120.py in <module>
      6 x2 = model.Var(0.2 , lb=0 , ub=1)
      7 
----> 8 model.Equation = (sum(x1 , x2) <=1)
      9 
     10 model.Maximize(sum(x1 , x2))

~\Anaconda3\envs\Python3.10\lib\site-packages\gekko\gk_variable.py in __getitem__(self, key)
     78         return len(self.value)
     79     def __getitem__(self,key):
---> 80         return self.value[key]
     81     def __setitem__(self,key,value):
     82         self.value[key] = value

~\Anaconda3\envs\Python3.10\lib\site-packages\gekko\gk_operators.py in __getitem__(self, key)
    145 
    146     def __getitem__(self,key):
--> 147         return self.value[key]
    148 
    149     def __setattr__(self, name, value):

TypeError: 'float' object is not subscriptable

1
请[编辑]您的问题,将完整的错误信息包含在内。 - Code-Apprentice
4
sum(x1, x2)简单地改为x1 + x2 - Shayan
sum()接受一个可迭代对象和一个起始参数。 - Tomerikoo
但是...回溯中的代码和错误与您在问题中展示的不同。 - Tomerikoo
这组不等式有无限多个解。不确定您对此有何期望。 - Tim Roberts
显示剩余5条评论
1个回答

3

如我在评论区所提到的,只需将sum(x1 , x2)更改为x1 + x2即可解决问题。同时,您应该尝试使用model.solve()来解决model!因此:

from gekko import GEKKO

model = GEKKO(remote=False)
x1 = model.Var(0.2 , lb=0 , ub=1)
x2 = model.Var(0.2 , lb=0 , ub=1)

model.Equation = (x1 + x2 <=1)

model.Maximize(x1 + x2)
model.solve()

如果您想了解最佳解决方案并避免Gekko的完整报告,可以设置model.solve(disp=False),然后尝试:

x1[0] , x2[0]

这让我:

(1.0, 1.0)

假设你的目标函数为x1 + x2,你可以通过以下方式获取目标函数的最优值:

x1[0] + x2[0]
>>> 2.0

1
没错,在那儿还有一个 sum(x1,x2) - Tim Roberts
它产生了什么结果?我真的不想安装所有那些。 - Tim Roberts
@TimRoberts 我试了一下,只是出于好奇。它会输出很长的内容,最后显示“目标函数的最终值为-2.00000001947265”。但我不知道这意味着什么... - Tomerikoo
1
@TimRoberts 我会继续写关于它的内容!已编辑。 - Shayan
但是,但是,(1.0, 1.0) 违反了 x1+x2 <= 1 的限制。 - Tim Roberts
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接