改变目标函数中的变量的系数
回答我有一个模型,解决与回调,我需要改变目标函数中的变量的系数,我看见了那Model.chgCoeff()来改变约束变量的系数,但我能做到目标函数? ?
问候
-
你可以改变一个变量的线性目标系数\ (x \)通过变量属性Obj,例如,
x。Obj = 3
最好的问候,
Jaromił0 -
嗨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 -
你好,艾哈迈德,
注意,Obj属性改变了线性目标变量的系数。
我认为\ \ texttt{α}\)和\ (\ texttt {x} \)都是优化变量,这使得你的目标一个二次。你不能改变一个变量的二次项系数。改变二次项的系数重构目标函数和取代旧的。
最好的问候,
Jaromił0 -
嗨Jaromil
非常感谢你的回答,是的这是事实,在这种情况下我可以替代目标函数如何? ?我应该创建一个新的模型和新的目标函数或有办法吗? ?
问候
0 -
你好,艾哈迈德,
一种方法是
进口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 -
在我的例子中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 -
好的,所以你的模型不是一二次。请发布一个最小的工作示例重现这个问题吗?
0 -
对不起Jaromil,对我来说,你的建议是不清楚终止议员模型将终止回调并不是我想要的,你的意思是终止DSP模型,我试图改变系数? ?
0 -
你好,艾哈迈德,
我能执行你的代码并没有得到任何错误。你每个变量的名字,然后设置其Obj属性。这工作正常。你能尝试产生一个最小的工作示例吗?
我刚才注意到你实际上是使用一个单独的模型\ (\ texttt {getSubSolution} \)函数所以请忽略我之前的评论终止优化。
最好的问候,
Jaromił0 -
嗨Jaromil,
我怎么能重置一个特定变量的系数在一个特定的目标函数,当我处理Gurobi目标序列的问题?
谢谢你这么多!
0 -
我怎么能重置一个特定变量的系数在一个特定的目标函数,当我处理Gurobi目标序列的问题?
进口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 -
谢谢!
0
请登录留下你的评论。
评论
13个评论