callback_vb.vb


Gurobi优化版权2023年,LL狗万app足彩C的这个例子从文件中读取一个模型,建立了一个回调,监控优化进步和实现一个自定义的终止策略,进步和输出信息的屏幕和一个日志文件中。“终止策略中实现这个回调停止MIP模型的优化一次至少一个的以下两个条件满足:1)最优差距小于10%”2)探究出了至少10000个节点,和一个整数可行的解决方案被发现。“注意,终止通常是通过Gurobi参数的(MIPGap、NodeLimit等)。你应该只使用一个回调为“终止如果可用的参数不捕捉你想要的终止准则。进口系统进口Gurobi类callback_vb继承GRBCallback私人var GRBVar()私人lastnode双私人lastiter双公共子新(按值传递xvars作为GRBVar ()) var = xvars lastnode = lastiter = 1结束子过载保护覆盖子回调()如果在= GRB.Callback试试。PRESOLVE然后' PRESOLVE回调暗正保远程教育作为Integer = GetIntInfo (GRB.Callback.PRE_COLDEL)暗rdels整数= GetIntInfo (GRB.Callback.PRE_ROWDEL)控制台。WriteLine(正保远程教育&”列和“& rdels &“删除行”)ElseIf = GRB.Callback的地方。单工那么的单纯形调暗itcnt双= GetDoubleInfo (GRB.Callback.SPX_ITRCNT)如果itcnt Mod - lastiter > = 100然后lastiter = itcnt昏暗的obj双= GetDoubleInfo (GRB.Callback.SPX_OBJVAL)暗pinf双= GetDoubleInfo (GRB.Callback.SPX_PRIMINF)暗dinf双= GetDoubleInfo (GRB.Callback.SPX_DUALINF)暗ispert整数= GetIntInfo (GRB.Callback.SPX_ISPERT)暗淡的ch Char如果ispert = 0然后ch = " c ElseIf ispert = 1然后ch =“S”其他ch = P c端如果控制台。WriteLine (itcnt & " " & obj & ch & " " & pinf & " " & dinf)如果ElseIf = GRB.Callback结束。MIP然后'一般MIP回调暗nodecnt作为双= GetDoubleInfo (GRB.Callback.MIP_NODCNT)如果nodecnt - lastnode > = 100然后lastnode = nodecnt昏暗objbst双= GetDoubleInfo (GRB.Callback.MIP_OBJBST)暗objbnd双= GetDoubleInfo (GRB.Callback.MIP_OBJBND)如果数学。Abs (objbst - objbnd) < 0.1 * 1.0 (r + Math.Abs (objbst))然后Abort()结束如果暗actnodes Integer = CInt (GetDoubleInfo (GRB.Callback.MIP_NODLFT))暗itcnt Integer = CInt (GetDoubleInfo (GRB.Callback.MIP_ITRCNT))暗solcnt Integer = GetIntInfo (GRB.Callback.MIP_SOLCNT)暗cutcnt整数= GetIntInfo (GRB.Callback.MIP_CUTCNT)控制台。WriteLine (nodecnt & " " & actnodes & " " & itcnt & " " & _ objbst & " " & objbnd & " " & solcnt & " " & cutcnt)如果ElseIf = GRB.Callback结束。MIPSOL然后的MIP溶液调暗obj双= GetDoubleInfo (GRB.Callback.MIPSOL_OBJ)暗nodecnt整数= CInt (GetDoubleInfo (GRB.Callback.MIPSOL_NODCNT))的x作为双()= GetSolution (var)控制台。WriteLine(“* * * *新解决方案节点”& nodecnt &”、obj”& _ obj &”, x(0) =”和x(0)和“* * * *”)结束如果抓住e GRBException控制台。WriteLine(错误代码:& e。ErrorCode &”。“& e.Message) Console.WriteLine (e.StackTrace)端尝试端子共享子主要(如果参数值传递参数arg作为String ())。长度< 1然后控制台。WriteLine("Usage: callback_vb filename") Return End If Try Dim env As New GRBEnv() Dim model As New GRBModel(env, args(0)) Dim vars As GRBVar() = model.GetVars() ' Create a callback object and associate it with the model model.SetCallback(New callback_vb(vars)) model.Optimize() Dim x As Double() = model.Get(GRB.DoubleAttr.X, vars) Dim vnames As String() = model.Get(GRB.StringAttr.VarName, vars) For j As Integer = 0 To vars.Length - 1 If x(j) <> 0.0R Then Console.WriteLine(vnames(j) & " " & x(j)) End If Next ' Dispose of model and env model.Dispose() env.Dispose() Catch e As GRBException Console.WriteLine("Error code: " & e.ErrorCode & ". " & e.Message) Console.WriteLine(e.StackTrace) End Try End Sub End Class