问题描述
我有一个工作 Pyomo 模型,它在大约 15 分钟后为我提供了最小目标函数。我想看到目标函数给出的值随时间的变化。我有想法在每 secound 或 step 后打印目标函数的结果,但不知道该怎么做,是吗?
预期结果:
为了执行下面的代码,数据丢失了,但我认为你没有必要运行它。它只是显示了我的模型的结构。
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 (将#修改为@)