我有一个简单的数学编程我想解决:
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}}}
。
由于先前已将x
声明为变量,因此该类型保持不变? (此外,如果执行上述行,一切仍然有效,但getvalue
不会因类型的变化而导致。)
有没有办法在不改变x
答案 0 :(得分:1)
约束参考
为了在创建后操纵约束,有必要 保持参考。最简单的方法是使用
设置@constraint
的特殊三参数命名约束语法,其中 另外还允许您创建索引的约束组 类似于@variable
因此,JuMP的工作方式符合预期,为什么不@constraint(m, anothersymbol, sum(x)==1)
?
答案 1 :(得分:0)
让它像这样
@constraint(m, constr, A*x .== given)
@constraint(m, constr2, sum(x) == 1)