LoadError: MethodError: no method matching mod(::VariableRef



我是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)

最新更新