[Math] Converting an non-linear problem to linear (linear programming)

constraintslinear programming

I would like to use simplex on a non-linear programming problem and was wondering if there was a way to transform it to a linear constraint.

The problem is the following:

$$ \mathbb{min:} \space \space {q^*}_{q<0}*{C^T_{q<0}} + {q^*}_{q>0}*{C^T_{q>0}} $$
$$ subject \space to: \space {\tau}_{\mathbb{lower\_limit}} \lt (p+q)*w^T < {\tau}_{\mathbb{upper\_limit}} $$

where:
$$ \text{q is the variable vector of length n and } $$
$$ q^*_{q<0} = q \text{ where q < 0 and 0 else (same definition for } q^*_{q>0} ) $$
$$ \text{C}_{q<0} \text{ is a cost vector of length n for when q <0} $$
$$ \text{C}_{q>0} \text{ is a cost vector of length n for when q >0} $$
$$ \text{w} \text{ is a weight vector of length n} $$
$$ \tau \text{ are scalars} $$

Thanks in advance.

Best Answer

Assuming the costs are all positive you can use variable splitting:

$$\begin{align} \min & \sum_i c^+_i q^+_i + c^-_i q^-_i\\ & q_i = q^+_i - q^-_i\\ & q^+_i, q^-_i \ge 0 \end{align}$$

Related Question