# How to write conditional constraints and sum the result in Linear Programming in Python?

I want to use the sum of a series of linear expressions as objective and constraints. These linear expressions are chosen to be included or not based on some conditions. I can achieve it in Excel Solver but don't know how to code it in python.

I've seen a solution of adding conditional constraints here but it couldn't take the sum of all the needed expressions before binding a limit.

Here is the model to be solved.

Variables:

$$x_0\ge0,\ x_1\ge0,\ x_2\ge0,\ x_3\ge0$$

There are $$n$$ linear expressions:

$$f_i(x_0,x_1,x_2,x_3) = a_{i0}x_0 + a_{i1}x_1 + a_{i2}x_2 + a_{i3}x_3 + b_i\quad (i=0,1,\dots,n)$$

Objective: to minimize the objective function below

$$objective = 0\\ for\ i\ in\ range(n): \\ \quad if\ f_i(x_0,x_1,x_2,x_3)\ge0:\\ \quad\quad objective\ = objective\ + f_i(x_0,x_1,x_2,x_3)\\$$

Constraints: sum $$\ge$$ -5000

$$sum=0\\ for\ i\ in\ range(n): \\ \quad if\ f_i(x_0,x_1,x_2,x_3)\lt0:\\ \quad\quad sum\ = sum\ + f_i(x_0,x_1,x_2,x_3)\\$$

To minimize $$\sum_i \max(f_i,0)$$, introduce a nonnegative variable $$y_i$$ and minimize $$\sum_i y_i$$ subject to $$y_i\ge f_i$$.

To enforce $$\sum_i \min(f_i,0)\ge -5000$$, introduce a nonpositive variable $$z_i$$ and impose $$\sum_i z_i\ge -5000$$ subject to $$z_i\le f_i$$.

SAS (disclaimer: I work at SAS) can automatically linearize your problem as follows:

   var X {0..3} >= 0;
impvar F {i in 0..n} = sum {j in 0..3} a[i,j]*X[j] + b[i];
min MyObj = sum {i in 0..n} max(F[i],0);
con MyCon: sum {i in 0..n} min(F[i],0) >= -5000;
solve linearize;

• Thank you so much!! I've built the model as you instructed, and it runs successfully. It's my first time to ask a question on this platform, never expect it's so helpful. I will then spend some time trying to figure out the logic of transforming a model in this way. Thanks again. Commented Jun 19 at 6:47
• By the way, could you recommend some learning materials to better understand the way you transform the objective and constraints here? Thanks in advance. Commented Jun 19 at 7:01
• I added a link to my answer. You can also find many more examples here: or.stackexchange.com/questions/tagged/linearization Commented Jun 19 at 17:35