GEKKO optimizer @error: Inequality Definition invalid inequalities: z > x < y

GEKKO optimizer @error: Inequality Definition invalid inequalities: z > x < y

我正在尝试使用 Gekko 包求解 MINLP。 一个简单的问题如下所示。

the optimization problem

我写了下面的代码,但它给了我这个错误

@error:不等式定义 无效的不等式:z > x < y

from gekko import GEKKO

model = GEKKO()
model.options.SOLVER = 1

#define the inputs
R=[1000 for i in range(nflows)]
C=[[1000 for i in range(n_nodes)] for j in range(n_nodes)]


#define x_ij
x = [[model.Var(value=1, lb=0, ub=1, integer=True) for j in range(n_nodes)] for i in range(n_nodes)]
q = [[[model.Var(value=1/n_nodes, lb=0, ub=1, integer=False) for j in range(n_nodes)] for i in range(n_nodes)] for k in range(nflows)]


#define the objective
model.Obj(sum(sum((x[i][j] /(C[i][j] - R[k] * q[k][i][j] for k in range(nflows))) for j in range(n_nodes)) for i in range(n_nodes)))

n_const=0
for k in flows:
    for i in range(n_nodes):
        n_const += 1
        if checksource (i, k, flows):
            model.Equation(sum(x[i][j] * q[k][i][j] for j in range(n_nodes)) == 1)
        elif checkdest (i, k, flows):
            model.Equation(sum(x[j][i] * q[k][j][i] for j in range(n_nodes)) == 1)
        else:
            model.Equation(sum(x[i][j]*q[k][i][j] for j in range(n_nodes)) - sum(x[j][i] *q[k][j][i] for j in range(n_nodes)) == 0)

model.solve()

您当前的模型存在很多问题。这是对您的变量声明和 objective 函数的修复,更易于配置和阅读。

from gekko import GEKKO

nflows = 2
n_nodes = 2

model = GEKKO(remote=False)
model.options.SOLVER = 1

#define the inputs
R=[1000 for i in range(nflows)]
C=[[1000 for i in range(n_nodes)] for j in range(n_nodes)]


#define x_ij
x = model.Array(model.Var,(n_nodes,n_nodes),lb=0,ub=1)
q = model.Array(model.Var,(n_nodes,n_nodes,nflows),value=1/n_nodes,lb=0,ub=1)

#define the objective
for i in range(n_nodes):
    for j in range(n_nodes):
        for k in range(nflows):
            model.Minimize(x[i,j] /(C[i][j] - R[k] * q[k][i][j]))
            
model.solve()

您需要添加约束,但希望这能让您朝着正确的方向开始。