Example of Phase 1 and Unboundedness

> with(plots): with(linalg):

Warning, the name changecoords has been redefined

Warning, the protected names norm and trace have been redefined and unprotected

Define and graph the region.  I include an objective function line as well.

> G1:=inequal( {x-2*y<=-4, -y<=-5, 2*x-y<=10, x>=0, y>=0}, x=-1..14, y=-1..14, optionsfeasible=(color=yellow), optionsexcluded=(color=white) ):

> G2:=implicitplot(3*x-y=20,x=-1..14,y=-1..14,color=black,thickness=3):

> display({G1,G2},scaling=constrained);


Define a simplex pivot function.

> mypivot:=(M,i,j)->pivot(mulrow(M,i,1/M[i,j]),i,j);

Set up the Phase 1 tableau.

> T0:=array([[1,-2,1,0,0,-1,0,-4],[0,-1,0,1,0,-1,0,-5],[2,-1,0,0,1,-1,0,10],[0,0,0,0,0,-1,1,0]]);

Perform the preliminary pivot to bring the tableau into feasible form.

> T1:=mypivot(T0,2,6);

Continue pivoting to Phase 1 optimality.

> T2:=mypivot(T1,2,2);

The objective function is zero, so the LP is feasible.

Delete the artificial variable and replace the Phase 1 objective function with the Phase 2 objective function.

> T3:=delcols(T2,6..6):T3[4,1]:=3:T3[4,2]:=-1:evalm(T3);

Perform the preliminary pivots to make the tableau basic again.

> T4:=mypivot(T3,2,2);

Proceed with Phase 2 pivoting.

> T5:=mypivot(T4,1,1);

> T6:=mypivot(T5,3,4);

At this point we discover that the LP is unbounded.