manbet体育手机客户端


callback.py


#!这个例子从一个文件中读取一个模型,设置一个回调函数来监控优化进度,并狗万app足彩实现一个自定义的#终止策略,并将进度信息输出到#屏幕和日志文件。# #终止策略中实现这个回调停止# MIP模型的优化一次至少一个以下两个条件已经满足:# 1 # 2)最优差距小于10%)至少10000节点一直探索,和一个整数可行#解决方案被发现。#注意,终止通常通过Gurobi参数# (MIPGap, NodeLimit等)处理。只有当可用的参数没有捕获到所需的#终止条件时,才应该使用#终止回调。从gurobipy进口进口sys * #定义回调函数def mycallback(模型):如果在哪里= = GRB.Callback.POLLING: #忽略轮询回调传递elif = = GRB.Callback.PRESOLVE: # Presolve调正保远程教育= model.cbGet (GRB.Callback.PRE_COLDEL) rdels = model.cbGet (GRB.Callback.PRE_ROWDEL)如果正保远程教育或rdels:print('%d列和%d行被删除'% (cdels, rdels)) elif where == GRB.Callback.SIMPLEX: # Simplex回调itcnt = model. cbget (GRB.Callback.SPX_ITRCNT) if itcnt - model. printf ('%d列和%d行被删除')_lastiter >= 100:模型。_lastiter = itcnt obj = model.cbGet (GRB.Callback.SPX_OBJVAL) ispert = model.cbGet (GRB.Callback.SPX_ISPERT) pinf = model.cbGet (GRB.Callback.SPX_PRIMINF) dinf = model.cbGet (GRB.Callback.SPX_DUALINF)如果ispert = = 0: ch =“elif ispert = = 1: ch =“S”:ch = ' P ' print(“% d % g % s % g % g’% (int (itcnt) obj, ch, pinf, dinf)) elif = = GRB.Callback.MIP: #一般MIP调nodecnt = model.cbGet (GRB.Callback.MIP_NODCNT) objbst = model.cbGet (GRB.Callback.MIP_OBJBST) objbnd = model.cbGet (GRB.Callback.MIP_OBJBND) solcnt = model.cbGet (GRB.Callback.MIP_SOLCNT)如果nodecnt -模型。_lastnode >= 100:模型。_lastnode = nodecnt actnodes = model.cbGet (GRB.Callback.MIP_NODLFT) itcnt = model.cbGet (GRB.Callback.MIP_ITRCNT) cutcnt = model.cbGet (GRB.Callback.MIP_CUTCNT)打印(' % d % d % d % g % g % d % d ' % (nodecnt、actnodes \ itcnt、objbst objbnd, solcnt, cutcnt))如果abs (objbst - objbnd) < 0.1 * (1.0 + abs (objbst)): print('Stop early - 10% gap achieved') model.terminate() if nodecnt >= 10000 and solcnt: print('Stop early - 10000 nodes explored') model.terminate() elif where == GRB.Callback.MIPSOL: # MIP solution callback nodecnt = model.cbGet(GRB.Callback.MIPSOL_NODCNT) obj = model.cbGet(GRB.Callback.MIPSOL_OBJ) solcnt = model.cbGet(GRB.Callback.MIPSOL_SOLCNT) x = model.cbGetSolution(model._vars) print('**** New solution at node %d, obj %g, sol %d, ' \ 'x[0] = %g ****' % (nodecnt, obj, solcnt, x[0])) elif where == GRB.Callback.MIPNODE: # MIP node callback print('**** New node ****') if model.cbGet(GRB.Callback.MIPNODE_STATUS) == GRB.Status.OPTIMAL: x = model.cbGetNodeRel(model._vars) model.cbSetSolution(model.getVars(), x) elif where == GRB.Callback.BARRIER: # Barrier callback itcnt = model.cbGet(GRB.Callback.BARRIER_ITRCNT) primobj = model.cbGet(GRB.Callback.BARRIER_PRIMOBJ) dualobj = model.cbGet(GRB.Callback.BARRIER_DUALOBJ) priminf = model.cbGet(GRB.Callback.BARRIER_PRIMINF) dualinf = model.cbGet(GRB.Callback.BARRIER_DUALINF) cmpl = model.cbGet(GRB.Callback.BARRIER_COMPL) print('%d %g %g %g %g %g' % (itcnt, primobj, dualobj, \ priminf, dualinf, cmpl)) elif where == GRB.Callback.MESSAGE: # Message callback msg = model.cbGet(GRB.Callback.MSG_STRING) model._logfile.write(msg) if len(sys.argv) < 2: print('Usage: callback.py filename') quit() # Turn off display and heuristics setParam('OutputFlag', 0) setParam('Heuristics', 0) # Read model from file model = read(sys.argv[1]) # Open log file logfile = open('cb.log', 'w') # Pass data into my callback function model._lastiter = -GRB.INFINITY model._lastnode = -GRB.INFINITY model._logfile = logfile model._vars = model.getVars() # Solve model and capture solution information model.optimize(mycallback) print('') print('Optimization complete') if model.SolCount == 0: print('No solution found, optimization status = %d' % model.Status) else: print('Solution found, objective = %g' % model.ObjVal) for v in model.getVars(): if v.X != 0.0: print('%s %g' % (v.VarName, v.X)) # Close log file logfile.close()