#set document(title: "5.11 Linear Programming", author: "OpenStax / XYZ Homework") #set page(width: 8.5in, height: auto, margin: 1in) #import "@preview/cetz:0.5.2" #set text(font: ("STIX Two Text", "Libertinus Serif", "New Computer Modern"), size: 10.5pt, lang: "en") #show math.equation: set text(font: ("STIX Two Math", "New Computer Modern Math")) #set par(justify: true, leading: 0.62em, spacing: 0.9em) #set enum(spacing: 1.1em) // room between list items so tall inline fractions don't collide #set list(spacing: 1.1em) #set table(stroke: 0.5pt + rgb("#c7ccd3")) #let BLUE = rgb("#183B6F") // brand navy — section bars + example/solution labels (white on navy 11.09:1) #let ORANGE = rgb("#A94509") // brand primary-700 — AA-safe deep orange for TEXT (5.93:1 on white; raw brand #F37021 is 2.94:1 and must never carry text) #let RED = rgb("#DC2626") // brand error-600 #let GREEN = rgb("#059669") // brand success-600 (decoration only; small green text uses green-text #007942) #show heading.where(level: 1): it => block(width: 100%, above: 0pt, below: 16pt, fill: gradient.linear(BLUE, rgb("#2C5AA0")), inset: (x: 14pt, y: 12pt), radius: 3pt, text(fill: white, weight: "bold", size: 19pt, it.body)) #show heading.where(level: 2): it => block(width: 100%, above: 18pt, below: 10pt, fill: BLUE, inset: (x: 10pt, y: 6pt), radius: 2pt, text(fill: white, weight: "bold", size: 12pt, it.body)) #show heading.where(level: 3): it => text(fill: ORANGE, weight: "bold", size: 12.5pt, it.body) #show heading.where(level: 4): it => text(fill: BLUE, weight: "bold", size: 10.5pt, it.body) #let examplebox(label, title, body) = block(width: 100%, breakable: true, fill: rgb("#EFF1F5"), stroke: 0.5pt + rgb("#CFDDF0"), radius: 4pt, inset: 10pt, above: 12pt, below: 12pt)[ #block(below: 6pt)[#box(fill: BLUE, inset: (x: 6pt, y: 2pt), radius: 2pt, text(fill: white, weight: "bold", size: 8.5pt, label)) #h(0.4em) #strong[#title]] #body] // rail = decorative left rule (raw brand token); labelcolor = AA-safe label text shade #let notebox(label, rail, labelcolor, tint, body) = block(width: 100%, breakable: true, fill: tint, stroke: (left: 3pt + rail), inset: (left: 10pt, rest: 8pt), radius: (right: 4pt), above: 11pt, below: 11pt)[ #text(fill: labelcolor, weight: "bold", size: 7.5pt, tracking: 0.5pt)[#upper(label)] #linebreak() #body] #let solutionbox(body) = block(above: 4pt, below: 8pt)[ #text(fill: BLUE, weight: "bold", size: 8.5pt)[Solution] #linebreak() #body] #let figph(msg) = block(width: 100%, height: 60pt, fill: rgb("#f6f7f9"), stroke: (paint: rgb("#c7ccd3"), dash: "dashed"), radius: 4pt, inset: 10pt)[ #align(center + horizon, text(fill: rgb("#889"), style: "italic", size: 9pt, msg))] // Standardize inlined figure sizes: measure the natural CeTZ canvas, then scale to a // consistent envelope (aspect-aware; see build_typst.py FIG_* constants). Unlike the // print preamble, dimensions are FLOORED: in an editor a user can trim a figure to a // degenerate 1-D shape (a bare line), and w/h or tw/w would then divide by zero. #let _STD_W = 3.5 #let _WIDE_W = 5.6 #let _MAX_H = 3.4 #let _ASPECT_WIDE = 2.2 #let _UPSCALE_MAX = 1.15 #let stdfig(body) = context { let m = measure(body) let w = calc.max(m.width / 1in, 0.01) let h = calc.max(m.height / 1in, 0.01) let tw = if w / h > _ASPECT_WIDE { _WIDE_W } else { _STD_W } let s = calc.min(tw / w, _MAX_H / h, _UPSCALE_MAX) align(center, box(scale(x: s * 100%, y: s * 100%, reflow: true, body))) } #show figure: set block(breakable: false) #set figure(gap: 8pt) #show figure.caption: set text(size: 8.5pt, fill: rgb("#555")) == 5.11#h(0.6em)Linear Programming #figure(figph[The debris of destroyed buildings after an earthquake and tsunami.], alt: "The debris of destroyed buildings after an earthquake and tsunami.", caption: [The aftermath of an earthquake and tsunami.]) === Learning Objectives After completing this section, you should be able to: + Compose an objective function to be minimized or maximized. + Compose inequalities representing a system application. + Apply linear programming to solve application problems. Imagine you hear about some natural disaster striking a far-away country; it could be an earthquake, a fire, a tsunami, a tornado, a hurricane, or any other type of natural disaster. The survivors of this disaster need help—they especially need food, water, and medical supplies. You work for a company that has these supplies, and your company has decided to help by flying the needed supplies into the disaster area. They want to maximize the number of people they can help. However, there are practical constraints that need to be taken into consideration; the size of the airplanes, how much weight each airplane can carry, and so on. How do you solve this dilemma? This is where linear programming comes into play. #strong[Linear programming] is a mathematical technique to solve problems involving finding maximums or minimums where a linear function is limited by various constraints. As a field, linear programming began in the late 1930s and early 1940s. It was used by many countries during World War II; countries used linear programming to solve problems such as maximizing troop effectiveness, minimizing their own casualties, and maximizing the damage they could inflict upon the enemy. Later, businesses began to realize they could use the concept of linear programming to maximize output, minimize expenses, and so on. In short, linear programming is a method to solve problems that involve finding a maximum or minimum where a linear function is constrained by various factors. #notebox("Who Knew?", rgb("#183B6F"), rgb("#183B6F"), rgb("#EFF1F5"))[ #emph[A Mathematician Invents a “Tsunami Cannon”] On December 26, 2004, a massive earthquake occurred in the Indian Ocean. This earthquake, which scientists estimate had a magnitude of 9.0 or 9.1 on the Richter Scale, set off a wave of tsunamis across the Indian Ocean. The waves of the tsunami averaged over 30 feet (10 meters) high, and caused massive damage and loss of life across the coastal regions bordering the Indian Ocean. Usama Kadri works as an applied mathematician at Cardiff University in Wales. His areas of research include fluid dynamics and non-linear phenomena. Lately, he has been focusing his research on the early detection and easing of the effects of tsunamis. One of his theories involves deploying a series of devices along coastlines which would fire acoustic-gravity waves (AGWs) into an oncoming tsunami, which in theory would lessen the force of the tsunami. Of course, this is all in theory, but Kadri believes it will work. There are issues with creating such a device: they would take a tremendous amount of electricity to generate an AGW, for instance, but if it would save lives, it may well be worth it. ] === Compose an Objective Function to Be Minimized or Maximized An #strong[objective function] is a linear function in two or more variables that describes the quantity that needs to be maximized or minimized. #examplebox("Example 1")[Composing an Objective Function for Selling Two Products][ Miriam starts her own business, where she knits and sells scarves and sweaters out of high-quality wool. She can make a profit of \$8 per scarf and \$10 per sweater. Write an objective function that describes her profit. #solutionbox[ Let #math.equation(block: false, alt: "x")[$x$] represent the number of scarves sold, and let #math.equation(block: false, alt: "y")[$y$] represent the number of sweaters sold. Let #math.equation(block: false, alt: "P")[$P$] represent profit. Since each scarf has a profit of \$8 and each sweater has a profit of \$10, the objective function is #math.equation(block: false, alt: "P equals 8 x plus 10 y")[$P = 8 x + 10 y$]. ] ] #examplebox("Example 2")[Composing an Objective Function for Production][ William’s factory produces two products, widgets and wadgets. It takes 24 minutes for his factory to make 1 widget, and 32 minutes for his factory to make 1 wadget. Write an objective function that describes the time it takes to make the products. #solutionbox[ Let #math.equation(block: false, alt: "x")[$x$] equal the number of widgets made; let #math.equation(block: false, alt: "y")[$y$] equal the number of wadgets made; let #math.equation(block: false, alt: "T")[$T$] represent total time. The objective function is #math.equation(block: false, alt: "T equals 24 x plus 32 y")[$T = 24 x + 32 y$]. ] ] === Composing Inequalities Representing a System Application For our two examples of profit and production, in an ideal world the profit a person makes and/or the number of products a company produces would have no restrictions. After all, who wouldn’t want to have an unrestricted profit? However in reality this is not the case; there are usually several variables that can restrict how much profit a person can make or how many products a company can produce. These restrictions are called #strong[constraints]. Many different variables can be constraints. When making or selling a product, the time available, the cost of manufacturing and the amount of raw materials are all constraints. In the opening scenario with the tsunami, the maximum weight on an airplane and the volume of cargo it can carry would be constraints. Constraints are expressed as linear inequalities; the list of constraints defined by the problem forms a system of linear inequalities that, along with the objective function, represent a system application. #examplebox("Example 3")[Representing the Constraints for Selling Two Products][ Two friends start their own business, where they knit and sell scarves and sweaters out of high-quality wool. They can make a profit of \$8 per scarf and \$10 per sweater. To make a scarf, 3 bags of knitting wool are needed; to make a sweater, 4 bags of knitting wool are needed. The friends can only make 8 items per day, and can use not more than 27 bags of knitting wool per day. Write the inequalities that represent the constraints. Then summarize what has been described thus far by writing the objective function for profit and the two constraints. #solutionbox[ Let #math.equation(block: false, alt: "x")[$x$] represent the number of scarves sold, and let #math.equation(block: false, alt: "y")[$y$] represent the number of sweaters sold. There are two constraints: the number of items the business can make in a day (a maximum of 8) and the number of bags of knitting wool they can use per day (a maximum of 27). The first constraint (total number of items in a day) is written as: #math.equation(block: true, alt: "x plus y less than or equal to 8")[$x + y ≤ 8$] Since each scarf takes 3 bags of knitting wool and each sweater takes 4 bags of knitting wool, the second constraint, total bags of knitting wool per day, is written as: #math.equation(block: true, alt: "3 x plus 4 y less than or equal to 27")[$3 x + 4 y ≤ 27$] In summary, here are the equations that represent the new business: #math.equation(block: false, alt: "P equals 8 x plus 10 y")[$P = 8 x + 10 y$]; This is the profit equation: The business makes \$8 per scarf and \$10 per sweater. #math.equation(block: true, alt: "x plus y, less than or equal to, 8; 3 x plus 4 y, less than or equal to, 27")[$x + y & ≤ & 8 \ 3 x + 4 y & ≤ & 27$] ] ] #examplebox("Example 4")[Representing Constraints for Production][ A factory produces two products, widgets and wadgets. It takes 24 minutes for the factory to make 1 widget, and 32 minutes for the factory to make 1 wadget. Research indicates that long-term demand for products from the factory will result in average sales of 12 widgets per day and 10 wadgets per day. Because of limitations on storage at the factory, no more than 20 widgets or 17 wadgets can be made each day. Write the inequalities that represent the constraints. Then summarize what has been described thus far by writing the objective function for time and the two constraints. #solutionbox[ Let #math.equation(block: false, alt: "x")[$x$] equal the number of widgets made; let #math.equation(block: false, alt: "y")[$y$] equal the number of wadgets made. Based on the long-term demand, we know the factory must produce a minimum of 12 widgets and 10 wadgets per day. We also know because of storage limitations, the factory cannot produce more than 20 widgets per day or 17 wadgets per day. Writing those as inequalities, we have: #math.equation(block: true, alt: "x greater than or equal to 12")[$x ≥ 12$] #math.equation(block: true, alt: "y greater than or equal to 10")[$y ≥ 10$] #math.equation(block: true, alt: "x less than or equal to 20")[$x ≤ 20$] #math.equation(block: true, alt: "y less than or equal to 17")[$y ≤ 17$] The number of widgets made per day must be between 12 and 20, and the number of wadgets made per day must be between 10 and 17. Therefore, we have: #math.equation(block: true, alt: "12 less than or equal to x less than or equal to 20")[$12 ≤ x ≤ 20$] #math.equation(block: true, alt: "10 less than or equal to y less than or equal to 17")[$10 ≤ y ≤ 17$] The system is: #math.equation(block: true, alt: "T equals 24 x plus 32 y")[$T = 24 x + 32 y$] #math.equation(block: true, alt: "12 less than or equal to x less than or equal to 20")[$12 ≤ x ≤ 20$] #math.equation(block: true, alt: "10 less than or equal to y less than or equal to 17")[$10 ≤ y ≤ 17$] #math.equation(block: false, alt: "T")[$T$] is the variable for time; it takes 24 minutes to make a widget and 32 minutes to make a wadget. ] ] === Applying Linear Programming to Solve Application Problems There are four steps that need to be completed when solving a problem using linear programming. They are as follows: #strong[Step 1:] Compose an objective function to be minimized or maximized. #strong[Step 2:] Compose inequalities representing the constraints of the system. #strong[Step 3:] Graph the system of inequalities representing the constraints. #strong[Step 4:] Find the value of the objective function at each corner point of the graphed region. The first two steps you have already learned. Let’s continue to use the same examples to illustrate Steps 3 and 4. #examplebox("Example 5")[Solving a Linear Programming Problem for Two Products][ Three friends start their own business, where they knit and sell scarves and sweaters out of high-quality wool. They can make a profit of \$8 per scarf and \$10 per sweater. To make a scarf, 3 bags of knitting wool are needed; to make a sweater, 4 bags of knitting wool are needed. The friends can only make 8 items per day, and can use not more than 27 bags of knitting wool per day. Determine the number of scarves and sweaters they should make each day to maximize their profit. #solutionbox[ #strong[Step 1:] Compose an objective function to be minimized or maximized. From Example 3, the objective function is #math.equation(block: false, alt: "P equals 8 x plus 10 y")[$P = 8 x + 10 y$]. #strong[Step 2:] Compose inequalities representing the constraints of the system. From Example 3, the constraints are #math.equation(block: false, alt: "x plus y less than or equal to 8")[$x + y ≤ 8$] and #math.equation(block: false, alt: "3 x plus 4 y less than or equal to 27")[$3 x + 4 y ≤ 27$]. #strong[Step 3:] Graph the system of inequalities representing the constraints. Using methods discussed in Graphing Linear Equations and Inequalities, the graphs of the constraints are shown below. Because the number of scarves (#math.equation(block: false, alt: "x")[$x$]) and the number of sweaters (#math.equation(block: false, alt: "y")[$y$]) both must be non-negative numbers (i.e., #math.equation(block: false, alt: "x greater than or equal to 0")[$x ≥ 0$] and #math.equation(block: false, alt: "y greater than or equal to 0")[$y ≥ 0$]), we need to graph the system of inequalities in Quadrant I only. shows each constraint graphed on its own axes, while shows the graph of the system of inequalities (the two constraints graphed together). In , the large shaded region represents the area where the two constraints intersect. If you are unsure how to graph these regions, refer back to Graphing Linear Equations and Inequalities. #figure( stdfig([#grid(columns: 2, gutter: 1.5em, [#cetz.canvas({ import cetz.draw: * content((115.00pt, 192.00pt), text(font: sys.inputs.at("title-font", default: "STIX Two Text"), size: 11pt)[x + y ≤ 8]) line((0.00pt, 0.00pt), (184.00pt, 0.00pt), (0.00pt, 136.00pt), close: true, stroke: none, fill: rgb("#1D56A6").transparentize(78%)) line((0.00pt, 136.00pt), (184.00pt, 0.00pt), stroke: 0.7pt + black) circle((0.00pt, 136.00pt), radius: 3.0pt, fill: black, stroke: none) circle((69.00pt, 85.00pt), radius: 3.0pt, fill: black, stroke: none) circle((184.00pt, 0.00pt), radius: 3.0pt, fill: black, stroke: none) line((0.00pt, 0.00pt), (234.00pt, 0.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((0.00pt, 0.00pt), (0.00pt, 174.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((23.00pt, 0.00pt), (23.00pt, -3.00pt), stroke: 0.5pt + black) content((23.00pt, -5.00pt), anchor: "north", text(size: 8pt)[1]) line((46.00pt, 0.00pt), (46.00pt, -3.00pt), stroke: 0.5pt + black) content((46.00pt, -5.00pt), anchor: "north", text(size: 8pt)[2]) line((69.00pt, 0.00pt), (69.00pt, -3.00pt), stroke: 0.5pt + black) content((69.00pt, -5.00pt), anchor: "north", text(size: 8pt)[3]) line((92.00pt, 0.00pt), (92.00pt, -3.00pt), stroke: 0.5pt + black) content((92.00pt, -5.00pt), anchor: "north", text(size: 8pt)[4]) line((115.00pt, 0.00pt), (115.00pt, -3.00pt), stroke: 0.5pt + black) content((115.00pt, -5.00pt), anchor: "north", text(size: 8pt)[5]) line((138.00pt, 0.00pt), (138.00pt, -3.00pt), stroke: 0.5pt + black) content((138.00pt, -5.00pt), anchor: "north", text(size: 8pt)[6]) line((161.00pt, 0.00pt), (161.00pt, -3.00pt), stroke: 0.5pt + black) content((161.00pt, -5.00pt), anchor: "north", text(size: 8pt)[7]) line((184.00pt, 0.00pt), (184.00pt, -3.00pt), stroke: 0.5pt + black) content((184.00pt, -9.50pt), anchor: "north", text(size: 8pt)[8]) line((207.00pt, 0.00pt), (207.00pt, -3.00pt), stroke: 0.5pt + black) content((207.00pt, -5.00pt), anchor: "north", text(size: 8pt)[9]) line((230.00pt, 0.00pt), (230.00pt, -3.00pt), stroke: 0.5pt + black) content((230.00pt, -5.00pt), anchor: "north", text(size: 8pt)[10]) line((-3.00pt, 17.00pt), (0.00pt, 17.00pt), stroke: 0.5pt + black) content((-5.00pt, 17.00pt), anchor: "east", text(size: 8pt)[1]) line((-3.00pt, 34.00pt), (0.00pt, 34.00pt), stroke: 0.5pt + black) content((-5.00pt, 34.00pt), anchor: "east", text(size: 8pt)[2]) line((-3.00pt, 51.00pt), (0.00pt, 51.00pt), stroke: 0.5pt + black) content((-5.00pt, 51.00pt), anchor: "east", text(size: 8pt)[3]) line((-3.00pt, 68.00pt), (0.00pt, 68.00pt), stroke: 0.5pt + black) content((-5.00pt, 68.00pt), anchor: "east", text(size: 8pt)[4]) line((-3.00pt, 85.00pt), (0.00pt, 85.00pt), stroke: 0.5pt + black) content((-5.00pt, 85.00pt), anchor: "east", text(size: 8pt)[5]) line((-3.00pt, 102.00pt), (0.00pt, 102.00pt), stroke: 0.5pt + black) content((-5.00pt, 102.00pt), anchor: "east", text(size: 8pt)[6]) line((-3.00pt, 119.00pt), (0.00pt, 119.00pt), stroke: 0.5pt + black) content((-5.00pt, 119.00pt), anchor: "east", text(size: 8pt)[7]) line((-3.00pt, 136.00pt), (0.00pt, 136.00pt), stroke: 0.5pt + black) content((-9.50pt, 136.00pt), anchor: "east", text(size: 8pt)[8]) line((-3.00pt, 153.00pt), (0.00pt, 153.00pt), stroke: 0.5pt + black) content((-5.00pt, 153.00pt), anchor: "east", text(size: 8pt)[9]) line((-3.00pt, 170.00pt), (0.00pt, 170.00pt), stroke: 0.5pt + black) content((-5.00pt, 170.00pt), anchor: "east", text(size: 8pt)[10]) })], [#cetz.canvas({ import cetz.draw: * content((115.00pt, 192.00pt), text(font: sys.inputs.at("title-font", default: "STIX Two Text"), size: 11pt)[3x + 4y ≤ 27]) line((0.00pt, 0.00pt), (207.00pt, 0.00pt), (0.00pt, 112.20pt), close: true, stroke: none, fill: rgb("#1D56A6").transparentize(78%)) line((0.00pt, 112.20pt), (207.00pt, 0.00pt), stroke: 0.7pt + black) circle((0.00pt, 112.20pt), radius: 3.0pt, fill: black, stroke: none) circle((23.00pt, 102.00pt), radius: 3.0pt, fill: black, stroke: none) circle((69.00pt, 76.50pt), radius: 3.0pt, fill: black, stroke: none) circle((115.00pt, 51.00pt), radius: 3.0pt, fill: black, stroke: none) circle((207.00pt, 0.00pt), radius: 3.0pt, fill: black, stroke: none) line((0.00pt, 0.00pt), (234.00pt, 0.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((0.00pt, 0.00pt), (0.00pt, 174.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((23.00pt, 0.00pt), (23.00pt, -3.00pt), stroke: 0.5pt + black) content((23.00pt, -5.00pt), anchor: "north", text(size: 8pt)[1]) line((46.00pt, 0.00pt), (46.00pt, -3.00pt), stroke: 0.5pt + black) content((46.00pt, -5.00pt), anchor: "north", text(size: 8pt)[2]) line((69.00pt, 0.00pt), (69.00pt, -3.00pt), stroke: 0.5pt + black) content((69.00pt, -5.00pt), anchor: "north", text(size: 8pt)[3]) line((92.00pt, 0.00pt), (92.00pt, -3.00pt), stroke: 0.5pt + black) content((92.00pt, -5.00pt), anchor: "north", text(size: 8pt)[4]) line((115.00pt, 0.00pt), (115.00pt, -3.00pt), stroke: 0.5pt + black) content((115.00pt, -5.00pt), anchor: "north", text(size: 8pt)[5]) line((138.00pt, 0.00pt), (138.00pt, -3.00pt), stroke: 0.5pt + black) content((138.00pt, -5.00pt), anchor: "north", text(size: 8pt)[6]) line((161.00pt, 0.00pt), (161.00pt, -3.00pt), stroke: 0.5pt + black) content((161.00pt, -5.00pt), anchor: "north", text(size: 8pt)[7]) line((184.00pt, 0.00pt), (184.00pt, -3.00pt), stroke: 0.5pt + black) content((184.00pt, -5.00pt), anchor: "north", text(size: 8pt)[8]) line((207.00pt, 0.00pt), (207.00pt, -3.00pt), stroke: 0.5pt + black) content((207.00pt, -9.50pt), anchor: "north", text(size: 8pt)[9]) line((230.00pt, 0.00pt), (230.00pt, -3.00pt), stroke: 0.5pt + black) content((230.00pt, -5.00pt), anchor: "north", text(size: 8pt)[10]) line((-3.00pt, 17.00pt), (0.00pt, 17.00pt), stroke: 0.5pt + black) content((-5.00pt, 17.00pt), anchor: "east", text(size: 8pt)[1]) line((-3.00pt, 34.00pt), (0.00pt, 34.00pt), stroke: 0.5pt + black) content((-5.00pt, 34.00pt), anchor: "east", text(size: 8pt)[2]) line((-3.00pt, 51.00pt), (0.00pt, 51.00pt), stroke: 0.5pt + black) content((-5.00pt, 51.00pt), anchor: "east", text(size: 8pt)[3]) line((-3.00pt, 68.00pt), (0.00pt, 68.00pt), stroke: 0.5pt + black) content((-5.00pt, 68.00pt), anchor: "east", text(size: 8pt)[4]) line((-3.00pt, 85.00pt), (0.00pt, 85.00pt), stroke: 0.5pt + black) content((-5.00pt, 85.00pt), anchor: "east", text(size: 8pt)[5]) line((-3.00pt, 102.00pt), (0.00pt, 102.00pt), stroke: 0.5pt + black) content((-5.00pt, 102.00pt), anchor: "east", text(size: 8pt)[6]) line((-3.00pt, 119.00pt), (0.00pt, 119.00pt), stroke: 0.5pt + black) content((-5.00pt, 119.00pt), anchor: "east", text(size: 8pt)[7]) line((-3.00pt, 136.00pt), (0.00pt, 136.00pt), stroke: 0.5pt + black) content((-5.00pt, 136.00pt), anchor: "east", text(size: 8pt)[8]) line((-3.00pt, 153.00pt), (0.00pt, 153.00pt), stroke: 0.5pt + black) content((-5.00pt, 153.00pt), anchor: "east", text(size: 8pt)[9]) line((-3.00pt, 170.00pt), (0.00pt, 170.00pt), stroke: 0.5pt + black) content((-5.00pt, 170.00pt), anchor: "east", text(size: 8pt)[10]) })] )]), alt: "Two x y coordinate planes labeled x plus y less than or equal to 8 and 3 x plus 4 y less than or equal to 27. In each coordinate plane, the x and y axes range from 0 to 10, in increments of 1. The first graph shows a line that passes through the points, (0, 8), (3, 5), and (8, 0). The region below the line is shaded. The second graph shows a line that passes through the points, (0, 6.6), (1, 6), (3, 4.5), (5, 3), and (9, 0). The region below the line is shaded. Note: all values are approximate.", caption: [Graphs of each constraint], ) #figure( stdfig([#cetz.canvas({ import cetz.draw: * line((0.00pt, 0.00pt), (207.00pt, 0.00pt), (0.00pt, 112.20pt), close: true, stroke: none, fill: rgb("#A9C7E8").transparentize(78%)) line((0.00pt, 0.00pt), (184.00pt, 0.00pt), (0.00pt, 136.00pt), close: true, stroke: none, fill: rgb("#1D56A6").transparentize(78%)) line((0.00pt, 112.20pt), (207.00pt, 0.00pt), stroke: 0.7pt + black) content((107.79pt, 64.01pt), anchor: "south", text(size: 9pt)[Line 1]) line((0.00pt, 136.00pt), (184.00pt, 0.00pt), stroke: 0.7pt + black) content((97.35pt, 75.24pt), anchor: "south", text(size: 9pt)[Line 2]) circle((0.00pt, 112.20pt), radius: 3.0pt, fill: black, stroke: none) circle((23.00pt, 102.00pt), radius: 3.0pt, fill: black, stroke: none) circle((69.00pt, 76.50pt), radius: 3.0pt, fill: black, stroke: none) circle((207.00pt, 0.00pt), radius: 3.0pt, fill: black, stroke: none) circle((0.00pt, 136.00pt), radius: 3.0pt, fill: black, stroke: none) circle((69.00pt, 85.00pt), radius: 3.0pt, fill: black, stroke: none) circle((184.00pt, 0.00pt), radius: 3.0pt, fill: black, stroke: none) circle((115.00pt, 51.00pt), radius: 3.0pt, fill: rgb("#D62128"), stroke: none) line((0.00pt, 0.00pt), (234.00pt, 0.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((0.00pt, 0.00pt), (0.00pt, 174.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((23.00pt, 0.00pt), (23.00pt, -3.00pt), stroke: 0.5pt + black) content((23.00pt, -5.00pt), anchor: "north", text(size: 8pt)[1]) line((46.00pt, 0.00pt), (46.00pt, -3.00pt), stroke: 0.5pt + black) content((46.00pt, -5.00pt), anchor: "north", text(size: 8pt)[2]) line((69.00pt, 0.00pt), (69.00pt, -3.00pt), stroke: 0.5pt + black) content((69.00pt, -5.00pt), anchor: "north", text(size: 8pt)[3]) line((92.00pt, 0.00pt), (92.00pt, -3.00pt), stroke: 0.5pt + black) content((92.00pt, -5.00pt), anchor: "north", text(size: 8pt)[4]) line((115.00pt, 0.00pt), (115.00pt, -3.00pt), stroke: 0.5pt + black) content((115.00pt, -5.00pt), anchor: "north", text(size: 8pt)[5]) line((138.00pt, 0.00pt), (138.00pt, -3.00pt), stroke: 0.5pt + black) content((138.00pt, -5.00pt), anchor: "north", text(size: 8pt)[6]) line((161.00pt, 0.00pt), (161.00pt, -3.00pt), stroke: 0.5pt + black) content((161.00pt, -5.00pt), anchor: "north", text(size: 8pt)[7]) line((184.00pt, 0.00pt), (184.00pt, -3.00pt), stroke: 0.5pt + black) content((184.00pt, -9.50pt), anchor: "north", text(size: 8pt)[8]) line((207.00pt, 0.00pt), (207.00pt, -3.00pt), stroke: 0.5pt + black) content((207.00pt, -9.50pt), anchor: "north", text(size: 8pt)[9]) line((230.00pt, 0.00pt), (230.00pt, -3.00pt), stroke: 0.5pt + black) content((230.00pt, -5.00pt), anchor: "north", text(size: 8pt)[10]) line((-3.00pt, 17.00pt), (0.00pt, 17.00pt), stroke: 0.5pt + black) content((-5.00pt, 17.00pt), anchor: "east", text(size: 8pt)[1]) line((-3.00pt, 34.00pt), (0.00pt, 34.00pt), stroke: 0.5pt + black) content((-5.00pt, 34.00pt), anchor: "east", text(size: 8pt)[2]) line((-3.00pt, 51.00pt), (0.00pt, 51.00pt), stroke: 0.5pt + black) content((-5.00pt, 51.00pt), anchor: "east", text(size: 8pt)[3]) line((-3.00pt, 68.00pt), (0.00pt, 68.00pt), stroke: 0.5pt + black) content((-5.00pt, 68.00pt), anchor: "east", text(size: 8pt)[4]) line((-3.00pt, 85.00pt), (0.00pt, 85.00pt), stroke: 0.5pt + black) content((-5.00pt, 85.00pt), anchor: "east", text(size: 8pt)[5]) line((-3.00pt, 102.00pt), (0.00pt, 102.00pt), stroke: 0.5pt + black) content((-5.00pt, 102.00pt), anchor: "east", text(size: 8pt)[6]) line((-3.00pt, 119.00pt), (0.00pt, 119.00pt), stroke: 0.5pt + black) content((-5.00pt, 119.00pt), anchor: "east", text(size: 8pt)[7]) line((-3.00pt, 136.00pt), (0.00pt, 136.00pt), stroke: 0.5pt + black) content((-9.50pt, 136.00pt), anchor: "east", text(size: 8pt)[8]) line((-3.00pt, 153.00pt), (0.00pt, 153.00pt), stroke: 0.5pt + black) content((-5.00pt, 153.00pt), anchor: "east", text(size: 8pt)[9]) line((-3.00pt, 170.00pt), (0.00pt, 170.00pt), stroke: 0.5pt + black) content((-5.00pt, 170.00pt), anchor: "east", text(size: 8pt)[10]) })]), alt: "Two lines are plotted on an x y coordinate plane. In each coordinate plane, the x and y axes range from 0 to 10, in increments of 1. The first line passes through the points, (0, 6.6), (1, 6), (3, 4.5), and (9, 0). The region below the line is shaded in light blue. The second line passes through the points, (0, 8), (3, 5), and (8, 0). The region below the line is shaded in dark blue. The two lines intersect at (5, 3). The region below the intersection point and within the lines is shaded in gray.", caption: [Graph of the System of Inequalities], ) #strong[Step 4:] Find the value of the objective function at each corner point of the graphed region. The “graphed region” is the area where both of the regions intersect; in , it is the large shaded area. The “corner points” refer to each vertex of the shaded area. Why the corner points? Because the maximum and minimum of every objective function will occur at one (or more) of the corner points. shows the location and coordinates of each corner point. #figure( stdfig([#cetz.canvas({ import cetz.draw: * line((0.00pt, 0.00pt), (184.00pt, 0.00pt), (0.00pt, 114.75pt), close: true, stroke: none, fill: rgb("#1D56A6").transparentize(78%)) line((0.00pt, 114.75pt), (184.00pt, 0.00pt), stroke: 0.7pt + black) circle((0.00pt, 114.75pt), radius: 3.0pt, fill: black, stroke: none) circle((115.00pt, 51.00pt), radius: 3.0pt, fill: rgb("#D62128"), stroke: none) content((120.29pt, 59.49pt), anchor: "south-west", text(size: 8pt)[(unknown, unknown)]) circle((184.00pt, 0.00pt), radius: 3.0pt, fill: black, stroke: none) line((0.00pt, 0.00pt), (234.00pt, 0.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((0.00pt, 0.00pt), (0.00pt, 174.00pt), stroke: 0.7pt + black, mark: (end: ">", fill: black, size: 0.18)) line((23.00pt, 0.00pt), (23.00pt, -3.00pt), stroke: 0.5pt + black) content((23.00pt, -5.00pt), anchor: "north", text(size: 8pt)[1]) line((46.00pt, 0.00pt), (46.00pt, -3.00pt), stroke: 0.5pt + black) content((46.00pt, -5.00pt), anchor: "north", text(size: 8pt)[2]) line((69.00pt, 0.00pt), (69.00pt, -3.00pt), stroke: 0.5pt + black) content((69.00pt, -5.00pt), anchor: "north", text(size: 8pt)[3]) line((92.00pt, 0.00pt), (92.00pt, -3.00pt), stroke: 0.5pt + black) content((92.00pt, -5.00pt), anchor: "north", text(size: 8pt)[4]) line((115.00pt, 0.00pt), (115.00pt, -3.00pt), stroke: 0.5pt + black) content((115.00pt, -5.00pt), anchor: "north", text(size: 8pt)[5]) line((138.00pt, 0.00pt), (138.00pt, -3.00pt), stroke: 0.5pt + black) content((138.00pt, -5.00pt), anchor: "north", text(size: 8pt)[6]) line((161.00pt, 0.00pt), (161.00pt, -3.00pt), stroke: 0.5pt + black) content((161.00pt, -5.00pt), anchor: "north", text(size: 8pt)[7]) line((184.00pt, 0.00pt), (184.00pt, -3.00pt), stroke: 0.5pt + black) content((184.00pt, -9.50pt), anchor: "north", text(size: 8pt)[8]) line((207.00pt, 0.00pt), (207.00pt, -3.00pt), stroke: 0.5pt + black) content((207.00pt, -5.00pt), anchor: "north", text(size: 8pt)[9]) line((230.00pt, 0.00pt), (230.00pt, -3.00pt), stroke: 0.5pt + black) content((230.00pt, -5.00pt), anchor: "north", text(size: 8pt)[10]) line((-3.00pt, 17.00pt), (0.00pt, 17.00pt), stroke: 0.5pt + black) content((-5.00pt, 17.00pt), anchor: "east", text(size: 8pt)[1]) line((-3.00pt, 34.00pt), (0.00pt, 34.00pt), stroke: 0.5pt + black) content((-5.00pt, 34.00pt), anchor: "east", text(size: 8pt)[2]) line((-3.00pt, 51.00pt), (0.00pt, 51.00pt), stroke: 0.5pt + black) content((-5.00pt, 51.00pt), anchor: "east", text(size: 8pt)[3]) line((-3.00pt, 68.00pt), (0.00pt, 68.00pt), stroke: 0.5pt + black) content((-5.00pt, 68.00pt), anchor: "east", text(size: 8pt)[4]) line((-3.00pt, 85.00pt), (0.00pt, 85.00pt), stroke: 0.5pt + black) content((-5.00pt, 85.00pt), anchor: "east", text(size: 8pt)[5]) line((-3.00pt, 102.00pt), (0.00pt, 102.00pt), stroke: 0.5pt + black) content((-5.00pt, 102.00pt), anchor: "east", text(size: 8pt)[6]) line((-3.00pt, 119.00pt), (0.00pt, 119.00pt), stroke: 0.5pt + black) content((-5.00pt, 119.00pt), anchor: "east", text(size: 8pt)[7]) line((-3.00pt, 136.00pt), (0.00pt, 136.00pt), stroke: 0.5pt + black) content((-5.00pt, 136.00pt), anchor: "east", text(size: 8pt)[8]) line((-3.00pt, 153.00pt), (0.00pt, 153.00pt), stroke: 0.5pt + black) content((-5.00pt, 153.00pt), anchor: "east", text(size: 8pt)[9]) line((-3.00pt, 170.00pt), (0.00pt, 170.00pt), stroke: 0.5pt + black) content((-5.00pt, 170.00pt), anchor: "east", text(size: 8pt)[10]) })]), alt: "A line is graphed on an x y coordinate plane. The x and y axes range from 0 to 10, in increments of 1. The origin is labeled (0, 0). The line passes through the points, (0, 6.75), (5, 3), and (8, 0). The region below the line is shaded. The point, (5, 3) is labeled (unknown, unknown).", caption: [Graph of Region with Corner Points], ) Three of the four points are readily found, as we used them to graph the regions; the fourth point, the intersection point of the two constraint lines, will have to be found using methods discussed in Systems of Linear Equations in Two Variables, either using substitution or elimination. As a reminder, set up the two equations of the constraint lines: #math.equation(block: true, alt: "3 x plus 4 y, equals, 27; x plus y, equals, 8")[$3 x + 4 y & = & 27 \ x + y & = & 8$] For this example, substitution will be used. #math.equation(block: true, alt: "x plus y, equals, 8; y, equals, 8 minus x .")[$x + y & = & 8 \ y & = & 8 − x "."$] Substituting #math.equation(block: false, alt: "8 minus x")[$8 − x$] into the first equation for #math.equation(block: false, alt: "y")[$y$], we have #math.equation(block: true, alt: "3 x plus 4 open parenthesis 8 minus x close parenthesis, equals, 27; 3 x plus 32 minus 4 x, equals, 27; minus x, equals, minus 5; x, equals, 5")[$3 x + 4 ( 8 − x ) & = & 27 \ 3 x + 32 − 4 x & = & 27 \ − x & = & − 5 \ x & = & 5$] Now, substituting the 5 in for #math.equation(block: false, alt: "x")[$x$] in either equation to solve for #math.equation(block: false, alt: "y")[$y$]. Choosing the second equation, we have: #math.equation(block: true, alt: "5 plus y, equals, 8; y, equals, 3")[$5 + y & = & 8 \ y & = & 3$] Therefore, #math.equation(block: false, alt: "x equals 5")[$x = 5$], and #math.equation(block: false, alt: "y equals 3")[$y = 3$]. To find the value of the objective function, #math.equation(block: false, alt: "P equals 8 x plus 10 y")[$P = 8 x + 10 y$], put the coordinates for each corner point into the equation and solve. The largest solution found when doing this will be the maximum value, and thus will be the answer to the question originally posed: determining the number of scarves and sweaters the new business should make each day to maximize their profit. #figure(table( columns: 2, align: left, inset: 6pt, table.header([Corner (#math.equation(block: false, alt: "x")[$x$], #math.equation(block: false, alt: "y")[$y$])], [Objective Function #math.equation(block: false, alt: "P equals 8 x plus 1 0 y")[$P = 8 x + 1 0 y$]]), [#math.equation(block: false, alt: "open parenthesis 0 , 0 close parenthesis")[$( 0 , 0 )$]], [#math.equation(block: false, alt: "P equals 8 open parenthesis 0 close parenthesis plus 10 open parenthesis 0 close parenthesis equals 0")[$P = 8 ( 0 ) + 10 ( 0 ) = 0$]], [#math.equation(block: false, alt: "open parenthesis 0 , 6.75 close parenthesis")[$( 0 , 6.75 )$]], [#math.equation(block: false, alt: "P equals 8 open parenthesis 0 close parenthesis plus 10 open parenthesis 6.75 close parenthesis equals 67.5")[$P = 8 ( 0 ) + 10 ( 6.75 ) = 67.5$]], [#math.equation(block: false, alt: "open parenthesis 5 , 3 close parenthesis")[$( 5 , 3 )$]], [#math.equation(block: false, alt: "P equals 8 open parenthesis 5 close parenthesis plus 10 open parenthesis 3 close parenthesis equals 40 plus 30 equals 70")[$P = 8 ( 5 ) + 10 ( 3 ) = 40 + 30 = 70$]], [#math.equation(block: false, alt: "open parenthesis 8 , 0 close parenthesis")[$( 8 , 0 )$]], [#math.equation(block: false, alt: "P equals 8 open parenthesis 8 close parenthesis plus 10 open parenthesis 0 close parenthesis equals 64")[$P = 8 ( 8 ) + 10 ( 0 ) = 64$]], )) The maximum value for the profit #math.equation(block: false, alt: "P")[$P$] occurs when #math.equation(block: false, alt: "x equals 5")[$x = 5$] and #math.equation(block: false, alt: "y equals 3")[$y = 3$]. This means that to maximize their profit, the new business should make 5 scarves and 3 sweaters every day. ] ] #notebox("People in Mathematics", rgb("#183B6F"), rgb("#183B6F"), rgb("#EFF1F5"))[ #emph[Leonid Kantorovich] Leonid Vitalyevich Kantorovich was born January 19, 1912, in St. Petersburg, Russia. Two major events affected young Leonid’s life: when he was five, the Russian Revolution began, making life in St. Petersburg very difficult; so much so that Leonid’s family fled to Belarus for a year. When Leonid was 10, his father died, leaving his mother to raise five children on her own. Despite the hardships, Leonid showed incredible mathematical ability at a young age. When he was only 14, he enrolled in Leningrad State University to study mathematics. Four years later, at age 18, he graduated with what would be equivalent to a Ph.D. in mathematics. Although his primary interests were in pure mathematics, in 1938 he began working on problems in economics. Supposedly, he was approached by a local plywood manufacturer with the following question: how to come up with a work schedule for eight lathes to maximize output, given the five different kinds of plywood they had at the factory. By July 1939, Leonid had come up with a solution, not only to the lathe scheduling problem but to other areas as well, such as an optimal crop rotation schedule for farmers, minimizing waste material in manufacturing, and finding optimal routes for transporting goods. The technique he discovered to solve these problems eventually became known as linear programming. He continued to use this technique for solving many other problems involving optimization, which resulted in the book #emph[The Best Use of Economic Resources], which was published in 1959. His continued work in linear programming would ultimately result in him winning the Nobel Prize of Economics in 1975. ] === Key Terms - linear programming - objective function - constraint === Key Concepts - Linear programming is a mathematical technique to solve problems involving finding maximums or minimums where a linear function is limited by various constraints. - An objective function is a linear function in two or more variables that describes the quantity that needs to be maximized or minimized. - In linear programming, a constraint is a restriction that affects the maximum or minimum values of an objective function. - Through the creation of objective functions and restraints, a linear system can be developed and solved through linear programming. === Projects ==== Ratio and Proportion—Comparing Prices, Part 1 Go to your favorite coffee shops and find out what a same sized drink costs at each. You can do something similar for pizza as well. Find the unit rate (i.e., price per ounce or price per square inch). For example, go to your favorite coffee place and find the price per units on all their large coffee drinks. Or go to your favorite pizza place and compare prices of all their extra-large pizzas (by price per square inch). Write a report on the best deals. ==== Ratio and Proportion—Comparing Prices, Part 2 Rather than comparing prices of different, but same sized drinks (or pizzas), compare unit prices of the same drinks but of different sizes. Find out what the best bargain is based on price per ounce, price per square inch, etc. For example, compare the prices of your favorite soft drink sold at a local store, but in various sizes (i.e., 12-ounce can, 16-ounce bottle, 20-ounce bottle, 1-liter bottle, and multipacks). Or go to a pizza place and find out what the best bargain is on their menu, based on price per square inch of pizza. Write a report on the best deals. ==== Systems of Linear Inequalities—Comparing Cell Phone Plans Go to the websites of different cell phone companies and compare their plans. Write a report on “the best deals. "Best Deals” doesn’t necessarily mean “cheapest.” You will need to look at what each company provides concerning restrictions (constraints) on minutes to talk. What are the constraints on the cell phone coverage for each company? Do they cover your area of the country well? Do they cover the entire United States well, or at least areas where you will be travelling? Is this coverage 5G, or is it less? Can you add a phone easily? Can you bring your previous phone number to this plan? The possibilities of constraints affecting each plan are several. So your task is to determine which plan is best, based on not only cost but also all constraints you deem important.