跳转到主要内容

第一个整数可行点回调

正在进行的

评论

3评论

  • Maliheh Aramon
    Gurobi员工Gurobi员工

    你好卢卡斯,

    一个更简单的方法可能是使用SolutionLimit参数作为终止条件。通过设置SolutionLimit参数1,优化将终止一旦找到一个可行的解决方案。

    回答你的问题关于回调,因为发生错误self.cb不是一个函数。它是一个对象的一个实例方法。在Python中是有区别的方法和函数。方法调用一个对象,它就不能生存没有一个对象调用它。然而,调用一个函数是独立的,通过它的名称。

    为了解决这个问题有两种选择:

    • 第一个选项是让self.cb方法静态方法如下所示:
    类方法:
    @staticmethod
    def cb(模型):
    如果在哪里= = GRB.Callback.MIPSOL:
    model._ub= model.cbGet(GRB.Callback.MIPSOL_OBJ)
    model.terminate ()
    • 第二个选项是定义回调函数外的类,并将它作为参数传递给方法调用优化()方法。

    将数据传递给回调函数,你应该做的模型对象。你应该定义语句model._ub= float("inf")在优化开始之前,那么你的回调函数的值可以查询model._ub。注意,用户数据字段的名称必须与下划线开始。

    你会发现下面的代码片段有用至少你感兴趣的工作的例子。

    进口gurobipy
    从gurobipy进口伽马线暴

    类模型:
    def__init__(自我):
    自我。模型= gurobipy.read(“例子/数据/ glass4.mps”)
    #初始化上界
    self.model。_ub =浮动(正)

    @staticmethod
    def cb(模型):
    如果在哪里= = GRB.Callback.MIPSOL:
    model._ub= model.cbGet(GRB.Callback.MIPSOL_OBJ)
    model.terminate ()

    def get_first_solution(自我):
    self.model.optimize (Model.cb)
    打印(f“乌兰巴托:{self.model._ub}”)

    if __name__ = =“__main__”:
    模型= ()
    model.get_first_solution ()

    最好的问候,

    Maliheh

    0
  • 卢卡斯温克尔
    Gurobi-versary
    健谈的人
    第一个问题

    嗨Maliheh,

    谢谢你的快速回答,SolutionLimit设置为1的解决方案方法对我的用例是完全可行的。也谢谢你解释回调的问题!

    最好的,

    卢卡斯

    0
  • 这项索尼

    如下的方式使用嵌套函数一个合理的方法?我有很多实例属性,我需要通过回调。
    我很好奇如果有任何延迟可能出现回调访问实例数据(例如,大型数据矩阵)从一个嵌套的函数。


    进口gurobipy
    从gurobipy进口伽马线暴

    类模型:
    def __init__(自我):
    自我。模型= gurobipy.read(“例子/数据/ glass4.mps”)
    #初始化上界
    # self.model。_ub =浮动(正)
    self.ub =浮动(正)


    def get_first_solution(自我):
    def cb(模型):
    如果在哪里= = GRB.Callback.MIPSOL:
    自我。乌兰巴托= model.cbGet (GRB.Callback.MIPSOL_OBJ) #请注意自我的使用
    model.terminate ()
    self.model.optimize (cb)
    打印(f“乌兰巴托:{self.ub}”)
    0

登录留下你的评论。