Previous Up Next

16.1.1  Simplex algorithm

The simple case.

Linear programming problem in its simplest form is to find the maximum of an objective function

  z(x1,…,xn)=c1x1+ ⋯+cnxn

subject to constraints (where bi≥ 0, i=1,…,m):

     
   
    a11x1+a12x2+⋯+a1nxn≤ b1
 
    am1x1+am2x2+⋯+amnxn≤ bm
             (1)

and

  xi≥ 0   i=1,…,n.

This can be abbreviated as

  max(c x),    Ax ≤ bx ≥ 0, b≥ 0,

where the vector inequalities mean term-by-term inequalities. The constraints determine a simplex in ℝn and the standard approach to solving this problem is called the simplex method.

The simplex method.

Xcas can apply the simplex method for you, but it can still help to get a rough idea of how it works. (You can search the Internet for “simplex method” to get more details.)

The constraint inequalities (1) can be turned into equalities by adding an auxiliary (surplus) variable for each inequality. The constraints are equivalent to:

     
  a11x1a12x2+⋯+a1nxn+s1 +0+⋯+0=b1         
          
am1x1am2x2+⋯+amnxn+0 +⋯ +0+sm=bm          

for some s1,…,sm≥ 0. The straightforward solution to this system of equations, namely xi=0 for i=1,…,n and sj=bj for j=1,…,m, will be the initial solution. The objective function

     
  z=c1x1+⋯+cnxn         
 =c1x1+⋯+cnxn+0s1+⋯+0sm           

will be zero at this solution. If one of the coefficients of the objective function is positive, you can find a larger value of xi that will also be a solution of the equations (by making one of the sj smaller) and will give a larger value of z.

The mechanics of this process involves writing the given information in a matrix. The matrix of the system of equalities including the surplus variables is (A Imb); the simplex method begins with this matrix above a row beginning with −c followed by zeros. The last element of the last row is the value of the objective function at the current solution. The resulting matrix (the simplex tableau) looks like

  


    AImb
    −c00


The simplex method involves doing a specific series of row operations that effectively determine a new solution to the constraints that increase the values of the current values of the variables xi and so increase the value of the objective function. The method ends when there are no negative values left in the bottom row.

The simplex_reduce command performs the simplex method on a linear programming problem of the form, for b≥ 0, Axb with x≥ 0.

Alternatively, you could combine the arguments A,b,c into the matrix that begins the algorithm:

  


    AImb
    −c00


which you can construct with the following command lines:

B:=augment(A,idn(m)); C:=border(B,b); d:=append(-c,0$(m+1)); D:=augment(C,[d]); simplex_reduce(D)

The above matrix is obtained as D and passed to simplex_reduce.

Example

Maximize X+2Y subject to

     
  −3X +2Y ≤ 3,         
X +Y ≤ 4,         
X,Y ≥ 0.          
simplex_reduce([[-3,2],[1,1]],[3,4],[1,2])
     
7,
1,3,0,0
,












01
1
5
3
5
3
10
1
5
2
5
1
00
1
5
8
5
7












          

This means that the maximum of X+2Y under these conditions is 7, it is obtained for X=1,Y=3 because [1,3,0,0] is the augmented solution and the reduced matrix is:

  












01
1
5
3
5
3
10
1
5
2
5
1
00
1
5
8
5
7












Notice that the (non-zero) values of the solution have columns of the m× m identity matrix above them.

Reducing a more complicated case to the simple case.

With the former call of simplex_reduce, you have to:

For example, minimize 2x+yz+4 subject to

     
  x ≤ 1,          
y ≥ 2,          
x+3yz=2,          
2xy+z ≤ 8,         
x+y ≤ 5.          

Let x=1−X, y=Y+2, z=5−X+3Y. The problem is equivalent to finding the minimum of −2X+Y−(5−X+3Y)+8 under conditions

     
  2(1−X)−(Y+2)+ 5−X+3Y ≤ 8,         
−(1−X) +(Y+2) ≤ 5,         
X,Y ≥ 0.          

or to find the minimum of (−X−2Y+3) subject to

     
  −3X+2Y ≤ 3,         
X +Y ≤ 4,         
X,Y ≥ 0.          

i.e. to find the maximum of −(−X−2Y+3)=X+2Y−3 under the same conditions, hence it is the same problem as to find the maximum of X+2Y seen before. You found that the previous problem had a maximum of 7, hence the result here is 7−3=4.

The general case.

A linear programming problem may not in general be directly reduced like above to the simple case. The reason is that a starting solution must be found before applying the simplex algorithm.

The standard form of a linear programming problem is similar to the simplest case above, but with Ax=b (instead of Axb) for b ≥ 0 under the conditions x≥ 0. In this case, there is no straightforward solution. So the first problem is to find an x with x≥ 0 and Ax=b.

Finding an initial solution.

Let m be the number of rows of A. Add artificial variables s1,…,sm and maximize −∑si under the conditions Ax=b, x ≥ 0, s ≥ 0 starting with initial value 0 for x variables and y=b. If a solution exists and is 0, then the si must all be 0 and so x will be solution of Ax=b, x≥ 0.

You can solve this with simplex_reduce by calling it with a single matrix argument:

  


    AImb
    010


For example, to find the minimum of 2x+3yz+t with x,y,z,t≥ 0 and:

     
  −x−     y     +     t=    1  
      y−     z+     t=    3   

you would start by finding a solution of

     
  −x−     y     +     t+     s1     =    1  
      y−     z+     t     +     s2=    3   

as mentioned above.

simplex_reduce([[-1,-1,0,1,1,0,1],[0,1,-1,1,0,1,3],[0,0,0,0,1,1,0]])
     
0,
0,1,0,2,0,0
,









1
2
0
1
2
1
1
2
1
2
2
1
2
1
1
2
0
1
2
1
2
1
0000110









          

Since the solution (x,y,z,t,s1,s2)=(0,1,0,2,0,0) has s1=s2=0, a non-negative solution of the equalities in x,y,z and t is (x,y,z,t)=(0,1,0,2).

Finding a solution of the LP problem.

Now you can make a second call to simplex_reduce with the reduced matrix (less the columns corresponding to the variables s1 and s2) and the usual c. In this case, finding the requested minimum means finding the maximum of −2x−3y+zt, so c=(−2,−3,1,−1).

simplex_reduce([[-1/2,0,-1/2,1,2],[1/2,1,-1/2,0,1],[2,3,-1,1,0]])
     
−5,
0,1,0,2
,









1
2
0
1
2
12
1
2
1
1
2
01
1010−5









          

This maximum is −5, so the requested minimum is −(−5)=5 at (0,1,0,2) (x=0, y=1, z=0 and t=2).


Previous Up Next