打印 objective 函数 Pyomo 项的求解器结果

Print Solver Results of terms from an objective function Pyomo

当我想用求解器结果打印一些具体值时遇到了一些问题。

这是我的 objective 功能:

def obj2_rule(model):
    return sum(sum(model.htotal1[k] + model.htotal2[k] + model.htotal3[k] - sum(sum(model.hreq1[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq2[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq3[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) for j in model.MODELS) for p in jobs_per_station[k]) for k in model.ESTATIONS) for t in model.PERIODS)
model.obj2 = Objective(rule=obj2_rule)

在 objective 函数中,我想单独打印这个 "extra variables" 因为 objective 函数 returns [=27= 中每个 t 的总和]:

h_idle[t] = sum(model.htotal1[k] + model.htotal2[k] + model.htotal3[k] - sum(sum(model.hreq1[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq2[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) + model.hreq3[p,j] * (sum(model.x[p,k,j] for k in sequence(t)) - sum(model.x[p,k,j] for k in sequence(t - model.time[p,j]))) for j in model.MODELS) for p in jobs_per_station[k]) for k in model.STATIONS)

对于 model.PERIODS

中的每个 t

我想打印这些 "variables" : h_idle[1], h_idle[2]...
请,一些想法如何去做? 提前致谢。

调用求解器后,结果会自动加载回模型中的变量中。您可以使用 value 函数打印单个值。

for t in model.PERIODS:
    h_idle_t = YOUR LONG EXPRESSION
    print('h_idle[' + str(t) + '] = ', value(h_idle_t))