2016-11-24 2 views
0

ich eine einfache mathematische prog, die ich zu lösen versuchen:JuMP Einschränkung Makro Änderungen Art der zuvor deklarierte Variable

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 einige Matrizen mit Typ Array{Float64,2

Die Linie:

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

Ändert den Typ x von Array{JuMP.Variable,1} zu JuMP.ConstraintRef{JuMP.Model,JuMP.GenericRangeConstraint{JuMP.GenericAffExpr{Float64,JuMP.Variable}}}.

  1. Seit x erklärt wurde zuvor als eine Variable der Typ gleich bleiben nicht sollte? (Des Weiteren, wenn die obige Zeile ausgeführt wird, alles funktioniert noch, aber, getvalue wird nicht aufgrund der Änderung in Art.)

  2. Gibt es eine Möglichkeit, die Summe Einschränkung hinzuzufügen, ohne die Art der x

  3. Wechsel

Antwort

1

siehe JuMP documentation:

Constraint Referenzen

Um Einschränkungen nach der Erstellung zu manipulieren, muss eine Referenz gepflegt werden. Der einfachste Weg, dies zu tun ist, um die spezielle Drei-Argument benannte Integritäts Syntax für @constraint zu verwenden, die zusätzlich können Sie Gruppen von Einschränkungen durch Sätze @variable

So ist die Art und Weise JuMP funktioniert, ist analog indiziert zu erstellen wie erwartet, warum nicht @constraint(m, anothersymbol, sum(x)==1)?

0

machen es wie so

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

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