2016-11-24 71 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)