[英]How to use VariableRef as indices in Julia JuMP
在 Julia 当我这样做时:
model = Model();
set_optimizer(model, Cbc.Optimizer);
N=11;
model = Model();
set_optimizer(model, Cbc.Optimizer);
@variable(model, X[1:N,1:N,1:N], Bin);
@variable(model, 1<=K<=10, Int);
for k in K
@constraint(model, (sum(X[1,j,k] for j= 1:N)) ==1 )
end
我收到此错误:
ArgumentError:无效索引:变量引用类型的 K
因为我使用变量reference(k)
作为向量 ( X
) 的索引。
我怎么能解决这个问题?
如果您想让K
与其他变量交互,则需要将其设为总和为1
的二进制向量,然后使用乘法对交互进行建模。
@variable(model, K[1:10], Bin);
@constraint(model, sum(K) == 1)
现在我并不完全确定你想要完成什么。 如果您想根据K
的值关闭和打开方程式,则如下所示:
@constraint(model,con[k in 1:10], sum(X[1,j,k] for j= 1:N)*K[k] == K[k] )
然而,这使得 model 非线性,您需要使用非线性求解器。 根据您的用例,总和最多为1
就足够了(这会产生 model 对于求解器来说更容易,但您的业务是否需要):
@constraint(model,con[k in 1:10], sum(X[1,j,k] for j= 1:N) == K[k] )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.