求目标函数中每个项的值

2024-05-19 10:09:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想单独计算gurobi python目标函数中的三个项中的每一个。我该怎么做?你知道吗

第一项:c*(te[i]+to[i]+t[i,s])*X[i,b,s] for i in Trucks for b in Blocks for s in Slots 第二项:d[b,s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots 第三个:g*a[s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots

目标函数方程

m.setObjective(quicksum(c*(te[i]+to[i]+t[i,s])*X[i,b,s] for i in Trucks for b in Blocks for s in Slots) + quicksum(d[b,s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots) +quicksum( g*a[s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots), GRB.MINIMIZE)

Tags: to函数in目标for方程teblocks
1条回答
网友
1楼 · 发布于 2024-05-19 10:09:27

最好的方法是将目标分成三个独立的LinExpr对象。优化之后,可以使用这些对象的getValue()方法在最佳解处提取表达式的值。你知道吗

在您的案例中,一个例子如下:

# Construct three linear expressions
expr = []
expr.append(quicksum(c*(te[i]+to[i]+t[i,s])*X[i,b,s] for i in Trucks for b in Blocks for s in Slots))
expr.append(quicksum(d[b,s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots))
expr.append(quicksum(g*a[s]*X[i,b,s] for i in Trucks for b in Blocks for s in Slots))

# Set objective and optimize
m.setObjective(quicksum(expr[i] for i in range(3)), GRB.MINIMIZE)
m.optimize()

# Return linear expression values
if m.status == GRB.Status.OPTIMAL:
    for i in range(3):
        print(expr[i].getValue())
else:
    print('Model not solved to optimality')

相关问题 更多 >

    热门问题