0% found this document useful (0 votes)
7 views

Exercise Session 2

Uploaded by

lars.lagauw
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views

Exercise Session 2

Uploaded by

lars.lagauw
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

16/10/2023, 08:00–10:25

Exercise session 2: Solving LPs (Simplex & Sensitivity) 18/10/2023, 16:05–18:30

Administration
• Class 1: Venue: PC Lokaal 200C 01.03.
• Class 2: Venue: PC Lokaal C300 03.44 (PC-Klas 2).

Problems
• Winston (2004), Section 4.5, Problem (A)3.
• Winston (2004), Section 4.6, Problem (A)2.
• Winston (2004), Section 4.7, Problem (A)1.
• Winston (2004), Section 4.8, Problem (A)2.
• Winston (2004), Section 4.11, Problem (A)1.
• Winston (2004), Section 4.12, Problem (A)2.
• Winston (2004), Chapter 4, Review problem (A)6.
• Winston (2004), Chapter 4, Review problem (A)7.
• Winston (2004), Chapter 4, Review problem (B)17.
• Winston (2004), Chapter 6, Review problem (A)13.
• Winston (2004), Chapter 6, Review problem (A)16.

Reflection

76
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.5, Problem A3†
Use the simplex algorithm to solve the following problem:

max z “ 2x1 ´ x2 ` x3 (101)

subject to

3x1 ` x2 ` x3 § 60 (102)
x1 ´ x2 ` 2x3 § 10 (103)
x1 ` x2 ´ x3 § 20 (104)
x1 , x2 , x3 • 0 (105)
(106)

First, convert the LP into standard form:

max z “ 2x1 ´ x2 ` x3 (107)

subject to

3x1 ` x2 ` x3 ` s1 “ 60 (108)
x1 ´ x2 ` 2x3 ` s2 “ 10 (109)
x1 ` x2 ´ x3 ` s3 “ 20 (110)
x1 , x2 , x3 • 0 (111)
s 1 , s2 , s3 • 0 (112)
(113)

The objective function can then be rewritten as z ´ 2x1 ` x2 ´ x3 “ 0.

We write the canonical form 0 and calculate the basic variables (BV) by setting the non-basic
variables x1 “ x2 “ x3 “ 0. The first entry variable is x1 as it has the highest negative coefficient in
row 0.
z x1 x2 x3 s1 s2 s3 rhs BV Ratio
row 0 1 -2 1 -1 0 0 0 0 z “0 –
row 1 0 3 1 1 1 0 0 60 s1 “ 60 20
row 2 0 1 -1 2 0 1 0 10 s2 “ 10 10
row 3 0 1 1 -1 0 0 1 20 s3 “ 20 20

We see that row 2 is the winner of the ratio test as it has the lowest ratio. Now we need to make the
entry variable x1 a basic variable with a coefficient of 1 in the winning row (row 2). As the coefficient
of x1 in row 2 is already 1 row 2’ is the same as row 2, we can use elementary row operations (ero’s)
to calculate the new tableau.
z x1 x2 x3 s1 s2 s3 rhs BV Calculation Ratio
row 0’ 1 0 -1 3 0 2 0 20 z “ 20 2(row 2’) + row 0 –
row 1’ 0 0 4 -5 1 -3 0 30 s1 “ 30 -3(row 2’) + row 1 7 12
row 2’ 0 1 -1 2 0 1 0 10 x1 “ 10 row 2 –
row 3’ 0 0 2 -3 0 -1 1 10 s3 “ 10 -1(row 2’) + row 3 5

77
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Row 3’ is the winner of the ratio test. Now we need to make the entry variable x2 a basic variable
with a coefficent of 1 in row 3’. This is done by multiplying row 3’ with 12 and then using ero’s to
find the new basic feasible solution in the following tableau:

z x1 x2 x3 s1 s2 s3 rhs BV Calculation
row 0” 1 0 0 1.5 0 1.5 0.5 25 z “ 25 row 3” + row 0’
row 1” 0 0 0 1 1 -1 -2 10 s1 “ 10 -4(row 3”) + row 1’
row 2” 0 1 0 0.5 0 0.5 0.5 15 x1 “ 15 row 3” + row 2’
row 3” 0 0 1 -1.5 0 -0.5 0.5 5 x2 “ 5 -0.5(row 3’)

This is the optimal tableau as there are no more variables with negative coefficients in row 0. The
optimal solution is thus: z “ 25; s1 “ 10; x1 “ 15; x2 “ 5; x3 “ s2 “ s3 “ 0.

78
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.6, Problem A2†
Use the Simplex algorithm to find the optimal solution to the following LP:

min z “ ´x1 ´ x2
s.t.
x1 ´ x2 § 1
x1 ` x2 § 2
x1 , x2 • 0

We first present the initial tableau.

z x1 x2 s1 s2 rhs ratio
1 1 1 0 0 0
0 1 -1 1 0 1 –
0 1 1 0 1 2 2

The tie between x1 and x2 as the entry variable was broken arbitrarily. Performing elementary row
operations (EROs) yields the next iteration tableau.

z x1 x2 s1 s2 rhs ratio
1 0 0 0 -1 -2
0 2 0 1 1 3 –
0 1 1 0 1 2 2

This tableau is optimal, the solution being z “ ´2, s1 “ 3, x2 “ 2, x1 “ s2 “ 0.

79
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.7, Problem A1†
Show that if a toy soldier sold for $28, the Giapetto problem would have alternative optimal solutions.

The objective function changes to z “ 4x1 ` 2x2 . Solving the problem using the Simplex algorithm
yields the following sequence of tableaus.
z x1 x2 s1 s2 s3 rhs ratio
1 -4 -2 0 0 0 0
0 2 1 1 0 0 100 50
0 1 1 0 1 0 80 80
0 1 0 0 0 1 40 40
With x1 the entry variable replacing s3 in row 3, the next pivot’s tableau is given below.
z x1 x2 s1 s2 s3 rhs ratio
1 0 -2 0 0 4 160
0 0 1 1 0 -2 20 20
0 0 1 0 1 -1 40 40
0 1 0 0 0 1 40 –
With x2 the entry variable replacing s1 in row 1, we perform another pivot.
z x1 x2 s1 s2 s3 rhs ratio
1 0 0 2 0 0 200
0 0 1 1 0 -2 20
0 0 0 -1 1 1 20
0 1 0 0 0 1 40
This tableau is optimal, yielding z “ 200, x1 “ 40, x2 “ 20, s2 “ 20, s1 “ s3 “ 0. Since the
non-basic variable s3 has a zero coefficient in row of the optimal tableau, we can pivot s3 into the
basis, resulting in an alternative optimal solution z “ 200, x1 “ 40, x2 “ 20, s3 “ 20, s1 “ s2 “ 0.

80
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.8, Problem A2†
State a rule that can be used to determine if a minimisation problem has an unbounded optimal
solution (that is, z can be made arbitrarily small). Use the rule to show that

min z “ ´2x1 ´ 3x2


s.t.
x1 ´ x2 § 1
x1 ´ 2x2 § 2
x1 , x2 • 0

is an unbounded LP.

For a minimisation problem, an LP is unbounded if there is a variable with a positive coefficient in


row (it is an entry variable) that has a nonpositive coefficient in each constraint (resulting in not
being able to calculate a ratio). For the given problem, we obtain the following standard tableau.

z x1 x2 s1 s2 rhs ratio
1 2 3 0 0 0
0 1 -1 1 0 1 –
0 1 -2 0 1 2 –

Here x2 may be as large as desired. Since each unit by which x2 is increased decreases z by 3 units,
we may make z as small as desired. . . infinitely negative.

81
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.11, Problem A1†
Even if an LP’s initial tableau is nondegenerate, later tableaus may exhibit degeneracy. Degenerate
tableaus often occur in the tableau following a tie in the ration test. To illustrate this, solve the
following LP:

max z “ 5x1 ` 3x2


s.t.
4x1 ` 2x2 § 12
4x1 ` x2 § 10
x1 ` x2 § 4
x1 , x2 • 0

Also graph the feasible region and show which extreme points correspond to more than one set of
basic variables.

The sequence of tableaus is as follows.

z x1 x2 s1 s2 s3 rhs ratio
1 -5 -3 0 0 0 0
0 4 2 1 0 0 12 3
0 4 1 0 1 0 10 2 12
0 1 1 0 0 1 4 4

z x1 x2 s1 s2 s3 rhs ratio

1 0 - 74 0 5
4 0 50
4
0 0 1 1 -1 0 2 2
1 1 10
0 1 4 0 4 0 4 10
3
0 0 4 0 - 14 1 3
2 2

The tie in the ratio test indicates that the next bfs will be degenerate.

z x1 x2 s1 s2 s3 rhs ratio
7
1 0 0 4 - 12 0 16
0 0 1 1 -1 0 2 –
0 1 0 - 14 1
2 0 2 4
0 0 0 - 34 1
2 1 0 0

z x1 x2 s1 s2 s3 rhs ratio
1 0 0 1 0 1 16
0 0 1 - 12 0 2 2
1
0 1 0 2 0 -1 2
0 0 0 - 32 1 2 0 0

This tableau is optimal, yielding z “ 16, x1 “ 2, x2 “ 2, s2 “ 0, s1 “ s3 “ 0. This bfs corresponds to


the following three sets of basic variables: tx1 , x2 , s1 u, tx1 , x2 , s2 u, and tx1 , x2 , s3 u. The degeneracy is
because 3 “ 2 ` 1 (the problem has two decision variables) constraints meeting in a single point (see
point A “ p2, 2q in Figure 12).

82
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
x2
10

A
2

0 x1
0 2 4

Figure 12: Graphical solution.

83
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Section 4.12, Problem A2†
Use the Big M method to solve the following LP:

min z “ 2x1 ` 3x2


s.t.
2x1 ` x2 • 4
x1 ´ x2 • ´1
x1 , x2 • 0

Following the steps of the Big M method, we have a standardised problem.

min z “ 2x1 ` 3x2 ` Ma1


s.t.
2x1 ` x2 ´ e1 ` a1 “ 4
´x1 ` x2 ` s2 “ 1
x1 , x2 , e1 , a1 , s2 • 0

This leads to the following tableau.

z x1 x2 e1 a1 s2 rhs ratio
1 -2 -3 0 -M 0 0
0 2 1 -1 1 0 4
0 -1 1 0 0 1 1

Because we added the artificial variable a1 , and we want it to be the basic variable in row 1, we have
to remove its coefficient M from the objective function. To achieve that, we do an ERO:
row 1 =row -Mrow 1, yielding the first bfs.

z x1 x2 e1 a1 s2 rhs ratio
1 2M-2 M-3 -M 0 0 4M
0 2 1 -1 1 0 4 2
0 -1 1 0 0 1 1 –

z x1 x2 e1 a1 s2 rhs ratio
1 0 -2 –1 1-M 0 4
1 1 1
0 1 2 2 2 0 2
3
0 0 2 - 12 1
2 1 3

This tableau is optimal, yielding z “ 4, x1 “ 2, s2 “ 3, x2 “ e1 “ a1 “ 0.

84
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Chapter 4, Review problem A6†
Use the Big M method and the two-phase method to find the optimal solution to the following LP:

max z “ x1 ` x2
s.t.
2x1 ` x2 • 3
7
3x1 ` x2 §
2
x1 ` x2 § 1
x1 , x2 • 0

Following the steps of the Big M method, we have a standardised problem.

max z “ x1 ` x2 ´ M
s.t.
2x1 ` x2 ´ e1 ` a1 “ 3
7
3x1 ` x2 ` s2 “
2
x1 ` x2 ` s 3 “ 1
x1 , x2 , e1 , a1 , s2 , s3 • 0

This leads to the following tableau.

z x1 x2 e1 a1 s2 s3 rhs ratio
1 -1 -1 0 M 0 0 0
0 2 1 -1 1 0 0 3
7
0 3 1 0 0 1 0 2
0 1 1 0 0 0 1 1

Because we added the artificial variable a1 , and we want it to be the basic variable in row 1, we have
to remove its coefficient M from the objective function. To achieve that, we do an ERO:
row 1 =row -Mrow 1, yielding the first bfs.

z x1 x2 e1 a1 s2 s3 rhs ratio
1 -1-2M -1-M M 0 0 0 -3M
3
0 2 1 -1 1 0 0 3 2
7 7
0 3 1 0 0 1 0 2 6
0 1 1 0 0 0 1 1 1

z x1 x2 e1 a1 s2 s3 rhs ratio
1 0 M M 0 0 2M+1 1-M
0 0 -1 -1 1 0 0 1
1
0 0 -2 0 0 1 -3 2
0 1 1 0 0 0 1 1

This is the optimal tableau. But since a1 is positive, the original LP is infeasible.

85
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Two-phase method: The Phase I objective function is

min w “ a1

This leads to the following tableau.

w x1 x2 e1 a1 s2 s3 rhs ratio
1 0 0 0 -1 0 0 0
0 2 1 -1 1 0 0 3
7
0 3 1 0 0 1 0 2
0 1 1 0 0 0 1 1

Again, we first remove the artificial variable a1 from row , yielding the following tableau.

w x1 x2 e1 a1 s2 s3 rhs ratio
1 2 1 -1 0 0 0 3
3
0 2 1 -1 1 0 0 3 2
7 7
0 3 1 0 0 1 0 2 6
0 1 1 0 0 0 1 1 1

w x1 x2 e1 a1 s2 s3 rhs ratio
1 0 -1 -1 0 0 -2 1
0 0 -1 -1 1 0 -2 1
1
0 0 -2 0 0 1 -3 2
0 1 1 0 0 0 1 1

This is an optimal Phase I tableau. Since the optimal w -value is greater than zero, the original LP
has no feasible solution.

86
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Chapter 4, Review problem A7
Use the Simplex algorithm to find two optimal solutions to the following LP. How many optimal
solutions does this LP have? Find a third optimal solution.

max z “ 4x1 ` x2
s.t.
2x1 ` 3x2 § 4
x1 ` x2 § 1
4x1 ` x2 § 2
x1 , x2 • 0

We start by solving the basic standardised tableau, given as

z x1 x2 s1 s2 s3 rhs ratio
1 -4 -1 0 0 0 0
0 2 3 1 0 0 4 2
0 1 1 0 1 0 1 1
1
0 4 1 0 0 1 2 2

z x1 x2 s1 s2 s3 rhs ratio
1 0 0 0 0 1 2
5
0 0 2 1 0 - 12 3 6
5
3
0 0 4 0 1 - 14 1
2
2
3
1 1 1
0 1 4 0 0 4 2 2

While this tableau is optimal, yielding z “ 2, x1 “ 12 , s1 “ 3, s2 “ 12 , x2 “ s3 “ 0, there is a nonbasic


variable, x2 , that can enter without affecting the objective function value. So, it can be an alternative
optimum. The resulting tableau using row 2 as pivot row is the following.

z x1 x2 s1 s2 s3 rhs ratio
1 0 0 0 0 1 2
0 0 0 1 - 10
3
1
3
4
3 –
4
0 0 1 0 3 - 13 2
3
1
2

0 1 0 0 - 13 1
3
1
3 –

This tableau is optimal, too, yielding z “ 2, x1 “ 13 , x2 “ 23 , s1 “ 43 , s2 “ s3 “ 0. And again, there is


a nonbasic variable, s2 , that can enter the basis without affecting the optimum z-value. Another
pivot on row 2 results in the following tableau.

z x1 x2 s1 s2 s3 rhs ratio
1 0 0 0 0 1 2
5
0 0 2 1 0 - 12 3
3
0 0 4 0 1 - 14 1
2
1 1 1
0 1 4 0 0 4 2

This tableau is optimal, too, yielding z “ 2, x1 “ 12 , s1 “ 3, s2 “ 12 , x2 “ s3 “ 0, the same as the


first solution. The graphical solution can be seen in Figure 13. All points on the line segment AB are

87
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
x2

A
0 x1
0 1 2

Figure 13

potential solutions. Since we deal with continuous variables, there are an infinite number of solutions
5
along AB, of which C is one such solution where z “ 2, x1 “ 12 and x2 “ 13 . This solution can be
obtained by taking the middle value or, said differently, averaging over the two corner point solutions.

88
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Chapter 4, Review problem B17†
You are given the tableau shown in Table 13 for a maximization problem. Give conditions on the
unknowns a1 , a2 , a3 , b and c that make the following statements true:
(a) The current solution is optimal.
(b) The current solution is optimal, and there are alternative optimal solutions.
(c) The LP is unbounded (in this part, assume that b • 0).

Table 13

z x1 x2 x3 x4 x5 rhs
1 ´c 2 0 0 0 10
0 ´1 a1 1 0 0 4
0 a2 ´4 0 1 0 1
0 a3 3 0 0 1 b

(a) All of the NBV must have a non-negative coefficient in row , thus: ´c • 0 ñ c § 0. And
b • 0 must hold such that the sign restriction is satisfied for x5 .
(b) b • 0 as in paq. To have alternative solutions, there must be a NBV with coefficient 0 in row
', thus: c “ 0. Additionally, we need to make sure that adding x1 to the basis actually leads to
a feasible solution. Thus, we need to be able to select a leaving variable by performing the ratio
test. To do this, a2 ° 0 and/or a3 ° 0 should hold. If a2 § 0, then b ° 0 must hold.
(c) An LP is unbounded if for a NBV with a negative coefficient in row ', the coefficients in the
other rows are non-positive: ´c † 0 ñ c ° 0, a2 § 0 and a3 § 0. In this case, x1 can be
made arbitrarily large (thus, z will become arbitrarily large as well).

89
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Chapter 6, Review problem (A)13†
Consider the following LP and its tableau given below.

max z “ 4x1 ` x2 ` 2x3


s.t. 8x1 ` 3x2 ` x3 § 12
6x1 ` x2 ` x3 § 8
x1 , x2 • 0

z x1 x2 x3 s1 s2 rhs
z = 16 1 8 1 0 0 2 16
s1 = 4 0 2 2 0 1 -1 4
x3 = 8 0 6 1 1 0 1 8

a) Find the dual to this LP and its optimal solution.


b) Find the range of values of the objective function coefficient of x3 for which the current basis
remains optimal.
c) Find the range of values of the objective function coefficient of x1 for which the current basis
remains optimal.

a) The dual formulation is the following.

min w “ 12y1 ` 8y2


subject to
8y1 ` 6y2 • 4
3y1 ` y2 • 1
y1 ` y2 • 2
y1 , y2 • 0

The optimal solution of the dual problem can be found in row in the optimal tableau of the
primal problem: w “ 16, y1 “ 0 and y2 “ 2.
b) B ´1 can be found in the columns of the slack variables in the optimal tableau. Changing the
value of c3 from 2 to 2 ` yields:
„ ⇢
´1
“ ‰ 1 ´1 “ ‰
cBV B “ 0 2 ` “ 0 2`
0 1

The current basis remains optimal if the coefficients of the non-basic variables, x1 , x2 and s2 ,
remain positive.
„ ⇢
´1 8
c̄1 “ cBV B ´4“8`6
6
„ ⇢
´1 3
c̄2 “ cBV B ´1“1`
1
„ ⇢
0
c̄s2 “ cBV B ´1 ´0“2`
1

As a result, the current basis remains optimal for • ´1 or c3 • 1.


c) Changing the value of c1 from 4 to 4 ` only changes the row coefficient of x1 to 8 ´ . So,
the current basis remains optimal if § 8 or c1 § 12.

90
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Winston (2004), Chapter 6, Review problem (A)16†
Zales Jewelers uses rubies and sapphires to produce two types of rings. A Type 1 ring requires 2
rubies, 3 sapphires, and 1 hour of Jeweler’s labor. A Type 2 ring requires 3 rubies, 2 sapphires, and 2
hours of Jeweler’s labor. Each type 1 ring sells for $400; type 2 sells for $500. All rings produced by
Zales can be sold. At present, Zales has 100 rubies, 120 sapphires, and 70 hours of Jeweler’s labor.
Extra rubies can be purchased at a cost of $100 per ruby. Market demand requires that the company
produce at least 20 type 1 rings and at least 25 Type 2. The company wants to maximize its
revenue. Formulate the problem and solve with LINDO/LINGO.
a) Suppose that instead of $100, each ruby costs $190. Would Zales still purchase rubies? What
would be the new optimal solution to the problem?
b) Suppose that Zales were only required to produce at least 23 type 2 rings. What would Zales’
profit now be?
c) What is the most that Zales would be willing to pay for another hour of Jeweler’s labor?
d) What is the most that Zales would be willing to pay for another sapphire?
e) Zales is considering producing type 3 rings. Each type 3 ring can be sold for $550 and requires
4 rubies, 2 sapphires, and 1 hour of Jeweler’s labor. Should Zales produce any type 3 rings?

We let
x1 fi the number of type 1 rings produced.
x2 fi the number of type 2 rings produced.
r fi the number of rubies purchased.
The model can be formulated as follows.
max z “ 400x1 ` 500x2 ´ 100r
subject to
2x1 ` 3x2 ´ r § 100 (Rubies)
3x1 ` 2x2 § 120 (Sapphires)
x1 ` 2x2 § 70 (Labour)
x1 • 20 (Demand for type 1)
x2 • 25 (Demand for type 2)
x1 , x2 • 0 (Nonnegativity)
The optimal solution can be seen in Figure 14.
a) The allowable decrease for rubies is $100. Thus, if a ruby costs $190 (and has an objective
function coefficient of -190), the current basis remains optimal. The values of the decision
variables are unchanged, but the new z-value “ old z-value ´90 ˆ 15 “ $17 650.
b) As the dual price of type 2 rings is ´200, the profit when Zales is only required to produce 23
of type 2 rings is $19 000 ` p´2qp´200q “ $19 400.
c) The most that is Zales willing to pay for an extra hour of Jeweler’s labor is equal to the dual
price of the labour constraint: $200.
d) The most that is Zales willing to pay for another sapphire is equal to the dual price of the
sapphire constraint: $0. This is expected as there is slack in the sapphire constraint. By pricing
out the type 3 rings, we obtain
» fi
4
—2ffi
“ ‰ — ffi
c3 “ cBV B ´1 a3 ´ c3 “ 100 0 200 0 ´ 200 — ffi
—1ffi ´ 550 “ 50
–0fl
0
As this reduced cost is positive, the current basis remains optimal, and so no type 3 rings
should be produced.

91
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •
Figure 14: LINDO output.

92
[git] • Branch: main @ 852715e; Author: Johan W. Joubert; Date: 2023-10-14 16:49:19 +0200 •

You might also like