Example 3: Linear Programming Maximize Example

Maximize the linear programming problem

{\rm {max}} \,\, f(x) = 10x_1 + 15x_2 + 15x_3 + 13x_4 + 9x_5

subject to the following set of restrictions:

100x_1 + 50x_2 + 50x_3 + 40x_4 + 120x_5 \le 300
40x_1 + 50x_2 + 50x_3 + 15x_4 + 30x_5 \le 40
0 \le x_1 \le 1.0; 0 \le x_2 \le 1.0; 0 \le x_3 \le 1.0; 0 \le x_4 \le 1.0; 0 \le x_5 \le 1.0

Since DenseLP minimizes , the sign of the objective function must be changed to compute this solution. The signs of the dual solution components and the optimal value must also be changed. Because x_2 and x_3 are not uniquely determined within the bounds, this problem has a convex family of solutions. DenseLP issues an exception, MultipleSolutionsException . A particular solution is available and retrieved in the finally block.


import com.imsl.math.*;

public class DenseLPEx3 {

    public static void main(String[] args) throws Exception {

        int[] constraintType = {1, 1};  /* Ax <= b */

        double[] lowerVariableBound = {0.0, 0.0, 0.0, 0.0, 0.0};
        double[] upperVariableBound = {1.0, 1.0, 1.0, 1.0, 1.0};

        double[][] A = {
            {100.0, 50.0, 50.0, 40.0, 120.0},
            {40.0, 50.0, 50.0, 15.0, 30.0}
        };
        double[] b = {300.0, 40.0};  /* constraint type Ax <= b */

        double[] c = {10.0, 15.0, 15.0, 13.0, 9.0};

        /*  Since DenseLP minimizes, change signs of the
         objective coefficients. */
        double[] negC = new double[c.length];
        for (int i = 0; i < c.length; i++) {
            negC[i] = -c[i];
        }

        DenseLP zf = new DenseLP(A, b, negC);
        zf.setLowerBound(lowerVariableBound);
        zf.setConstraintType(constraintType);
        zf.setUpperBound(upperVariableBound);

        try {
            zf.solve();
        } catch (DenseLP.MultipleSolutionsException e) {
            /* x_2 and x_3 are not uniquely determined, expect multiple solutions. 
             * Catch the exception, but continue to print result found. */
            System.out.println("Multiple solutions giving "
                    + "essentially the same minimum exist.");
        } finally {
            double[] dSolution = zf.getDualSolution();
            /* Change the sign of the dual solution and optimal value 
             * since DenseLP minimizes. */
            for (int i = 0; i < dSolution.length; i++) {
                dSolution[i] = -dSolution[i];
            }
            double optimalValue = -zf.getOptimalValue();

            new PrintMatrix("Solution").print(zf.getPrimalSolution());
            new PrintMatrix("Dual Solution").print(dSolution);
            System.out.println("Optimal Value = " + optimalValue);
        }
    }
}

Output

Multiple solutions giving essentially the same minimum exist.
 Solution
     0    
0  0      
1  0.257  
2  0.243  
3  1      
4  0      

Dual Solution
    0    
0  -0    
1   0.3  

Optimal Value = 20.5
Link to Java source.