Procedure GMP::Instance::CalculateSubGradient(GMP, variableSet, constraintSet, session)


The procedure GMP::Instance::CalculateSubGradient can be used to solve By = x for a given vector x, where B is the basis matrix of a linear program. This procedure can only be called after the linear program has been solved to optimality.

     GMP,           ! (input) a generated mathematical program
     variableSet,   ! (input) a set of variables
     constraintSet, ! (input) a set of constraints
     [session]      ! (input, optional) a solver session



An element in AllGeneratedMathematicalPrograms. The mathematical program should have model type LP or RMIP.


A subset of AllVariables.


A subset of AllConstraints.


An element in the set AllSolverSessions.

Return Value

The procedure returns 1 on success, or 0 otherwise.


  • Use the .ExtendedConstraint('RhsChange',*) suffix of the constraints in constraintSet to assign values to the vector x.

  • The suffix .ExtendedVariable('RhsChange',*) of the variables in variableSet will be used to store the subgradient y.

  • The suffixes .ExtendedConstraint and .ExtendedVariable have no unit and are not scaled.

  • This procedure should be called after a normal solve statement or after a successful call to procedure GMP::Instance::Solve.

  • This procedure can also be called after a successful call to the procedure GMP::SolverSession::Execute or the procedure GMP::SolverSession::AsynchronousExecute. In that case the solver session should be passed using the session argument.

  • A column corresponding to a variable in variableSet that is not part of GMP will be ignored. A row corresponding to a constraint in constraintSet that is not part of GMP will also be ignored.

  • This procedure is only supported by CPLEX and GUROBI.

  • This procedure cannot be used if the GMP is created by GMP::Instance::CreateDual.


Assume that ‘MP’ is a linear mathematical program and c(i) is a constraint and v(j) is a variable in this mathematical program. The following example shows how to calculate a subgradient after a normal solve statement.

solve MP;

! The next statement needs to be called once.
AllGMPExtensions += { 'RhsChange' };

c.ExtendedConstraint('RhsChange',i) := 1.0;


display v.ExtendedVariable('RhsChange',j);