2016-11-24 68 views
0

我有我试图解决一个简单的数学PROG:跳约束宏观变化类型的已声明变量

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

类型

回答

1

参考JuMP documentation

约束引用

为了在创建后操纵约束条件,有必要对 保持参考。要做到这一点最简单的方法是使用@constraint的 特殊的三参数命名约束语法,这 还允许你创建由 集收录约束组类似@variable

所以跳的工作方式是如预期的那样,为什么不是@constraint(m, anothersymbol, sum(x)==1)

0

使它像这样

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

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