0

我有一个简单的数学程序,我正在尝试解决:

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将from的类型更改Array{JuMP.Variable,1}JuMP.ConstraintRef{JuMP.Model,JuMP.GenericRangeConstraint{JuMP.GenericAffExpr{Float64,JuMP.Variable}}}

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

  2. 有没有办法在不改变类型的情况下添加求和约束x

4

2 回答 2

1

请参阅JuMP 文档

约束引用

为了在创建后操作约束,有必要维护一个引用。最简单的方法是使用特殊的三参数命名约束语法 for @constraint,它还允许您创建由集合索引的约束组,类似于@variable

所以 JuMP 的工作方式和预期的一样,为什么不@constraint(m, anothersymbol, sum(x)==1)呢?

于 2016-11-24T08:25:53.240 回答
0

让它像这样

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

@constraint(m, constr2, sum(x) == 1)
于 2016-11-24T08:27:20.297 回答