JuMP约束宏更改先前声明的变量

时间:2016-11-24 06:10:24

标签: julia julia-jump

我有一个简单的数学编程我想解决:

m = Model(solver=MosekSolver())
@variable(m, x[1:8] >= 0)
@objective(m,Min,sum(x))
@constraint(m,A*x .== given)
@constraint(m, x, sum(x)==1)

status = solve(m)

println("x = ", getvalue(x))

A是类型为Array{Float64,2

的矩阵

该行:

  

@constraint(m, x, sum(x)==1))

x的类型从Array{JuMP.Variable,1}更改为JuMP.ConstraintRef{JuMP.Model,JuMP.GenericRangeConstraint{JuMP.GenericAffExpr{Float64,JuMP.Variable}}}

  1. 由于先前已将x声明为变量,因此该类型保持不变? (此外,如果执行上述行,一切仍然有效,但getvalue不会因类型的变化而导致。)

  2. 有没有办法在不改变x

    的类型的情况下添加求和约束

2 个答案:

答案 0 :(得分:1)

参考JuMP documentation

  

约束参考

     

为了在创建后操纵约束,有必要   保持参考。最简单的方法是使用   @constraint的特殊三参数命名约束语法,其中   另外还允许您创建索引的约束组   类似于@variable

设置

因此,JuMP的工作方式符合预期,为什么不@constraint(m, anothersymbol, sum(x)==1)

答案 1 :(得分:0)

让它像这样

@constraint(m, constr, A*x .== given)

@constraint(m, constr2, sum(x) == 1)