Pyomo:每一步后打印目标值

问题描述

我有一个工作 Pyomo 模型,它在大约 15 分钟后为我提供了最小目标函数。我想看到目标函数给出的值随时间的变化。我有想法在每 secound 或 step 后打印目标函数的结果,但不知道该怎么做,是吗?

预期结果:

enter image description here

为了执行下面的代码,数据丢失了,但我认为你没有必要运行它。它只是显示了我的模型的结构。

solverpath_exe= 'C:\\scipampl-7.0.0.win.x86_64.intel.opt.spx2.exe'
solver=SolverFactory('scip',executable=solverpath_exe)

model = ConcreteModel()
        model.vals = Var(rownames_df,colnames_df,domain=NonNegativeReals,bounds = (0,1),initialize=0)

def object_function(x):
    summe = 0
    for c in colnames_df:
        for r in rownames_df:
            if df_nach_expo[c][r]!=0:
                summe = summe + abs(x.vals[r,c] - df_nach_expo[c][r])
    return summe

#Objective    - 
model.minimizer = Objective(rule= object_function,sense=minimize)


#row sum should be 1
model.rowconstraint = ConstraintList()
for r in rownames_df:
    model.rowconstraint.add(sum(model.vals[r,c] for c in colnames_df) == 1)


#Organisationsgrad
def aRule(k):
    summe = sum((k.vals[r,c]-1/13)**2 for r in rownames_df for c in colnames_df)
    OG = (1/(13-1))*summe
    return OG == Organisationsgrad[2]
model.OGConst = pyo.Constraint(rule=aRule)    


  
#amount of 0 per row
model.zeroconstraint = ConstraintList()
for r in rownames_df:
    for c in colnames_df:
        if df_nach_expo[c][r]==0:
            model.zeroconstraint.add(model.vals[r,c] == 0)
            
            
model.nonzeroconstraint = ConstraintList()
for r in rownames_df:
    for c in colnames_df:
        if df_nach_expo[c][r]>0:
            model.nonzeroconstraint.add(abs(model.vals[r,c] - df_nach_expo[c][r]) <= 0.19 * df_nach_expo[c][r])

#solver.options['limits/time'] = 1000
result = solver.solve(model,tee=True)


pdtest = pd.DataFrame([[model.vals[r,c].value for c in colnames_df] for r in rownames_df],index=rownames_df,columns=colnames_df)

pdtest

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)