Slack Variable Tutorial
Slack variables are defined to transform an inequality expression into an equality expression with an added slack variable. The slack variable is defined by setting a lower bound of zero (>0).
Inequality Constraint Form |
x > b |
Equality Constraint Form with Slack Variable |
x = b + slack |
Example Problem
$$\begin{align}\min \quad & cost_{total}\\\mathrm{subject\;to} \quad & supply<b\\& cost_{total}=(supply-2)^2\end{align}$$
Gekko (Python) Solution
# Minimize total_cost
# Subject to supply < b
from gekko import GEKKO
b = 5
m = GEKKO(remote=False)
supply = m.Var()
total_cost = m.Var()
m.Equation(supply<b)
m.Equation(total_cost==(supply-2)**2)
m.Minimize(total_cost)
m.solve()
print(supply.value[0])
print(total_cost.value[0])
APMonitor Solution
Inequality Constraints
In Gekko Optimization Suite and the APMonitor Modeling Language, inequality constraints are automatically translated into equality constraints with slack variables. In APMonitor, slack variables can also be defined by starting a variable name with slk. When the model is parsed at run-time, any variable beginning with slk is automatically assigned a lower value of zero. Alternatively, inequality constraints are automatically converted to equality constraints with a slack variable.