跳转到主要内容

改变目标函数中的变量的系数

回答

评论

13个评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    你可以改变一个变量的线性目标系数\ (x \)通过变量属性Obj,例如,

    x。Obj = 3

    最好的问候,
    Jaromił

    0
  • ahmad alanaqreh
    Gurobi-versary
    健谈的人
    调查员

    嗨Jarmoil

    我有以下目标函数:

    模型。setObjective (quicksum (x (i, j) *α(我)(i, j)在E如果我! =)
    + quicksum ((n * (1 - x (i, j)) - 1) *β(i, j) (i, j) E如果j ! = s) +ω
    - (z *λ))

    现在我有x和z的值的值如果我试图改变alpha-like系数

    因为我在范围(0,n):
    temp_x = 0
    (j)的范围(0 n + 1):
    如果在E (i, j):
    temp_x + = x (i, j)
    α[我]。Obj= temp_x

    我得到错误的消息

    AttributeError:“gurobipy。Var的对象没有属性Obj

    问候

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,艾哈迈德,

    注意,Obj属性改变了线性目标变量的系数。

    我认为\ \ texttt{α}\)和\ (\ texttt {x} \)都是优化变量,这使得你的目标一个二次。你不能改变一个变量的二次项系数。改变二次项的系数重构目标函数和取代旧的。

    最好的问候,
    Jaromił

    0
  • ahmad alanaqreh
    Gurobi-versary
    健谈的人
    调查员

    嗨Jaromil

    非常感谢你的回答,是的这是事实,在这种情况下我可以替代目标函数如何? ?我应该创建一个新的模型和新的目标函数或有办法吗? ?

    问候

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,艾哈迈德,

    一种方法是

    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    m = gp.Model(“测试”)

    x = m.addVar ()
    y = m.addVar ()

    m.setObjective (x * y)
    m.optimize ()

    #设定新的目标
    m.setObjective (2 * x * y)
    m.optimize ()

    最好的问候,
    Jaromił

    0
  • ahmad alanaqreh
    Gurobi-versary
    健谈的人
    调查员

    在我的例子中x (i, j)和z参数(α,β,ω,λ是变量),实际上,这些价值观变化的每一次,所以我改变我的目标函数基于x和z的新值,我试过你提到的方法如下:

    模型。setObjective (quicksum (x (i, j) *α(我)(i, j)在E如果我! =)
    + quicksum ((n * (1 - x (i, j)) - 1) *β(i, j) (i, j) E如果j ! = s) +ω
    - (z *λ))

    我得到了错误信息:

    gurobipy。GurobiError:变量模型
    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    好的,所以你的模型不是一二次。请发布一个最小的工作示例重现这个问题吗?

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    我理解正确你试图改变系数在一次电话回调?如果是,那么这是不可能的。你能做的就是什么终止优化过程中,改变目标系数,然后通过优化模型优化。以来,你只是改变客观的系数,将warm-started优化以提高性能。

    最好的问候,
    Jaromił

    0
  • ahmad alanaqreh
    Gurobi-versary
    健谈的人
    调查员

    对不起Jaromil,对我来说,你的建议是不清楚终止议员模型将终止回调并不是我想要的,你的意思是终止DSP模型,我试图改变系数? ?

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,艾哈迈德,

    我能执行你的代码并没有得到任何错误。你每个变量的名字,然后设置其Obj属性。这工作正常。你能尝试产生一个最小的工作示例吗?

    我刚才注意到你实际上是使用一个单独的模型\ (\ texttt {getSubSolution} \)函数所以请忽略我之前的评论终止优化。

    最好的问候,
    Jaromił

    0
  • 雅各金
    Gurobi-versary
    好奇的
    合作者

    嗨Jaromil,

    我怎么能重置一个特定变量的系数在一个特定的目标函数,当我处理Gurobi目标序列的问题?

    谢谢你这么多!

    0
  • JaromiłNajman
    Gurobi员工Gurobi员工

    我怎么能重置一个特定变量的系数在一个特定的目标函数,当我处理Gurobi目标序列的问题?

    您可以使用ObjN属性设置后ObjNumber

    进口gurobipy全科医生
    从gurobipy进口伽马线暴

    m = gp.Model ()

    x = m。addVar(磅= 0,vtype =伽马线暴。连续的,name = " x ")
    y = m.addVar (name = " y ")

    m。setObjectiveN (2 * x + 2 * y, 0, 0) #目标0
    m。setObjectiveN (3 * x + 3 * y, 1, 1) #目标1

    m.params。ObjNumber = 0
    m.update ()
    x。ObjN = 1 # 0 x + 2 * y改变目标

    m.params。ObjNumber = 1
    m.update ()
    y。ObjN = 1 # 1 - 3 * x + y改变目标

    m.write (“myLP.lp”)

    最好的问候,
    Jaromił

    0
  • 雅各金
    Gurobi-versary
    好奇的
    合作者

    谢谢!

    0

登录留下你的评论。