繁体   English   中英

如何在 Julia JuMP 中使用 VariableRef 作为索引

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM