![](/img/trans.png)
[英]how to get value of decision variable after maximum iteration limit in gekko
[英]How to get the value of the decision variables in Gekko-python
我正在使用 Gekko 来解决工作分配的优化模型,因此决策变量之一 (Xijt)(i=workers, j=jobs, t=time period) 是二元的是否选择了工作人员(x=1 ) 与否 (x=0)。 我得到了解决方案(目标函数的值)。 但是,对于使用时的变量值 - Print(str (x)) - 我得到了 x 的所有值,如附图所示,但我只想得到 xijt = 1 的选定工作人员。 第二个变量(Yijt)的相同问题继续数表示工人 i 在时间 t 执行工作 j 的小时数。 使用时 - Print(str (Y)) - 我得到了 Y 的所有值,但我想只为 xijt =1 的选定工作人员获取 Y 值。 请有关于解决这个问题的任何想法。 单击此处获取output 屏幕截图和代码
model = GEKKO()
model.options.SOLVER = 1
x = {}
for i in I:
for j in J:
for t in T:
x[i, j, t] = model.Var(lb=0.00, ub=1.00001,integer=True, name="x %s %s %s" % (i, j, t))
y = {}
for i in I:
for j in J:
for t in T:
y[i, j, t] = model.Var(integer=False, name="y %s %s %s" % (i, j, t))
# model.update()
for l in L:
for i in I:
for j in J:
for t in T:
model.Equation(x[i, j, t] * (q[i][l] - s[j][l]) >= 0)
for j in J:
for i in I:
for t in T:
model.Equation(x[i, j, t] * (lc[j][t] * y[i, j, t] * (sum(q[i][l] / s[j][l] for l in L) / len(L))) <= uc[j][t])
model.Equation(x[i, j, t] * (lz[j][t] * y[i, j, t] * (sum(q[i][l] / s[j][l] for l in L) / len(L))) <= uz[j][t])
for j in J:
for t in T:
model.Equation(sum(x[i, j, t] for i in I) == 1)
for i in I:
for t in T:
model.Equation(sum(x[i, j, t] for j in J) == 1)
for i in I:
for t in T:
model.Equation(sum(y[i, j, t] for j in J) <= 8)
objt = sum(sum(sum((x[i, j, t] * v[j] * lc[j][t] * y[i, j, t] * (sum(q[i][l] / s[j][l] for l in L) / len(L))) - (
x[i, j, t] * lz[j][t] * y[i, j, t] * (sum(q[i][l] / s[j][l] for l in L) / len(L))) for j in J) for i in I) for t in
T)
model.Obj(-objt)
model.solve(disp=True, debug=False)
print(str (x))
print(str (y))
使用x
变量的.value[0]
属性。 如果x
大于阈值,例如0.9
,则有条件地检索y
值:
for i in I:
for j in J:
for t in T:
if x[i, j, t].value[0]>=0.9:
print(y[i, j, t])
使用 Gekko m.sum()
与 Python sum()
function 相比,有更好的解决方案性能。 这不应该改变结果,但它可能会快得多。
如果您想以这种方式定义变量,也可以使用数组 function:
x = m.Array(m.Var,(I,J,T),integer=True,lb=0,ub=1.00001)
y = m.Array(m.Var,(I,J,T),integer=False)
它没有命名变量,但这在 Gekko 中不是必需的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.