gekko - 为什么在 python GEKKO 中返回索引错误

标签 gekko

我想将 LINGO 代码转换为 Python GEKKO 代码。这是 Lingo 代码、lingo 结果和 gekko 代码。我不能写第二个和第三个约束。它返回索引错误,但我不明白为什么?有人可以帮忙吗? (这是一个图形着色问题)

from gekko import GEKKO    
import numpy as np
m = GEKKO(remote=False)
# x = m.Array(m.Var,(7,5),lb=0,ub=1,integer=True)
x = m.Array(m.Var,(6,6),lb=0,ub=1,integer=True)
y= np.array([1, 2, 3, 4, 5, 6])
country=6
arcs=np.array([[1,3],
[5,4],
[3,6],
[2,4],
[2,5],
[2,6],
[4,5],
[4,6]])

for i in range(6):
    m.Minimize(y)


for i in range(6):
    # for j in range(2):
        # m.Equation(m.sum(x[i,j])==1)
        m.Equation(m.sum(x[i,:])==1) 


for k in range (6):
     for i in range(8):
            m.Equation(x[arcs[i,1],k]+x[arcs[i,2],k]<=1)        
             # m.Equation(x[arcs[i,1],k]+x[arcs[i,2],k])<=1)      
             # m.Equation(m.sum(x[arcs[i,1],k],x[arcs[i,2],k]))<=1) 

修订版为=

from gekko import GEKKO    
import numpy as np

m = GEKKO(remote=False)

x = m.Array(m.Var,(6,6),lb=0,ub=1,integer=True)
y = m.Array(m.Var,6,lb=0,ub=1,integer=True)
y= np.array([1, 2, 3, 4, 5, 6])
country=6
arcs=np.array([[1,3],
[1,4],
[3,4],
[3,4],
[4,5],
[2,6],
[4,5],
[4,6]])

for i in range(6):
    m.Minimize(y[i])

for i in range(6):
    m.Equation(m.sum(x[i,:])==1) 

for k in range (6):
     for i in range(8):
            m.Equation(x[arcs[i,0]-1,k-1]+x[arcs[i,1]-1,k-1]<=1)


for i in range(6): 
           m.Equation(m.sum(x[i,:]<=y[i])

m.options.solver = 1
m.solve()
print('Objective Function: ' + str(m.options.objfcnval))
print(x)
print(y)

现在它给出了 m.solve 和 m 选项的无效语法错误?

最佳答案

使用 Python 需要考虑的几件事:

  • 列表和数组是零索引,因此您需要将它们相对于 LINDO/LINGO 语言移动 -1
  • 目标函数y 是一个常量列表。 Gekko 生成警告,指出该表达式中没有变量。

这是您的 Python 脚本的更正版本,您可能需要用正确的目标陈述和任何其他所需的方程式来补充。

from gekko import GEKKO    
import numpy as np
m = GEKKO(remote=False)
x = m.Array(m.Var,(6,6),lb=0,ub=1,integer=True)
y= np.array([1, 2, 3, 4, 5, 6])
country=6
arcs=np.array([[1,3],
[1,4],
[3,4],
[2,4],
[2,5],
[2,6],
[4,5],
[4,6]])

for i in range(6):
    m.Minimize(y[i])

for i in range(6):
    m.Equation(m.sum(x[i,:])==1) 

for k in range (6):
     for i in range(8):
            m.Equation(x[arcs[i,0]-1,k]\
                      +x[arcs[i,1]-1,k]<=1)

m.solve()

对编辑的回应

修订版在 m.sum() 上缺少右括号。这是更正后的版本。

from gekko import GEKKO    
import numpy as np

m = GEKKO(remote=False)

x = m.Array(m.Var,(6,6),lb=0,ub=1,integer=True)
y = m.Array(m.Var,6,lb=0,ub=1,integer=True)
y= np.array([1, 2, 3, 4, 5, 6])
country=6
arcs=np.array([[1,3],[1,4],[3,4],[3,4],[4,5],[2,6],[4,5],[4,6]])

for i in range(6):
    m.Minimize(y[i])
for i in range(6):
    m.Equation(m.sum(x[i,:])==1) 
for k in range (6):
     for i in range(8):
            m.Equation(x[arcs[i,0]-1,k-1]+x[arcs[i,1]-1,k-1]<=1)

for i in range(6): 
           m.Equation(m.sum(x[i,:])<=y[i])
m.options.solver = 1
m.solve()
print('Objective Function: ' + str(m.options.objfcnval))
print(x)
print(y)

您可以在 troubleshooting gekko applications with tutorial 18. 上找到更多提示

关于gekko - 为什么在 python GEKKO 中返回索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61939220/

相关文章:

node.js - Gekko Auto Trading bot 在 ubuntu 上安装失败

python - 关于在 Python 中访问 Gekko 数组索引的问题

python - 在 GEKKO 中解决后退地平线控制

gekko - 为什么这段代码使用不同的程序会返回不同的结果?

python - 采纳文件

optimization - Pyomo 和 Gekko 定值(value)与 Excel 不同

python - 使用 Gekko 的 ARX 模型的 MPC

python - 最小化温度向量中每个 T 值的多变量函数

python - 在 Python 中使用 Gekko 运行时间序列线性优化

python - 如何知道 GEKKO 解决我的模型需要多长时间?