跳转到主要内容

终止优化从c#库通过用户输入ctrl - C

回答

评论

1评论

  • 罗德里戈·富恩特斯
    Gurobi员工Gurobi员工

    嗨,简,

    这样做的关键是终止的优化处理程序,和“警报”的主线程优化已经手动中断。

    你可以试着这样不使用回调函数:

    使用系统;
    使用Gurobi;

    公共静态类的全局变量
    {
    公共静态双objval = 0.0;
    公共静态GRBEnv env = new GRBEnv ();
    公共静态GRBModel模型;
    公共静态bool manuallyInterrupted = false;
    }

    类mipexample_cs
    {
    公共静态void Main (string [] args)
    {
    控制台。新ConsoleCancelEventHandler CancelKeyPress + = (Console_CancelKeyPress);

    尝试{
    全局变量。= new GRBModel(全局模型。env,“yourmodelfile.mps”);

    如果(Globals.model。IsMIP = = 0) {
    控制台。WriteLine(“不是MIP模型”);
    返回;
    }

    Globals.model.Optimize ();

    如果(Globals.manuallyInterrupted)
    {
    bool又叫了一声= true;
    / *查询解决状态,直到可用并处理异常时不可用* /
    而(又叫了一声)
    {
    试一试
    {
    如果(Globals.model。状态== GRB.Status.INTERRUPTED)
    {
    / *查询解决数据手机万博登录一旦解决中断* /
    全局变量。objval = Globals.model.ObjVal;
    }
    控制台。WriteLine(“客观= " + Globals.objval);
    又叫了一声= false;
    }
    抓住(GRBException f)
    {
    / *错误输出是可选的* /
    控制台。WriteLine (" Gurobi错误代码= " + f.ErrorCode);
    Console.WriteLine (f.Message);
    }
    }
    }

    int optimstatus = Globals.model.Status;
    双objvalint = 0;

    如果(optimstatus = = GRB.Status.OPTIMAL) {
    objvalint = Globals.model.ObjVal;
    控制台。WriteLine(“优化目的:”+ objvalint);
    其他}{
    控制台。WriteLine(“优化是停止状态= "
    + optimstatus);
    返回;
    }

    Globals.model.Dispose ();
    Globals.env.Dispose ();

    }捕捉(GRBException e) {
    控制台。WriteLine(错误代码:“+ e。ErrorCode +”。“+ e.Message);
    }
    返回;
    }

    保护静态孔隙Console_CancelKeyPress(对象发送方,ConsoleCancelEventArgs e)
    {
    控制台。WriteLine(“程序手动终止”);
    全局变量。manuallyInterrupted = true;
    Globals.model.Terminate ();
    e。取消= true;
    }
    }
    0

登录留下你的评论。