我是Julia和JuMP的新手,我将使用一个库。
尝试定义以下约束,在定义变量之后,我收到一个错误:
for r = 1:11
for d = 1:7
for s = 1:12
@constraint(model, mod(ris_day_ora[r,d,s],0.5)==0)
end
end
end
错误:
ERROR: LoadError: MethodError: no method matching mod(:: variableef,::Float64)
你能帮帮我吗?
提前感谢!
在JuMP约束中不能有mod
你需要重新制定模型,有很多方法可以做到。在您的情况下,最简单的事情是将ris_day_ora
声明为Int
,然后将其除以2
。
@variable(model, ris_day_ora[1:11, 1:7, 1:12] >=0, Int)
现在代码中到处使用ris_day_ora[r,d,s]/2.0
而不是ris_day_ora[r,d,s]
。
如果您的变量ris_day_ora
有三个值0
,0.5
,1
,您只需将其建模为:
@variable(model, 0 <= ris_day_ora[1:11, 1:7, 1:12] <= 2, Int)
并且在模型的每个位置使用0.5 * ris_day_ora[r,d,s]
编辑2
也许你正在寻找一个更通用的解决方案。考虑x
,它只能是0.1
,0.3
,0.7
中的一个,可以写成:
@variable(model, x)
@variable(model, helper[1:3], Bin)
@contraint(model, x == 0.1*helper[1] + 0.3*helper[2] + 0.7*helper[3])
@contraint(model, sum(helper) == 1)