Constraint#
- class Constraint#
The Constraint object stores the information regarding a constraint in the algebraic
model.
It can contain multiple constraint instances, or can be scalar. Generally, numerical values are available
for each ConstraintInstance
, which are accessible through the function Constraint.get
.
For scalar constraints, direct accessors to the values are available (see functions Constraint.body
or Constraint.dual
below).
For ease of use, values for the entire algebraic entity can be accessed directly and assigned to MATLAB vectors using the
DataFrame
object. To assign values in this way, see AMPL.setData
. To get the values use
Constraint.getValues
.
get(key)#
- classmethod Constraint.get(key)#
Syntax#
v = get(key)
Description#
v = get(key)
returns the ConstraintInstance corresponding to the specified key.
Note that the same effect can be achieved using MATLAB’s indexing operator (round brackets).
Input Arguments#
key
The key of the constraint instance to look up.
**Output Arguments**#
v
The specified constraint instance
Example#
Create an indexed constraint, get a reference to an instance and drop it
ampl.eval('var x{1..5} <= 10;');
ampl.eval('maximize z : sum{i in 1..5} x[i];');
ampl.eval('c{i in 1..5}: x[i] <= i;');
x = ampl.getVariable('x');
c = ampl.getConstraint('c');
ampl.solve;
x.getValues
c.get(3).drop();
ampl.solve;
x.getValues
gives:
ans =
x [*] :=
1 1
2 2
3 3
4 4
5 5
;
ans =
x [*] :=
1 1
2 2
3 10
4 4
5 5
;
getValues#
- classmethod Constraint.getValues()#
Syntax#
df = c.getValues()
df = c.getValues(suffixes)
Description#
These functions return a dataframe with all the specified values of the constraint, decoupled from the underlying AMPL.
To gain access to the data, see DataFrame
.
c.getValues()
gets the AMPL value (equivalent to the suffix dual
)
c.getValues(suffixes)
allows the user to specify which suffixes to get
Input Arguments#
suffixes
Strings specifying which suffixes of the constraint to get (see AMPL built-in suffixes).
**Output Arguments**#
df
A dataframe containing all the specified values of the constraint and its indices
Example#
Create an algebraic variable in AMPL, then get the body and the lower and upper bounds for all instances in a dataframe.
ampl.eval('var x{1..5} <= 10;');
ampl.eval('maximize z : sum{i in 1..5} x[i];');
ampl.eval('c{i in 1..5}: -i <= x[i] <= i;');
c = ampl.getConstraint('c');
ampl.solve;
df = c.getValues('body', 'lb', 'ub')
gives:
i in 1 .. 5 | body lb ub
1.0 | 1.0 -1.0 1.0
2.0 | 2.0 -2.0 2.0
3.0 | 3.0 -3.0 3.0
4.0 | 4.0 -4.0 4.0
5.0 | 5.0 -5.0 5.0
body()#
- classmethod Constraint.body()#
Syntax#
v = body()
Description#
v = body()
FOR SCALAR CONSTRAINTS ONLY: Get the current value of the constraint’s body
**Output Arguments**#
v
The current body of the constraint
Example#
Create a scalar constraint c (using AMPL.eval
) and get its body.
ampl.eval('var x := 4.2;');
ampl.eval('c : 0<= x <= 5;');
c = ampl.getConstraint('c');
c.body
gives:
ans =
4.2000
dual#
- classmethod Constraint.dual()#
Syntax#
v = dual
Description#
dual
(VALID ONLY FOR SCALAR COSTRAINTS) Get the current value of the constraint’s dual variable.
**Output Arguments**#
v
The value of the dual variable corresponding to the constraint
Example#
Create a scalar constraint c and get its dual value.
ampl.eval('var x := 4.2;');
ampl.eval('c : 0<= x <= 5;');
c = ampl.getConstraint('c');
c.dual
gives:
ans = 0
setDual(v)#
- classmethod ConstraintInstance.setDual()#
Syntax#
setDual(v)
Description#
setDual(v)
Assigns the specified value to the dual variable for this constraint instance. Equivalent to the AMPL code:
var x{1..2};
c{i in 1..2}: x[i]<=i;
let c[1] := v;
Input Arguments#
v
The value to be assigned
Example#
Create a constraint c and sets its dual value. We have to switch off AMPL presolve abilities to see the effect consistently.
ampl.setBoolOption('presolve', 0)
ampl.eval('var x{1..2};');
ampl.eval('c{i in 1..2}: x[i] <= 20;');
cinstance = ampl.getConstraint('c').get(1);
cinstance.setDual(4);
cinstance.dual
gives:
ans =
4
lb#
- classmethod Constraint.lb()#
Syntax#
v = lb
Description#
lb
Access the current lower bound of the constraint (if scalar)
**Output Arguments**#
v
The lower bound of the constraint
Example#
Create a scalar constraint c and get its lower bound.
ampl.eval('var x := 4.2;');
ampl.eval('c : 0<= x <= 5;');
c = ampl.getConstraint('c');
c.lb
gives:
ans = 0
ub#
- classmethod Constraint.ub()#
Syntax#
v = ub
Description#
dual
Access the current upper bound of the constraint (if scalar).
**Output Arguments**#
v
The upper bound of the constraint
Example#
Create a scalar constraint c and get its lower bound.
ampl.eval('var x := 4.2;');
ampl.eval('c : 0<= x <= 5;');
c = ampl.getConstraint('c');
c.lb
gives:
ans = 0
drop#
- classmethod Constraint.drop()#
Syntax#
drop
Description#
drop
Drop all instances in the constraint, corresponding to the AMPL code
drop constraintname;
.
Example#
Create a scalar constraint c1 and an indexed constraint c2 (using AMPL.eval
) and drop them.
ampl.eval('var x{1..3}<=4;');
ampl.eval('maximize z: sum{i in 1..3} x[i];');
ampl.eval('c1: x[2] <= 1;');
ampl.eval('c2 {i in 1..3} : x[i] <= i;');
x = ampl.getVariable('x');
ampl.solve;
x.display
ampl.getConstraint('c1').drop
ampl.solve;
x.display
ampl.getConstraint('c2').drop
ampl.solve;
x.display
gives::
ans =
x [*] :=
1 1
2 1
3 3
;
ans =
x [*] :=
1 1
2 2
3 3
;
ans =
x [*] :=
1 4
2 4
3 4
;
restore#
- classmethod Constraint.restore()#
Syntax#
restore
Description#
restore
Restore all instances in the constraint
Example#
Create a constraint c1, drop it and restore it
ampl.eval('var x{1..3}<=4;');
ampl.eval('maximize z: sum{i in 1..3} x[i];');
ampl.eval('c2 {i in 1..3} : x[i] <= i;');
x = ampl.getVariable('x');
c2 = ampl.getConstraint('c2')
c2.drop;
ampl.solve;
x.display
c2.restore;
ampl.solve;
x.display
gives:
x [*] :=
1 4
2 4
3 4
;
ans =
x [*] :=
1 1
2 2
3 3
;