【发布时间】:2020-06-11 15:14:53
【问题描述】:
这个示例代码完美地展示了我的问题
from gekko import GEKKO
model = GEKKO(remote=False)
x = model.Array(model.Var,(10),lb=0, ub=2,value=0)
b = model.Array(model.Var,(3))
p = []
p.append(model.Param(sum(x)/10+0.25))
p.append(model.Param(sum(x)/10))
d = 1e-5
x_data = [-1e5,0.25,0.25+d,1,1+d,1.5,1.5+d,1e5]
y_data = [0.1,0.1,0.75,0.75,1.25,1.25,1.7,1.7]
model.pwl(p[0], b[0], x_data, y_data)
model.pwl(p[1], b[1], x_data, y_data)
model.pwl(x[0], b[2], x_data, y_data)
model.options.IMODE = 2
model.options.SOLVER = 1
model.Obj(-1*(b[0]+b[1]))
model.solve()
print(x)
print(p)
print(b)
这有一个目标为 7.6 的成功解决方案(甚至不确定它来自哪里),但所有 x 值都设置为 0,除了 x[1] 为 1,这意味着 p[0] 为 0.35而 p[1] 为 0.1。情况并非如此,因为两者都等于零。 b[0] 和 b[1] 等于 1.7,即使 p[0] 和 p[1] 是正确的也不应该是这种情况。 b[2] 正确设置为 0.75。
【问题讨论】: