Section 4.3 Question 4

How do you get the optimal solution to a standard maximization problem with the Simplex Method?

In the previous question, we learned how to make different variables into basic and nonbasic variables. This allowed us to calculate the locations of corner points on the feasible region and other points of intersection. For simple linear programming problems, there can be many such points. If we naively make different variables into basic variables, it may take a very long time to find the corner point that optimizes the objective function.

The Simplex Method is an algorithm for solving standard maximization problems. By following the steps below, you ensure that the points you find by changing basic variables are corner points of the feasible region. In addition, the algorithm is iterative. In other words, it is carried out several times with the result of each iteration providing the starting point to the next iteration. The beauty of the Simplex Method is that each iteration yields a larger value for the objective function and eventually leads to the largest possible value for the objective function.

To get a feel for how the Simplex Method works, let’s solve the standard maximization problem

4_3_2_01

We’ll start by converting this problem to an appropriate system of linear equations. Add a different slack variable to each constraint to yield

4_3_4_01

To convert the objective function to an appropriate form, move all of the terms with variables to the left side of the equation. This is done by subtracting 5x and 6y from both sides. This yields the equation -5x -6y + z = 0.

These equations form the system of linear equations

4_3_2_02

The augmented matrix for this system,

4_3_2_03

is the initial simplex tableau. It is the starting point for carrying out the Simplex Method algorithm. The bottom row of the tableau is called the indicator row. The algorithm starts by determining which variable will become a basic variable in the first iteration of the algorithm. The variable that corresponds to the most negative entry in the indicator row will become a basic variable.

For this matrix, the most negative entry is -6 in the second column. The variable y that corresponds to the column will become the basic variable. This column is the pivot column.

If we pick the column with the most negative entry in the indicator row to be the pivot column, the objective function will increase by the largest amount. Remember, those negative entries correspond to positive coefficients in the original objective function. For the objective function z = 5x + 6y, the most negative entry in the indicator row, -6, corresponds to the largest positive coefficient, 6, in the objective function. Increasing the value of y in the potential solution from 0 to some positive value leads to a larger increase in the objective function value z than increasing the value of x from 0 to the same positive value. This is due to the fact that the coefficient on y is larger than the coefficient of x. In effect, it is more efficient to change y values than x values in the solution.

We know that we’ll need to make all of the entries but one in that column equal to zero via row operations. The other entry will be a one. The row where we will put the one is called the pivot row, and the entry that becomes a one is called the pivot. To find which row will become the pivot row, we form quotients from the entries in the pivot column and the last column:

4_3_4_02

The row whose quotient is positive and smallest is the pivot row. In this case, the second row is the pivot row so the pivot is the number 2 in this row.

As we saw earlier, picking the pivot row carefully guarantees that the potential solution stays in the feasible region and all variables are non-negative. The variables must remain non-negative for a standard linear programming problem.

Let’s look at this idea more closely. Look at the initial tableau from the standard linear programming problem:

4_3_4_03

We already know that y will become a basic variable based on the numbers in the indicator row. By making y a basic variable, either s1 or s2 will join x as a nonbasic variable. The question is, which will it be?

Suppose that s1 and x will be the nonbasic variables in the next tableau, and will be set equal to zero. In this case, we can use the first row of the tableau to determine the corresponding value of y:

4_3_4_04

The value of s2 is found from the second row of the tableau by setting the nonbasic variables equal to zero and y = 4:

4_3_4_05

This is not a reasonable solution since the slack variable s2 is negative.

Let’s look at making s2 and x the nonbasic variables. In this case, we can use the second row of the tableau to determine the corresponding value of y:

4_3_4_06

The value of s1 is found from the first row of the tableau,

4_3_4_07

All variables in this case are non-negative. Note that the values for y in each case are precisely the quotients we use to choose which row becomes the pivot row. By choosing a value for y that is smaller (the smaller quotient), we get a situation in which all variables are non-negative.

Now that we know that the pivot is the 2 in the second row, second column of

4_3_4_08

we’ll use row operations to change it to a 1. The rest of the pivot column will be changed to zeros using row operations. This change in basic variables will lead to the largest increase in the value of the objective function and keep all variables non-negative.

As shown in Question 3, change the pivot to a one by multiplying the second row by 1/2:

4_3_4_09

Once the pivot is in place, use row operations to place zeros in the rest of the column:

4_3_4_10

In the Simplex Method, the optimal solution is obtained when there are no negative numbers in the indicator row.

Since the transformed matrix has a negative number in the indicator row, the solution (x, y) = (0, 2) is not optimal. The value of the objective function, z = 12, can be made greater by picking the first column to be the pivot column. To find the pivot row, examine the quotients formed from dividing entries in the last column by corresponding entries in the pivot column:

4_3_4_11

The smallest quotient is 4/3 in the first row. The pivot, 3/2, is in the first row, first column. As in the first iteration, we must use row operations to change the pivot to a one and change the rest of the pivot column to zeros.

To change the pivot to a one, multiply the first row by 2/3:

4_3_4_12

To complete the transformation of the pivot column, we must use row operations to put zeros in the rest of the pivot column:

4_3_4_13

For this tableau, the basic variables are x, y, and z. The nonbasic variables are s1 and s2. The indicator row has no negative entries so this tableau is the final tableau. The optimal solution is read from this tableau by setting the nonbasic variables equal to zero.

If we cover the nonbasic variables,

4_3_4_14

we see that this tableau corresponds to (x, y) = (4/3, 4/3) and an optimal value of z = 44/3. This is the same value we found graphically in Section 4.2

The process outlined here is summarized in the steps shown here.

The Simplex Method

1. Make sure the linear programming problem is a standard maximization problem.

2. Convert each inequality to an equality by adding a slack variable. Each inequality must have a different slack variable. Each constraint will now be an equality of the form

bx1 + b2 x2 + … + bn xn + s = c

where s is the slack variable for the constraint. If more than one slack variable is needed, use subscripts like s1, s2, …

3. Rewrite the objective function z = a1 x1 + a2 x2 + … + an xn by moving all of the variables to the left side. After rewriting the equation, the function will have the form

a1 x1a2 x2 – … – an xn + z = 0

4. Convert the equations from steps 2 and 3 to an initial simplex tableau. Put the equation from step 3 in the bottom row of the tableau and all other equations above it. The bottom row is called the indicator row.

5. Find the entry in the indicator row that is most negative. If two of the entries are most negative and equal, pick the entry that is farthest to the left. The column with this entry is called the pivot column.

6. For each row except the last row, divide the entry in the last column by the entry in the pivot column. The row with the smallest non-negative quotient is the pivot row. If more than one row has the same smallest quotient, the higher of the rows is the pivot row.

7. The pivot is the entry where the pivot row and pivot column intersect. Multiply the pivot row by the reciprocal of the pivot to change it to a 1.

8. To change the rest of the pivot column to zeros, multiply the pivot row by constants and add them to the other rows in the tableau. Replace those rows with the appropriate sums. When complete, the pivot should be a one, and the rest of the pivot column should be zeros.

9. If the indicator does not contain any negative entries, this tableau corresponds to the optimum solution. In this case, cover the nonbasic variables (set the nonbasic variables equal to zero), and read off the solution for the basic variables. Otherwise, repeat steps 5 through 9 until the indicator row contains no negative numbers.

The Simplex Method will reach an optimal solution for a standard maximization problem with any number of variables and any number of inequalities. However, problems with large numbers of variables and inequalities may require many iterations of steps 5 through 9 to reach the optimal solution. Take special care to avoid arithmetic errors when carrying out the row operations. A graphing calculator or spreadsheet can make the task of carrying out the row operations fairly painless.

Example 3    Find the Optimal Solution

Find the optimal solution to the linear programming problem

4_3_4_15

Solution Although this example has three constraints (in addition to the non-negativity constraints), it still has two decision variables. Each constraint needs a slack variable to convert it to an equation. Using the slack variables s1, s2, and s3, the constraints become

4_3_4_16

Move all of the variable terms in the objective function to the left side of the equation to yield

4_3_4_17

These equations become the initial simplex tableau

4_3_4_18

The bottom row of the initial simplex tableau is the indicator row. The most negative entry of the indicator row is -5. This means the pivot column is the second column in the tableau.

To determine the pivot row, compute the quotients formed by dividing entries in the last column by entries in the pivot column,

4_3_4_19

Any negative quotients, such as 3/5 in the third row, are discarded. The quotient formed in the first row, 15/3, is the smallest quotient so the pivot is the 3 in the first row, second column.

In the first iteration of the simplex method, we must use row operations to change the pivot to a one and all other entries in the pivot column to zero.

The pivot is changed to a 1 by multiplying the first row by 1/3. Carrying out the row operation yields

4_3_4_20

Three row operations are necessary to put the zeros in the rest of the pivot column:

4_3_4_21

The new tableau corresponds to the solution (x1, x2) = 0, 5) and is not optimal since there is a negative entry in the indicator row.

The new pivot column is the first column due to the negative number in the indicator row. To find the new pivot row, compute the quotient formed from dividing the entries in the last column by the entries in the new pivot column:

4_3_4_22

The second row is the only row with a valid quotient so it is the pivot row. The pivot is the 11 in the second row, first column of the tableau.

Multiply the pivot row by 1/11 to change the pivot to a 1:

4_3_4_23

To complete this Simplex Method iteration, we must place zero above and below the pivot using row operations.

Three row operations are required to place the zeros above and below the pivot.

4_3_4_24

The indicator row does not contain any negative numbers so the optimal solution has been reached.

The solution to the linear programming problem is easily observed by covering the columns corresponding to the nonbasic variables s1 and s2:

4_3_4_25

The optimal solution to the linear programming problem is z = 29 and occurs at (x1, x2) = (3, 7).

Section 4.3 Question 3

How do you find a basic feasible solution?

The initial simplex tableau allows us to calculate the locations of the corner points as well as any other points where the lines corresponding to the equations cross or cross the axes. Let’s start with the initial simplex tableau

4_3_2_03

Since there are more variables than equations, there is not a unique solution to the system of equations represented by the tableau. There are five variables and three equations so we need or 2 parameters to write the solution. Any two of the variables may be parameters, but in the case of the initial simplex tableau it is convenient to choose the parameters as x and y.

To see why, rewrite the augmented matrix as a system of equations,

4_3_2_02

The variables s1, s2, and z each have a coefficient of 1 and appear nowhere else in the system. In the matrix, this corresponds to the columns consisting of all zeros except for a single entry of 1. These variables are the basic variables for the initial simplex tableau. The other variables, x and y, are the nonbasic variables for the initial simplex tableau. To find possible corner points, we’ll solve for the basic variables in term of the nonbasic variables.

Solve for the basic variables variables in terms of x and y:

4_3_3_01

One possible solution to this system is found by setting the nonbasic variables x and y equal to zero. In this situation,

4_3_3_02

This situation corresponds to the corner point of the feasible region at (x, y) = (0, 0) with an objective function value of z = 0. At this corner point, the slack variables take on the values s1 = 4 and s2 = 4.

4_3_3_03

Figure 1 – The corner point corresponding to a solution of the initial simplex tableau with s1 = 4, s2 = 4 and z = 0.

Other corner points can be obtained by using row operations to make other variables basic instead of s1, s2, and z. In general, z should always be a basic variable so that it is easy to determine the value of the objective function.

Suppose we start from the initial simplex tableau

4_3_2_03

and multiply the second row by 1/2 and place the result in the second row (1/2 R2 becomes R2). This gives us a 1 in the second row, second column:

4_3_3_04

If we make the rest of the second column zeros, the variable y will become a basic variable. To do this, we’ll use two row operations.

First, multiply the second row by -1 and add it to the first row:

4_3_3_05

This sum will be placed in the first row. Second, multiply the second row by 6 and add it to the third row:

4_3_3_06

This sum is placed in the third row. Putting these rows into the tableau yields4_3_3_07

In this tableau, the variables y, s1, and z are basic. The variables x and s2 are nonbasic variables. Notice that by placing the 1 in the second column in the second row, the second slack variable (which originally was in the second row) became nonbasic. In general, when a 1 is placed in a column to make a variable basic, the slack variable corresponding to the row it was placed in becomes nonbasic. As with the initial simplex tableau, we’ll write this matrix as a system of equations and set the nonbasic variables equal to zero.

The corresponding system of equations is

4_3_3_08

If we solve each equation for a different basic variable we get

4_3_3_09

If we set the nonbasic variables x and s2 equal to zero, we find that s1 = 2, y = 2, and z = 12. This corresponds to the corner point at (x, y) = (0, 2) with an objective function value of z = 12.

4_3_3_10

 

Figure 2 – The corner point at (0,2) corresponding to s1 = 2, y = 2, and z = 12.

It is easier to find this corner point using the tableau without transforming it to a system of equations. The key is to realize that when nonbasic variables are set equal to zero, their coefficients in the matrix disappear. For instance, if we take the tableau we transformed with row operations and cross out the columns of the nonbasic variables we get:

4_3_3_11

By ignoring these columns, we can see that s1 = 2, y = 2, and z = 12. Combining this observation with our knowledge of setting the nonbasic variables equal to zero gives us the corner point at (0, 2) and objective function value z = 12.

We cannot arbitrarily make a variable into a basic variable. For instance, we might make x a basic variable by putting a 1 in the second row and first column and zeros in the rest of the column. Starting from the original simplex tableau, we must carry out two row operations:

4_3_3_12

To find the corner point corresponding to this matrix, cover the nonbasic variables and read off the values of the basic variables:

4_3_3_13

4_3_3_14

Figure 3 – A solution to the tableau that is not a corner point of the feasible region.

On the surface this might not seem all that different from earlier tableaus, but this one violates one of the assumptions for slack variables. In a standard maximization problem, the slack variables are assumed to be non-negative. In the solution we found from this tableau, the value for s1 is negative. This tells us that this solution does not correspond to a corner point of the feasible region.

The solution we have just found, (0, 4), matches a point on a line, but is not along the border of the feasible region. If we are not careful about picking the basic and nonbasic variables, we may obtain a point that is not related to the solution.

If we want to make the variable x a basic variable, it is better to use row operations to transform the original matrix

4_3_3_15

By covering the columns under y and s1, we observe that this new tableau corresponds to the solution x = 2 and y = 0 and the objective function value z = 10. This does match the corner point (2, 0) on the feasible region.

Example 2    Change Basic Variables

The basic variables for the initial simplex tableau
4_3_3_16are s1, s2, and z. Use row operations to change the tableau so that the basic variables are y, s1, and z. What corner point of the basic feasible solution does this new tableau correspond to?

Solution We want to change the basic variables from s1, s2, and z to y, s1, and z. This means we need to make s2 nonbasic and y basic. The other two variables, s1 and z, should remain basic variables.

To make y a basic variable, we need to place two 0’s and a 1 in the column corresponding to y. The only question is where should we put the one? The first row of the second column already has a one so all we need to do is to use row operations to place zeros in the rest of the column.

4_3_3_17

If you examine the new matrix, you’ll notice that y is a basic variable, but s1 is not. Instead, s2 is a basic variable.

If we place the one in the first row, the slack variable corresponding to that row, s1, becomes a nonbasic variable. Since we want s1 to remain basic and s2 to become nonbasic, the one should be placed in the second row of the first column. Start from the original tableau

4_3_3_16

In general, we get the one by multiplying the row by a constant:

4_3_3_18

Now we can add multiples of rows to put zeros in the rest of the second column.

4_3_3_19

Since the second, third, and fifth columns contains two zeros and a one, the basic variables are now y, s1, and z. The point in the feasible region corresponding to this tableau is found by covering the nonbasic variable columns x and s2. This shows the corner point to be at with an objective function value of z = 12.

Section 4.3 Question 2

What are slack variables?

The graphical strategy for solving linear programming problems relies on the idea that the maximum value of the objective function will occur at a corner point of a bounded feasible region. The Simplex Method is no different, but we need to work with equations for the border of the feasible region in matrix form. The trouble is that augmented matrices are designed to solve equations and we have inequalities. For the graphical strategy, we simply converted each inequality to an equation. For the Simplex Method, we’ll introduce slack variables to change the inequalities to equalities.

Let’s start from one of the linear programming problems from section 4.2:

4_3_2_01

This problem is a standard maximization problem with the decision variables x and y. The goal of utilizing slack variables is to change the two inequalities to equalities. We do this by adding some unknown amount to the left hand side of each inequality.

For instance, let’s look at the first inequality 2x + y ≤ 4. This inequality corresponds to an infinite number of ordered pairs in the xy-plane. However, we can also think of this inequality as an equation. To do this you need to realize that the left hand side is less than or equal to 4. If we were to add a non-negative amount to the left side, we could increase it enough to guarantee that the left side is equal to 4. We’ll call this positive amount s1 and refer to it as the slack variable for the first inequality. The value for s1 is such that

2x + y + s1 = 4

In effect, the variable s1 takes up the slack in the two sides of the inequality.

We can apply the same reasoning to the second inequality x + 2y ≤ 4. If we add a different nonnegative amount s2 to the left side, the inequality changes to the equality

x + 2y + s2 = 4

Written in this format, each inequality is now an equality with the variables (including the slack variables) on the left side and the constant on the right side.

The objective function z = 5x + 6y already includes an equal sign, but not in the same format as the equations derived from the constraints. Subtract 5x and 6y from both sides of the objective function to put all of the variables on the left side of the equal sign. This leaves us with the equation

-5x – 6y + z = 0

If we put these three equations together, we get a system of three equations in five variables. Write the constraint equations on top of the equation corresponding to the objective function to give

4_3_2_02

This system can be written as an augmented matrix with three rows and six columns:

4_3_2_03

The vertical line corresponds to the equal sign in the equations and the horizontal line helps to distinguish the constraints from the objective function. This matrix is called the initial simplex tableau and is the starting point for the Simplex Method. The term tableau is used when dealing with matrices in the context of the Simplex Method.
The bottom row obtained from the objective function is called the indicator row. The variables above each column are not always shown, but we do so here to clarify how the variables match up with the coefficients in the augmented matrix.

Example 1    Find the Initial Simplex Tableau

Find the initial simplex tableau for the craft brewery linear programming problem:

4_3_2_04

Solution This problem is a standard maximization problem. To convert it to a system of equations, we need to add three different slack variables to the three different inequalities.

Using the slack variables s1, s2, and s3, we get three equations,

4_3_2_05

To these equations, we need to add the objective function. If we move all of the variables in P = 100x1 + 80x2 to the left side of the equal sign, we are left with -100x1 – 80x2 + P = 0.

Combine all of the equations together with the objective function on the bottom and we get

4_3_2_06

A 4 x 7 augmented matrix for this system of equations is

4_3_2_07

This is the initial simplex tableau for the craft brewery linear programming problem.

Section 4.3 Question 1

What is a standard maximization problem?

The Simplex Method is easiest to apply to a type of linear programming problem called the standard maximization problem.

A standard maximization problem is a type of linear programminbn g problem in which the objective function is to be maximized and has the form

z = ax1 + ax2 + … + axn

where a1, …, an are real numbers and x1, …, xn are decision variables. The decision variables must represent non-negative values. The other constraints for the standard maximization problem have the form

b1 x1 + b2 x2 + … + bn xn ≤ c

where b1, …, bn and c are real numbers and c ≥ 0.

 

There are other types of linear programming problems (we’ll examine some of these in the next section), but in this section all of the problems are standard maximization problems. For instance, the craft brewery problem is a standard maximization problem. Even though the letter describing the variable P is not the same as z, it still fits the standard maximization form:

4_3_1_01

Since this example has only two decision variables x1 and x2, this example does not exploit the full power of the Simplex Method. However this problem and similar problems are useful for demonstrating the Simplex Method and we’ll focus on them to begin with. Once the strategy for solving the standard maximization problem has been established, we’ll extend the strategy to more complex problems.

Section 4.2 Question 3

How do you solve a linear programming application with a graph?

Now that we have established the strategy for solving linear programming problems graphically, let’s return to the two brewing examples.

Example 5      Solve the Linear Programming Application Graphically

The linear programming problem for a craft brewery is

4_2_3_01

where x1 is the number of barrels of pale ale and x2 is the number of barrels of porter produced. Solve this linear programming problem graphically to find the production level that maximizes the profit P.

Solution In earlier examples, we developed the system of inequalities and objective function for a craft brewery. By graphing many isoprofit levels we were able to find the optimal value for the profit function.

In this example we’ll use the simpler strategy we developed for maximizing the objective function. We’ll need to find the corner points of the feasible region and evaluate them in the objective function to find the maximum profit.

4_2_3_02

Figure 22 – The feasible region for the craft brewery.

The feasible region has five corner points that we must find. The easiest corner points to locate are the origin, the vertical intercept for 69.75x1 + 85.25x2 = 4,000,000 and the horizontal intercept for 23.8x1 + 10.85x2 = 1,000,000.

To find the vertical intercept for 69.75x1 + 85.25x2 = 4,000,000, set x1 = 0 and solve for x2:

4_2_3_03

The coordinates of this vertical intercept are approximately (x1, x2) = (0, 46920.8).

To find the horizontal intercept for 23.8x1 + 10.85x2 = 1,000,000, set x2 = 0 and solve for x1:

4_2_3_04

The coordinates of this horizontal intercept are approximately (x1, x2) = (42016.8, 0).

The other two corner points are points of intersection between the different borders. To find the corner point where the line x1 + x2 = 50,000 and the line 69.75x1 + 85,25x2 = 4,000,000 intersect, write this system of equations as the augmented matrix

4_2_3_04

We can use a graphing calculator or row operations to put this matrix into its reduced row echelon. The reduced row echelon form is

4_2_3_05

where the last column has been rounded to one decimal place. This places the corner point at approximately (16,935.5, 33,064.5).

The last corner point is located where the line x1 + x2 = 50,000 and the line 23.8x1 + 10.85x2 = 1,000,000 intersect. The augmented matrix for this system is

4_2_3_06

The reduced row echelon form for this matrix is

4_2_3_07

The third column has been rounded to one decimal place. This corresponds to the corner point (35,328.2, 14,671.8).

To find the production level that results in maximum profit, we need to substitute the corner points into the profit function.

4_2_3_08

The maximum profit is approximately $4,706,564 and is achieved when 35,328.2 barrels of pale ale and 14,671.8 barrels of porter are produced. The term “approximately” is used since the production levels have been rounded to the nearest tenth of a barrel.


 

Example 6    Solve the Linear Programming Application Graphically

The linear programming problem for the contract breweries is

4_2_3_09

where Q1 is the number of barrels of American pale ale contracted at brewery 1 and Q2 is the number of barrels of American pale ale contracted at brewery 2. How many barrels should be contracted from each brewery to minimize the production cost C?

Solution To find the optimal production levels, we need to graph the feasible region and evaluate the corner points in the cost function. The borders of each inequality are given by the equations Q1 + Q2 = 10,000, Q2 = 0.25Q1, and Q2 = Q1. Each of these equations can be graphed by utilizing slope-intercept form, Q2 = m Q1 + b. In this form, Q1 is graphed horizontally, and Q2 is graphed vertically.

4_2_3_10

Utilizing this information, we can graph the borders.

4_2_3_11

Figure 23 – The borders for the system of inequalities in Example 6.

The graph is shown in the first quadrant because of the non-negativity constraints Q1 ≥ 0 and Q2 ≥ 0.

To shade the solution for each inequality, we need to use a test point. Whenever possible we try to use (0, 0) for simplicity. However, this point is on two of the lines so we need to use another point. Any point can be used, and in this example we’ll use (4000, 0).

4_2_3_12

For the two inequalities that are false, we need to draw arrows on the lines pointing away from the test point. For the inequality that is true, we draw an arrow on the line pointing toward the test point. The arrows indicate the half planes that match the solution set of the individual inequalities.

4_2_3_13

Figure 24 – The individual solutions to the inequalities in Example 6.

The solution sets for the individual inequalities in the system of inequalities overlap in the shaded region in Figure 25.

4_2_3_14

Figure 25 -The feasible region is unbounded since it cannot be enclosed in a circle. If a minimum cost exists, it will occur at one or both of the two corner points of the region.

This feasible region is unbounded since it cannot be enclosed in a circle. If a minimum cost exists, it will occur at one or both of the two corner points of the region.

To find the corner points, we need to solve the systems of equations formed by the borders that intersect at the corner point. For instance, if we solve

4_2_3_15

we can locate the point at which the green and blue lines cross. This is easy to do if we replace Q2 with Q1 and solve for Q1:

4_2_3_16

Since Q2 = Q1, the corner point is at (5000, 5000).

The other corner point corresponds to the solution of the system

4_2_3_17

Replace Q2 with 0.25Q1 and solve for Q1:

4_2_3_18

Since Q2 = 0.25Q1, we can calculate Q2 = 0.25 (8000) = 2000 to yield the corner point (8000, 2000).

The optimal solution is found by evaluating the cost function at each of the corner points.

4_2_3_19

 

4_2_3_20

Figure 26 – The feasible region with the isocost line C = 1,050,000. Lower isocost lines are to the left of this line and outside of the feasible region.

The lowest cost is $1,050,000. It occurs when 8000 barrels from brewery 1 and 2000 barrels from brewery 2 are contracted.