# Cournot Competition: Best-Response Dynamics and the Race to Equilibrium

> Two identical firms choose quantities in a linear market with constant marginal cost. The lecture derives each firm's best-response curve, locates the Cournot-Nash intersection, and then animates alternating quantity adjustments so convergence is visible and its stability can be justified from the response slopes. The resulting price is compared with monopoly and perfect competition before the final contrast with homogeneous-product Bertrand price competition.

- Canonical watch page: [Cournot Competition: Best-Response Dynamics and the Race to Equilibrium](https://academa.ai/lectures/cournot-duopoly-and-best-responses)
- Publisher: [Academa, Inc.](https://academa.ai)
- Subject: Economics
- Published: 2026-08-28T18:55:21.303Z
- Updated: 2026-08-28T18:55:21.303Z
- Duration: PT1036S (17 minutes 16 seconds)
- Chapters: 5
- Views: 0
- Language: en-US
- Access: Free
- Video stream: [HLS content](https://academa.ai/media/l/01M14TXT0PVMXZ1QRS662NNA4E/0/dark/master.m3u8)
- Audiovisual record: [Semantic JSON](https://academa.ai/media/l/01M14TXT0PVMXZ1QRS662NNA4E/0/semantic.json)
- Thumbnail: [Image](https://academa.ai/media/l/01M14TXT0PVMXZ1QRS662NNA4E/0/dark/poster.jpg)

## Description

Watch Cournot firms chase best responses to equilibrium, then compare its price with monopoly, competition, and Bertrand pricing.

## Chapters

- [00:00–02:38.329 · The Market and the Destination](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0)
- [02:38.329–07:4.378 · Building the Best-Response Curves](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=158.3292083333333)
- [07:4.378–10:37.115 · The Best-Response Chase](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663)
- [10:37.115–13:32.865 · Three Market Prices](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667)
- [13:32.865–17:16 · Quantity Setting Versus Price Setting](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=812.8653958333333)

## Transcript

### [00:00 · The Market and the Destination](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0)

Two firms will choose quantities. Each red or green curve will record one firm's best answer to the other firm's output. Their crossing is the destination of the lecture. At the yellow crossing, Firm 1 is already answering Firm 2 as well as it can, and Firm 2 is already answering Firm 1. Neither wants to change alone. That is the Cournot-Nash equilibrium. But I do not want that crossing to arrive as a mysterious pair of lines. We will build each line from profit, then let the firms chase one another toward the crossing. Begin with a deliberately simple market. The horizontal coordinate is total quantity Q. The vertical coordinate is the market price P. Demand is the blue line P equals one hundred minus Q. If total output is twenty, buyers pay eighty. If output rises, the price paid for every unit falls. Move total output from twenty to sixty. The market point slides down the demand curve, and price falls from eighty to forty. Quantity decisions therefore interact through one common price. Bring output back to forty. The corresponding price is sixty. We will later recognize this as the output and price a single profit-maximizing firm would choose. With two firms, total quantity is Firm 1's output plus Firm 2's output. The market does not care which firm supplied a unit. It sees only their sum. Both firms have constant marginal cost twenty and no fixed cost. The green line therefore stays flat at twenty, however much either firm produces. A firm's profit is its margin, price minus twenty, multiplied by its own quantity. The important word is own. Firm 1 earns the market margin on q one, not on its rival's production. Substitute the market price and total output. Profit becomes eighty minus q one minus q two, multiplied by the firm's own quantity. That expression contains the strategic tension. Producing another unit sells one more unit, but it also lowers the price received on every unit the firm already sells. Cournot competition asks each firm to choose its own quantity while treating the rival's quantity as given. We now solve that decision for Firm 1, first with a numerical guess and then for every possible guess.

### [02:38.329 · Building the Best-Response Curves](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=158.3292083333333)

Suppose Firm 1 believes Firm 2 will produce twenty units. Firm 1 now faces a one-variable decision: choose q one to maximize its own profit. The blue curve plots that profit against Firm 1's quantity. Profit is zero at quantity zero, rises, reaches a top, and eventually falls as the price effect overwhelms the extra sales. Try q one equal to ten. The market quantity is thirty, price is seventy, and Firm 1 earns a margin of fifty on ten units, or five hundred. Substituting the rival's twenty units leaves sixty minus q one, multiplied by q one. Expanding gives sixty q one minus q one squared. Move the trial quantity to thirty. The point climbs to the top of the profit curve. Here Firm 1 sells thirty units at a margin of thirty. Move farther to fifty. Profit falls back to five hundred. More output is not automatically better, because the common market price has fallen. Differentiate the quadratic. The marginal effect of q one is sixty minus two q one. Setting that equal to zero gives q one equal to thirty. So thirty is Firm 1's best response to a rival output of twenty. Now let the rival's quantity vary instead of fixing it at one number. Put Firm 2's output on the horizontal axis and Firm 1's output on the vertical axis. We want one point for every possible guess about q two. Firm 1's general profit is eighty minus q one minus q two, multiplied by q one. Expanding separates the own-output square from the interaction with the rival. Differentiate with respect to Firm 1's own quantity while holding q two fixed. The first-order condition is eighty minus two q one minus q two equal to zero. Solving gives q one equal to one half of eighty minus q two. This is not one answer. It is a rule assigning a profit-maximizing q one to every possible q two. Plot that rule in red. If Firm 2 produces zero, Firm 1 behaves like the market's sole producer and chooses forty. If Firm 2 produces twenty, Firm 1 chooses the thirty we just found. The red curve slopes downward because the quantities are strategic substitutes. A larger rival output depresses market price, so Firm 1's best reply is to produce less. Firm 2 solves the mirror-image problem. Its profit is the same market margin multiplied by q two. Differentiate with respect to q two. The first-order condition is eighty minus q one minus two q two equal to zero. Solving gives Firm 2's response: q two equals one half of eighty minus q one. The two firms have identical technologies and face the same demand. On axes ordered q two across and q one up, that response appears as the green curve. Every point on it is an output pair where Firm 2 is optimizing against Firm 1. The red curve records where Firm 1 is content. The green curve records where Firm 2 is content. Only their crossing makes both statements true at the same time. Because the firms are identical, the crossing lies on the dashed symmetry line q one equals q two. Call their common output q. Substitute q for the rival's output in either response rule. q equals one half of eighty minus q, so three q equals eighty. Each firm produces eighty thirds, about twenty-six point seven units. The yellow point is therefore the unique crossing of the two best-response curves. This algebra identifies the fixed point. It has not yet shown whether decentralized adjustment finds it. For that, we let the firms respond one after the other and watch the chase.

### [07:4.378 · The Best-Response Chase](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663)

Return to the quantity plane. The red and green response curves are fixed. The blue point will record the firms' current output pair, with q two across and q one up. Start away from equilibrium at q two equal to ten and q one equal to ten. The point is on neither response curve, so both firms currently want to revise. Firm 1 moves first. It treats q two equal to ten as fixed and chooses one half of seventy, so the point moves vertically and lands at thirty-five. Now Firm 2 observes q one equal to thirty-five. Its best response is twenty-two point five, so the point moves horizontally and lands on the green curve. Firm 1 responds again. Against twenty-two point five, its maximizing quantity is twenty-eight point seven five. The red vertical step is already much shorter than the first. Firm 2 answers with twenty-five point six. The green horizontal step is shorter as well. The pair has entered the narrow region between the two curves. Another Firm 1 response gives about twenty-seven point two. It still overshoots the crossing slightly, but by less than before. Firm 2 then chooses about twenty-six point four. The alternating steps produce a staircase: red movements are Firm 1, and green movements are Firm 2. Firm 1 now moves to about twenty-six point eight. The vertical correction has become small enough that the displayed coordinates begin to agree in their first two digits. Firm 2 replies with about twenty-six point six. The horizontal correction is smaller again. One more Firm 1 response gives about twenty-six point seven. The point is now visually almost at the crossing. Firm 2 answers at about twenty-six point seven as well. The staircase has tightened around the yellow Cournot-Nash point. The motion itself suggests stability. A displacement away from the crossing generates a smaller response in the opposite direction, then a still smaller reply. We can measure that shrinkage. Let e one and e two denote each firm's output minus its equilibrium output. Firm 1's response curve has slope minus one half. Therefore Firm 1's new error is minus one half of Firm 2's old error. Firm 2's response also has slope minus one half. Its new error is minus one half of Firm 1's new error. Multiplying the two slopes gives positive one quarter. After one complete Firm 1 and Firm 2 round, the remaining error has only one quarter of its previous magnitude. That is why the staircase contracts rather than exploding outward. The negative slopes make successive corrections alternate sides, while their product being smaller than one makes the corrections shrink. The conclusion is conditional, not universal. We assumed exact best responses, one firm moving at a time, and an unchanged demand and cost environment. Different adjustment rules can create slower motion, simultaneous jumps, or instability. Under this benchmark, however, equilibrium is both a pair of mutual best responses and the stable fixed point of the visible chase. We can now ask what market price that fixed point produces.

### [10:37.115 · Three Market Prices](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667)

Use the same demand and cost curves to compare three market organizations. The blue line is demand and the green line is marginal cost twenty. Begin with monopoly. One owner controls the entire market quantity, so its total revenue is price times Q: one hundred minus Q, multiplied by Q. Differentiating total revenue gives marginal revenue one hundred minus two Q. The red marginal-revenue curve falls twice as quickly as demand. The monopolist chooses quantity where marginal revenue equals marginal cost. One hundred minus two Q equals twenty. Solving gives monopoly quantity forty. Move up from quantity forty to demand, and buyers pay the monopoly price sixty. Now return to Cournot. Each firm produces eighty thirds, so together they supply one hundred sixty thirds, about fifty-three point three units. Demand at that total quantity gives price one hundred forty thirds, about forty-six point seven. The yellow Cournot point lies down and to the right of monopoly. Why does Cournot produce more than monopoly? Each firm considers how its own output lowers price, but it does not fully internalize the price loss imposed on the rival's units. For perfect competition, firms take price as given and expand until price equals marginal cost. Demand reaches price twenty at total quantity eighty. The ordering is now visible. Monopoly restricts output the most and has the highest price. Cournot lies between. Perfect competition has the largest output and the lowest price. Numerically, price falls from sixty under monopoly, to about forty-six point seven under Cournot, to twenty under perfect competition. The table collects the three outcomes. Read the headings first: market organization, total quantity, and market price. Monopoly produces forty and charges sixty. That row is the benchmark for coordinated quantity restriction. Cournot duopoly produces about fifty-three point three and charges about forty-six point seven. Strategic quantity competition moves the market toward competition, but not all the way. Perfect competition produces eighty and sets price equal to marginal cost, twenty. Relative to Cournot, another twenty-six point seven units are traded. The Cournot result is therefore intermediate because firms compete through quantities while retaining some control over market price. If firms compete directly through prices, the strategic logic changes sharply.

### [13:32.865 · Quantity Setting Versus Price Setting](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=812.8653958333333)

Cournot firms commit to quantities and let market demand determine one common price. Bertrand competition reverses the strategic choice: each firm posts a price. Keep the comparison disciplined. The product is identical, both firms have marginal cost twenty, either firm can serve the market, and buyers choose the lower price. Suppose Firm 1 posts fifty while Firm 2 posts forty-five. The two colored points display those prices on the same scale. The lower-price firm serves the market. Buyers do not pay fifty for what they can buy at forty-five, so Firm 2 sells and Firm 1 sells nothing. Firm 1 can respond by posting forty-four. It gives up one unit of margin relative to forty-five, but captures the market instead of selling zero. Firm 2 can answer with forty-three. Unlike the Cournot chase, an attractive response here is not a movement toward a smooth quantity curve. It is a price just below the rival. As long as the lower price remains above marginal cost, the higher-price firm can profitably undercut it. So no common price above twenty can be an equilibrium. Continue the undercutting pressure toward cost. Both price points move down the scale and arrive at twenty. At a common price of twenty, neither firm can gain by charging more, because it would lose its customers. Neither can gain by charging less, because price would fall below marginal cost. The Bertrand equilibrium is therefore price equal to marginal cost under these assumptions. Total demand at price twenty is eighty, the same total output as the perfectly competitive benchmark. This is the central contrast. Under Cournot, a firm choosing more output depresses the price on all units, so each firm restrains quantity. Under Bertrand, a slightly lower price can redirect the whole market. Quantity competition therefore leaves price above marginal cost in our two-firm example. Direct price competition drives the benchmark price down to marginal cost. Place the two games side by side. The table names the strategic choice, equilibrium price, and total output. In Cournot, firms choose quantities. Their best-response crossing gives price about forty-six point seven and total output about fifty-three point three. In the homogeneous-product Bertrand benchmark, firms choose prices. Undercutting gives price twenty and total output eighty. Do not treat that sharp result as a law for every price-setting market. If products differ, customers may stay with a higher-price seller. If capacity is limited, the cheaper firm may be unable to serve everyone. Different marginal costs, search costs, repeated interaction, and capacity constraints can also sustain prices above the simplest Bertrand level. The comparison works because we held the environment fixed and changed the strategic variable. The full lesson is now one connected argument. Demand turns two quantities into one price. Profit maximization turns each rival quantity into a best response. Alternating responses converge to the Cournot crossing. That crossing prices below monopoly but above competition, while direct price setting creates the undercutting race to marginal cost.

## About Academa, Inc.

Academa makes technical knowledge easier to understand through visual lectures and lets learners request new lecture videos on the topics they need.

## Complete audiovisual record

Immutable source: [semantic.json](https://academa.ai/media/l/01M14TXT0PVMXZ1QRS662NNA4E/0/semantic.json)

Record version: 1. Render attempt: 0.

### How to read this timeline

Each scene owns its object identifiers. A beat's board is the complete board when listed, empty when marked empty, and unchanged from the nearest earlier listed board in the same scene when marked unchanged. Action times are absolute positions in the published video.

### Scene 1: [The Market and the Destination](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0)

Span: 00:00–02:38.329 (0s–158.3292083333333s).

#### Objects

- assumptions: a Panel that says "Two firms sell one homogeneous good. Market price is determined by total output. Both firms have marginal cost 20 and no fixed cost."
- cost: a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))
- demand: a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))
- demand\_equation: a Math \[text\] that says "$P(Q)=100-Q$"
- firm\_profit: a Math \[text\] that says "$pi\_i=(P-20)q\_i$"
- market: an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0)
- market\_heading: a Heading that says "A Linear Market"
- market\_point: a PlotPoint \[yellow\] labelled "P(Q)" drawn in market (target='demand', x=\<VariableNumber total\_quantity = 40.0\>)
- preview: an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0))
- preview\_br1: a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in preview (function=\<function\>, x\_range=(0.0, 80.0))
- preview\_br2: a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in preview (function=\<function\>, x\_range=(0.0, 40.0))
- preview\_equilibrium: a Point \[yellow\] labelled "N" drawn in preview (location=(26.666666666666668, 26.666666666666668))
- preview\_heading: a Heading that says "Two Best Responses, One Crossing"
- quantity\_identity: a Math \[text\] that says "$Q=q\_1+q\_2$"
- quantity\_line: a Line \[yellow\] drawn in market (start=(\<VariableNumber total\_quantity = 40.0\>, 0.0), end=(\<VariableNumber total\_quantity = 40.0\>, (100.0 - total\_quantit…, dashed=True)
- total\_quantity: a VariableNumber (initial\_value=20.0, format\_spec='.0f')

#### Beats

##### [00:00](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0)

Narration: Two firms will choose quantities. Each red or green curve will record one firm's best answer to the other firm's output. Their crossing is the destination of the lecture.

Board: Empty.

Actions:
- [00:00](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0): preview\_heading is shown on the screen, written out.
- [00:00](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=0): preview is shown on the screen, written out.
- [00:2.694](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=2.694): preview\_br1 is shown on the screen, drawn.
- [00:3.03](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=3.03): preview\_br2 is shown on the screen, drawn.

##### [00:11.084](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=11.084)

Narration: At the yellow crossing, Firm 1 is already answering Firm 2 as well as it can, and Firm 2 is already answering Firm 1. Neither wants to change alone. That is the Cournot-Nash equilibrium.

Board: preview — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); preview\_heading — a Heading that says "Two Best Responses, One Crossing"; preview\_br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in preview (function=\<function\>, x\_range=(0.0, 80.0)); preview\_br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in preview (function=\<function\>, x\_range=(0.0, 40.0))

Actions:
- [00:11.699](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=11.699): preview\_equilibrium is shown on the screen, written out.
- [00:23.251](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=23.250999999999998): preview\_equilibrium is indicated — a transient flash.

##### [00:25](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=25.0005)

Narration: But I do not want that crossing to arrive as a mysterious pair of lines. We will build each line from profit, then let the firms chase one another toward the crossing.

Board: preview — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); preview\_heading — a Heading that says "Two Best Responses, One Crossing"; preview\_br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in preview (function=\<function\>, x\_range=(0.0, 80.0)); preview\_br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in preview (function=\<function\>, x\_range=(0.0, 40.0)); preview\_equilibrium — a Point \[yellow\] labelled "N" drawn in preview (location=(26.666666666666668, 26.666666666666668))

Actions:
- [00:35.624](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=35.6245): preview is hidden from the screen — left the board.
- [00:35.624](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=35.6245): preview\_br1 is hidden from the screen — preview left the board.
- [00:35.624](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=35.6245): preview\_br2 is hidden from the screen — preview left the board.
- [00:35.624](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=35.6245): preview\_equilibrium is hidden from the screen — preview left the board.
- [00:35.624](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=35.6245): preview\_heading is hidden from the screen — left the board.

##### [00:36.825](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=36.8245)

Narration: Begin with a deliberately simple market. The horizontal coordinate is total quantity Q. The vertical coordinate is the market price P.

Board: Empty.

Actions:
- [00:36.825](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=36.8245): market\_heading is shown on the screen, written out.
- [00:39.042](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=39.042): market is shown on the screen, written out.

##### [00:46.921](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=46.921)

Narration: Demand is the blue line P equals one hundred minus Q. If total output is twenty, buyers pay eighty. If output rises, the price paid for every unit falls.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); market\_heading — a Heading that says "A Linear Market"

Actions:
- [00:48.163](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=48.163): demand is shown on the screen, drawn.
- [00:49.359](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=49.359): demand\_equation is shown on the screen, written out.
- [00:52.575](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=52.575): market\_point is shown on the screen, written out.
- [00:52.575](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=52.575): quantity\_line is shown on the screen, written out.

##### [00:59.41](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=59.41)

Narration: Move total output from twenty to sixty. The market point slides down the demand curve, and price falls from eighty to forty. Quantity decisions therefore interact through one common price.

Board: demand\_equation — a Math \[text\] that says "$P(Q)=100-Q$"; market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); market\_heading — a Heading that says "A Linear Market"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); market\_point — a PlotPoint \[yellow\] labelled "P(Q)" drawn in market (target='demand', x=\<VariableNumber total\_quantity = 40.0\>); quantity\_line — a Line \[yellow\] drawn in market (start=(\<VariableNumber total\_quantity = 40.0\>, 0.0), end=(\<VariableNumber total\_quantity = 40.0\>, (100.0 - total\_quantit…, dashed=True)

Actions:
- [00:59.758](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=59.757999999999996): market\_point is redrawn as the numbers it depends on change.
- [00:59.758](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=59.757999999999996): quantity\_line is redrawn as the numbers it depends on change.
- [00:59.758](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=59.757999999999996): total\_quantity ticks to 60.0.

##### [01:11.643](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=71.64349999999999)

Narration: Bring output back to forty. The corresponding price is sixty. We will later recognize this as the output and price a single profit-maximizing firm would choose.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [01:12.572](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=72.57199999999999): market\_point is redrawn as the numbers it depends on change.
- [01:12.572](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=72.57199999999999): quantity\_line is redrawn as the numbers it depends on change.
- [01:12.572](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=72.57199999999999): total\_quantity ticks to 40.0.

##### [01:23.262](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=83.26199999999999)

Narration: With two firms, total quantity is Firm 1's output plus Firm 2's output. The market does not care which firm supplied a unit. It sees only their sum.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [01:23.262](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=83.26199999999999): quantity\_identity is shown on the screen, written out.

##### [01:35.321](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=95.32099999999998)

Narration: Both firms have constant marginal cost twenty and no fixed cost. The green line therefore stays flat at twenty, however much either firm produces.

Board: demand\_equation — a Math \[text\] that says "$P(Q)=100-Q$"; quantity\_identity — a Math \[text\] that says "$Q=q\_1+q\_2$"; market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); market\_heading — a Heading that says "A Linear Market"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); market\_point — a PlotPoint \[yellow\] labelled "P(Q)" drawn in market (target='demand', x=\<VariableNumber total\_quantity = 40.0\>); quantity\_line — a Line \[yellow\] drawn in market (start=(\<VariableNumber total\_quantity = 40.0\>, 0.0), end=(\<VariableNumber total\_quantity = 40.0\>, (100.0 - total\_quantit…, dashed=True)

Actions:
- [01:36.528](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=96.52799999999999): assumptions is shown on the screen, written out.
- [01:40.522](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=100.52199999999999): cost is shown on the screen, drawn.

##### [01:46.079](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=106.07949999999998)

Narration: A firm's profit is its margin, price minus twenty, multiplied by its own quantity. The important word is own. Firm 1 earns the market margin on q one, not on its rival's production.

Board: assumptions — a Panel that says "Two firms sell one homogeneous good. Market price is determined by total output. Both firms have marginal cost 20 and no fixed cost."; demand\_equation — a Math \[text\] that says "$P(Q)=100-Q$"; quantity\_identity — a Math \[text\] that says "$Q=q\_1+q\_2$"; market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); market\_heading — a Heading that says "A Linear Market"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); market\_point — a PlotPoint \[yellow\] labelled "P(Q)" drawn in market (target='demand', x=\<VariableNumber total\_quantity = 40.0\>); quantity\_line — a Line \[yellow\] drawn in market (start=(\<VariableNumber total\_quantity = 40.0\>, 0.0), end=(\<VariableNumber total\_quantity = 40.0\>, (100.0 - total\_quantit…, dashed=True); cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))

Actions:
- [01:46.95](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=106.95): firm\_profit is shown on the screen, written out.
- [01:47.693](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=107.693): firm\_profit (the "P-20" part) is emphasized.
- [01:50.921](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=110.921): firm\_profit (the "P-20" part) is no longer emphasized.
- [01:50.921](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=110.921): firm\_profit (the "q\_i" part) is emphasized.
- [01:59.791](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=119.79149999999998): firm\_profit (the "q\_i" part) is no longer emphasized.

##### [02:0.391](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=120.39149999999998)

Narration: Substitute the market price and total output. Profit becomes eighty minus q one minus q two, multiplied by the firm's own quantity.

Board: assumptions — a Panel that says "Two firms sell one homogeneous good. Market price is determined by total output. Both firms have marginal cost 20 and no fixed cost."; demand\_equation — a Math \[text\] that says "$P(Q)=100-Q$"; quantity\_identity — a Math \[text\] that says "$Q=q\_1+q\_2$"; firm\_profit — a Math \[text\] that says "$pi\_i=(P-20)q\_i$"; market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); market\_heading — a Heading that says "A Linear Market"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); market\_point — a PlotPoint \[yellow\] labelled "P(Q)" drawn in market (target='demand', x=\<VariableNumber total\_quantity = 40.0\>); quantity\_line — a Line \[yellow\] drawn in market (start=(\<VariableNumber total\_quantity = 40.0\>, 0.0), end=(\<VariableNumber total\_quantity = 40.0\>, (100.0 - total\_quantit…, dashed=True); cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))

Actions:
- [02:0.74](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=120.74): firm\_profit becomes "$pi\_i=(80-q\_1-q\_2)q\_i$".

##### [02:11.01](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=131.01049999999998)

Narration: That expression contains the strategic tension. Producing another unit sells one more unit, but it also lowers the price received on every unit the firm already sells.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [02:15.26](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=135.26): firm\_profit (the "q\_i" part) is emphasized.
- [02:18.348](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=138.348): firm\_profit (the "80-q\_1-q\_2" part) is emphasized.
- [02:18.348](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=138.348): firm\_profit (the "q\_i" part) is no longer emphasized.
- [02:22.423](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=142.4235): firm\_profit (the "80-q\_1-q\_2" part) is no longer emphasized.

##### [02:23.023](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=143.02349999999998)

Narration: Cournot competition asks each firm to choose its own quantity while treating the rival's quantity as given. We now solve that decision for Firm 1, first with a numerical guess and then for every possible guess.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): assumptions is hidden from the screen — left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): demand\_equation is hidden from the screen — left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): firm\_profit is hidden from the screen — left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): market is hidden from the screen — left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): demand is hidden from the screen — market left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): market\_point is hidden from the screen — market left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): quantity\_line is hidden from the screen — market left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): cost is hidden from the screen — market left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): market\_heading is hidden from the screen — left the board.
- [02:37.288](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=157.28754166666664): quantity\_identity is hidden from the screen — left the board.

### Scene 2: [Building the Best-Response Curves](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=158.3292083333333)

Span: 02:38.329–07:4.378 (158.3292083333333s–424.37760416666663s).

#### Objects

- br1\_curve: a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0))
- br2\_curve: a FunctionPlot \[green\] labelled "upright("BR")\_2(q\_1)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 40.0))
- concrete\_work: a Derivation \[text\] that says "$pi\_1(q\_1\|q\_2=20)&=(80-q\_1-20)q\_1 \\ &=(60-q\_1)q\_1 \\ &=60q\_1-q\_1^2 \\ frac(partial pi\_1,partial q\_1)&=60-2q\_1=0 \\ q\_1^\*&=30$"
- equilibrium\_answer: a Math \[text\] that says "$(q\_1^\*,q\_2^\*)=(frac(80,3),frac(80,3))$"
- equilibrium\_point: a Point \[yellow\] labelled "N" drawn in response\_axes (location=(26.666666666666668, 26.666666666666668))
- equilibrium\_work: a Derivation \[text\] that says "$q\_1=q\_2=q \\ q&=frac(80-q,2) \\ 3q&=80 \\ q&=frac(80,3) approx 26.7$"
- firm\_one\_answer: a Math \[text\] that says "$upright("BR")\_1(q\_2)=frac(80-q\_2,2)$"
- firm\_one\_work: a Derivation \[text\] that says "$pi\_1&=(80-q\_1-q\_2)q\_1 \\ &=80q\_1-q\_1^2-q\_1q\_2 \\ frac(partial pi\_1,partial q\_1)&=80-2q\_1-q\_2=0 \\ q\_1&=frac(80-q\_2,2)$"
- firm\_two\_answer: a Math \[text\] that says "$upright("BR")\_2(q\_1)=frac(80-q\_1,2)$"
- firm\_two\_work: a Derivation \[text\] that says "$pi\_2&=(80-q\_1-q\_2)q\_2 \\ frac(partial pi\_2,partial q\_2)&=80-q\_1-2q\_2=0 \\ q\_2&=frac(80-q\_1,2)$"
- head\_crossing: a Heading that says "The Cournot-Nash Crossing"
- head\_one: a Heading that says "Firm 1's Best Response"
- head\_two: a Heading that says "Firm 2's Best Response"
- point: a Point \[yellow\] drawn in response\_axes (location=(0.0, 40.0))
- point\_2: a Point \[yellow\] drawn in response\_axes (location=(20.0, 30.0))
- profit\_axes: an Axes (x\_range=(0.0, 62.0), y\_range=(0.0, 960.0), x\_ticks\_every=10.0)
- profit\_curve: a FunctionPlot \[blue\] labelled "pi\_1(q\_1\|q\_2=20)" drawn in profit\_axes (function=\<function\>, x\_range=(0.0, 60.0))
- question: a Panel that says "If Firm 2 produces 20 units, which quantity maximizes Firm 1's profit?"
- response\_axes: an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0))
- symmetry\_line: a Line \[gray\] labelled "q\_1=q\_2" drawn in response\_axes (end=(80.0, 80.0), dashed=True)
- trial: a VariableNumber (initial\_value=10.0, format\_spec='.0f')
- trial\_point: a PlotPoint \[yellow\] labelled "10" drawn in profit\_axes (target='profit\_curve', x=\<VariableNumber trial = 30.0\>)

#### Beats

##### [02:38.329](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=158.3292083333333)

Narration: Suppose Firm 1 believes Firm 2 will produce twenty units. Firm 1 now faces a one-variable decision: choose q one to maximize its own profit.

Board: Empty.

Actions:
- [02:38.329](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=158.3292083333333): question is shown on the screen, written out.

##### [02:49.901](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=169.90070833333328)

Narration: The blue curve plots that profit against Firm 1's quantity. Profit is zero at quantity zero, rises, reaches a top, and eventually falls as the price effect overwhelms the extra sales.

Board: question — a Panel that says "If Firm 2 produces 20 units, which quantity maximizes Firm 1's profit?"

Actions:
- [02:49.901](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=169.90070833333328): profit\_axes is shown on the screen, written out.
- [02:50.365](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=170.3652083333333): profit\_curve is shown on the screen, drawn.

##### [03:3.644](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=183.6437083333333)

Narration: Try q one equal to ten. The market quantity is thirty, price is seventy, and Firm 1 earns a margin of fifty on ten units, or five hundred.

Board: profit\_axes — an Axes (x\_range=(0.0, 62.0), y\_range=(0.0, 960.0), x\_ticks\_every=10.0); question — a Panel that says "If Firm 2 produces 20 units, which quantity maximizes Firm 1's profit?"; profit\_curve — a FunctionPlot \[blue\] labelled "pi\_1(q\_1\|q\_2=20)" drawn in profit\_axes (function=\<function\>, x\_range=(0.0, 60.0))

Actions:
- [03:5.489](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=185.4892083333333): profit\_axes moves to a new place on the board.
- [03:5.489](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=185.4892083333333): trial\_point is shown on the screen, written out.
- [03:5.489](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=185.4892083333333): concrete\_work is shown on the screen, written out.

##### [03:14.983](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=194.9832083333333)

Narration: Substituting the rival's twenty units leaves sixty minus q one, multiplied by q one. Expanding gives sixty q one minus q one squared.

Board: profit\_axes — an Axes (x\_range=(0.0, 62.0), y\_range=(0.0, 960.0), x\_ticks\_every=10.0); question — a Panel that says "If Firm 2 produces 20 units, which quantity maximizes Firm 1's profit?"; profit\_curve — a FunctionPlot \[blue\] labelled "pi\_1(q\_1\|q\_2=20)" drawn in profit\_axes (function=\<function\>, x\_range=(0.0, 60.0)); trial\_point — a PlotPoint \[yellow\] labelled "10" drawn in profit\_axes (target='profit\_curve', x=\<VariableNumber trial = 30.0\>)

Actions:
- [03:17.758](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=197.7582083333333): concrete\_work is shown on the screen, written out.
- [03:21.879](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=201.8792083333333): concrete\_work is shown on the screen, written out.

##### [03:26.508](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=206.5082083333333)

Narration: Move the trial quantity to thirty. The point climbs to the top of the profit curve. Here Firm 1 sells thirty units at a margin of thirty.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [03:28.11](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=208.1102083333333): trial\_point is redrawn as the numbers it depends on change.
- [03:28.11](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=208.1102083333333): trial ticks to 30.0.
- [03:36.156](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=216.1557083333333): trial\_point is indicated — a transient flash.

##### [03:36.756](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=216.7557083333333)

Narration: Move farther to fifty. Profit falls back to five hundred. More output is not automatically better, because the common market price has fallen.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [03:37.917](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=217.9172083333333): trial\_point is redrawn as the numbers it depends on change.
- [03:37.917](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=217.9172083333333): trial ticks to 50.0.

##### [03:47.387](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=227.3867083333333)

Narration: Differentiate the quadratic. The marginal effect of q one is sixty minus two q one. Setting that equal to zero gives q one equal to thirty.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [03:47.735](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=227.7352083333333): concrete\_work is shown on the screen, written out.
- [03:57.859](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=237.8592083333333): concrete\_work is shown on the screen, written out.

##### [03:59.295](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=239.2952083333333)

Narration: So thirty is Firm 1's best response to a rival output of twenty. Now let the rival's quantity vary instead of fixing it at one number.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [03:59.922](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=239.9222083333333): trial\_point is redrawn as the numbers it depends on change.
- [03:59.922](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=239.9222083333333): trial ticks to 30.0.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): concrete\_work is hidden from the screen — left the board.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): profit\_axes is hidden from the screen — left the board.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): profit\_curve is hidden from the screen — profit\_axes left the board.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): trial\_point is hidden from the screen — profit\_axes left the board.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): question is hidden from the screen — left the board.
- [04:8.92](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=248.9202083333333): A box is drawn around concrete\_work.

##### [04:10.12](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=250.12020833333332)

Narration: Put Firm 2's output on the horizontal axis and Firm 1's output on the vertical axis. We want one point for every possible guess about q two.

Board: Empty.

Actions:
- [04:10.12](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=250.12020833333332): head\_one is shown on the screen, written out.
- [04:12.152](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=252.1522083333333): response\_axes is shown on the screen, written out.

##### [04:21.343](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=261.34320833333334)

Narration: Firm 1's general profit is eighty minus q one minus q two, multiplied by q one. Expanding separates the own-output square from the interaction with the rival.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); head\_one — a Heading that says "Firm 1's Best Response"

Actions:
- [04:22.933](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=262.9332083333333): response\_axes moves to a new place on the board.
- [04:22.933](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=262.9332083333333): firm\_one\_work is shown on the screen, written out.
- [04:28.483](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=268.4832083333333): firm\_one\_work is shown on the screen, written out.

##### [04:33.507](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=273.50670833333334)

Narration: Differentiate with respect to Firm 1's own quantity while holding q two fixed. The first-order condition is eighty minus two q one minus q two equal to zero.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [04:33.855](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=273.8552083333333): firm\_one\_work is shown on the screen, written out.

##### [04:46.749](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=286.7492083333333)

Narration: Solving gives q one equal to one half of eighty minus q two. This is not one answer. It is a rule assigning a profit-maximizing q one to every possible q two.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [04:47.097](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=287.0972083333333): firm\_one\_work is shown on the screen, written out.
- [04:54.284](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=294.2842083333333): firm\_one\_answer is shown on the screen, written out.

##### [04:59.662](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=299.6617083333333)

Narration: Plot that rule in red. If Firm 2 produces zero, Firm 1 behaves like the market's sole producer and chooses forty. If Firm 2 produces twenty, Firm 1 chooses the thirty we just found.

Board: firm\_one\_answer — a Math \[text\] that says "$upright("BR")\_1(q\_2)=frac(80-q\_2,2)$"; response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); head\_one — a Heading that says "Firm 1's Best Response"

Actions:
- [05:0.991](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=300.9912083333333): br1\_curve is shown on the screen, drawn.
- [05:7.609](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=307.6092083333333): point is shown on the screen, grown.
- [05:9.609](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=309.6092083333333): point is hidden from the screen.
- [05:12.021](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=312.02120833333333): point\_2 is shown on the screen, grown.
- [05:14.021](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=314.02120833333333): point\_2 is hidden from the screen.

##### [05:14.165](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=314.16470833333335)

Narration: The red curve slopes downward because the quantities are strategic substitutes. A larger rival output depresses market price, so Firm 1's best reply is to produce less.

Board: firm\_one\_answer — a Math \[text\] that says "$upright("BR")\_1(q\_2)=frac(80-q\_2,2)$"; response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); head\_one — a Heading that says "Firm 1's Best Response"; br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0))

Actions:
- [05:15.651](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=315.65120833333333): br1\_curve is indicated — a transient flash.
- [05:25.694](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=325.69370833333335): firm\_one\_answer is hidden from the screen — left the board.
- [05:25.694](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=325.69370833333335): firm\_one\_work is hidden from the screen — left the board.
- [05:25.694](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=325.69370833333335): head\_one is hidden from the screen — left the board.

##### [05:26.894](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=326.8937083333333)

Narration: Firm 2 solves the mirror-image problem. Its profit is the same market margin multiplied by q two.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0))

Actions:
- [05:26.894](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=326.8937083333333): head\_two is shown on the screen, written out.
- [05:30.527](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=330.5272083333333): firm\_two\_work is shown on the screen, written out.

##### [05:34.727](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=334.7267083333333)

Narration: Differentiate with respect to q two. The first-order condition is eighty minus q one minus two q two equal to zero.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); head\_two — a Heading that says "Firm 2's Best Response"

Actions:
- [05:35.075](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=335.0752083333333): firm\_two\_work is shown on the screen, written out.

##### [05:45.944](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=345.94370833333335)

Narration: Solving gives Firm 2's response: q two equals one half of eighty minus q one. The two firms have identical technologies and face the same demand.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [05:46.344](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=346.3442083333333): firm\_two\_work is shown on the screen, written out.
- [05:47.981](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=347.98120833333326): firm\_two\_answer is shown on the screen, written out.

##### [05:57.365](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=357.3647083333333)

Narration: On axes ordered q two across and q one up, that response appears as the green curve. Every point on it is an output pair where Firm 2 is optimizing against Firm 1.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); firm\_two\_answer — a Math \[text\] that says "$upright("BR")\_2(q\_1)=frac(80-q\_1,2)$"; head\_two — a Heading that says "Firm 2's Best Response"

Actions:
- [06:2.977](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=362.97720833333324): br2\_curve is shown on the screen, drawn.

##### [06:10.48](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=370.4797083333333)

Narration: The red curve records where Firm 1 is content. The green curve records where Firm 2 is content. Only their crossing makes both statements true at the same time.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); firm\_two\_answer — a Math \[text\] that says "$upright("BR")\_2(q\_1)=frac(80-q\_1,2)$"; head\_two — a Heading that says "Firm 2's Best Response"; br2\_curve — a FunctionPlot \[green\] labelled "upright("BR")\_2(q\_1)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 40.0))

Actions:
- [06:10.868](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=370.8682083333333): br1\_curve is indicated — a transient flash.
- [06:13.945](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=373.9452083333333): br2\_curve is indicated — a transient flash.
- [06:20.528](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=380.5277083333333): response\_axes moves to a new place on the board.
- [06:20.528](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=380.5277083333333): firm\_two\_answer is hidden from the screen — left the board.
- [06:20.528](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=380.5277083333333): firm\_two\_work is hidden from the screen — left the board.
- [06:20.528](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=380.5277083333333): head\_two is hidden from the screen — left the board.

##### [06:21.728](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=381.72770833333334)

Narration: Because the firms are identical, the crossing lies on the dashed symmetry line q one equals q two. Call their common output q.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); br2\_curve — a FunctionPlot \[green\] labelled "upright("BR")\_2(q\_1)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 40.0))

Actions:
- [06:21.728](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=381.72770833333334): head\_crossing is shown on the screen, written out.
- [06:25.187](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=385.1872083333333): symmetry\_line is shown on the screen, drawn.
- [06:29.645](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=389.64520833333324): equilibrium\_work is shown on the screen, written out.

##### [06:31.848](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=391.84770833333334)

Narration: Substitute q for the rival's output in either response rule. q equals one half of eighty minus q, so three q equals eighty.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); br2\_curve — a FunctionPlot \[green\] labelled "upright("BR")\_2(q\_1)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 40.0)); head\_crossing — a Heading that says "The Cournot-Nash Crossing"; symmetry\_line — a Line \[gray\] labelled "q\_1=q\_2" drawn in response\_axes (end=(80.0, 80.0), dashed=True)

Actions:
- [06:32.103](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=392.10320833333327): equilibrium\_work is shown on the screen, written out.
- [06:39.162](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=399.1622083333333): equilibrium\_work is shown on the screen, written out.

##### [06:41.689](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=401.68920833333334)

Narration: Each firm produces eighty thirds, about twenty-six point seven units. The yellow point is therefore the unique crossing of the two best-response curves.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [06:42.037](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=402.0372083333333): equilibrium\_answer is shown on the screen, written out.
- [06:44.591](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=404.59120833333327): equilibrium\_work is shown on the screen, written out.
- [06:47.076](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=407.0762083333333): equilibrium\_point is shown on the screen, written out.
- [06:51.523](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=411.5227083333333): A box is drawn around equilibrium\_answer.

##### [06:52.123](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=412.1227083333333)

Narration: This algebra identifies the fixed point. It has not yet shown whether decentralized adjustment finds it. For that, we let the firms respond one after the other and watch the chase.

Board: response\_axes — an Axes (x\_range=(0.0, 82.0), y\_range=(0.0, 82.0), aspect=(1.0, 1.0)); br1\_curve — a FunctionPlot \[red\] labelled "upright("BR")\_1(q\_2)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 80.0)); br2\_curve — a FunctionPlot \[green\] labelled "upright("BR")\_2(q\_1)" drawn in response\_axes (function=\<function\>, x\_range=(0.0, 40.0)); equilibrium\_answer — a Math \[text\] that says "$(q\_1^\*,q\_2^\*)=(frac(80,3),frac(80,3))$"; head\_crossing — a Heading that says "The Cournot-Nash Crossing"; symmetry\_line — a Line \[gray\] labelled "q\_1=q\_2" drawn in response\_axes (end=(80.0, 80.0), dashed=True); equilibrium\_point — a Point \[yellow\] labelled "N" drawn in response\_axes (location=(26.666666666666668, 26.666666666666668))

Actions:
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): equilibrium\_answer is hidden from the screen — left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): equilibrium\_work is hidden from the screen — left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): head\_crossing is hidden from the screen — left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): response\_axes is hidden from the screen — left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): br1\_curve is hidden from the screen — response\_axes left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): br2\_curve is hidden from the screen — response\_axes left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): symmetry\_line is hidden from the screen — response\_axes left the board.
- [07:3.336](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=423.3359375): equilibrium\_point is hidden from the screen — response\_axes left the board.

### Scene 3: [The Best-Response Chase](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663)

Span: 07:4.378–10:37.115 (424.37760416666663s–637.1149791666667s).

#### Objects

- axes: an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0))
- br1: a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0))
- br2: a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0))
- contraction: a Derivation \[text\] that says "$e\_1^(upright("new"))&=-frac(1,2)e\_2^(upright("old")) \\ e\_2^(upright("new"))&=-frac(1,2)e\_1^(upright("new")) \\ &=frac(1,4)e\_2^(upright("old"))$"
- equilibrium: a Point \[yellow\] labelled "N" drawn in axes (location=(26.666666666666668, 26.666666666666668))
- heading: a Heading that says "Alternating Best Responses"
- q1: a VariableNumber (initial\_value=10.0, format\_spec='.1f')
- q2: a VariableNumber (initial\_value=10.0, format\_spec='.1f')
- rule\_one: a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"
- rule\_two: a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"
- stability\_heading: a Heading that says "Why the Chase Contracts"
- state: a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…)
- step\_1: a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0))
- step\_10: a Line \[green\] drawn in axes (start=(26.6015625, 26.69921875), end=(26.650390625, 26.69921875))
- step\_2: a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0))
- step\_3: a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75))
- step\_4: a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75))
- step\_5: a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875))
- step\_6: a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875))
- step\_7: a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875))
- step\_8: a Line \[green\] drawn in axes (start=(26.40625, 26.796875), end=(26.6015625, 26.796875))
- step\_9: a Line \[red\] drawn in axes (start=(26.6015625, 26.796875), end=(26.6015625, 26.69921875))

#### Beats

##### [07:4.378](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663)

Narration: Return to the quantity plane. The red and green response curves are fixed. The blue point will record the firms' current output pair, with q two across and q one up.

Board: Empty.

Actions:
- [07:4.378](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663): heading is shown on the screen, written out.
- [07:4.378](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=424.37760416666663): axes is shown on the screen, written out.
- [07:6.63](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=426.62960416666664): br1 is shown on the screen, drawn.
- [07:6.955](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=426.9546041666666): br2 is shown on the screen, drawn.

##### [07:14.916](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=434.91560416666664)

Narration: Start away from equilibrium at q two equal to ten and q one equal to ten. The point is on neither response curve, so both firms currently want to revise.

Board: axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0))

Actions:
- [07:15.264](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=435.26360416666665): state is shown on the screen, written out.
- [07:23.693](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=443.6926041666666): axes moves to a new place on the board.
- [07:23.693](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=443.6926041666666): rule\_one is shown on the screen, written out.
- [07:24.889](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=444.88860416666665): rule\_two is shown on the screen, written out.

##### [07:26.441](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=446.4406041666666)

Narration: Firm 1 moves first. It treats q two equal to ten as fixed and chooses one half of seventy, so the point moves vertically and lands at thirty-five.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…)

Actions:
- [07:27.416](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=447.41560416666664): state is redrawn as the numbers it depends on change.
- [07:27.416](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=447.41560416666664): q1 ticks to 35.0.
- [07:35.241](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=455.2406041666666): step\_1 is shown on the screen, written out.

##### [07:36.99](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=456.99010416666664)

Narration: Now Firm 2 observes q one equal to thirty-five. Its best response is twenty-two point five, so the point moves horizontally and lands on the green curve.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0))

Actions:
- [07:44.909](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=464.90860416666663): state is redrawn as the numbers it depends on change.
- [07:44.909](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=464.90860416666663): q2 ticks to 22.5.
- [07:46.72](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=466.7196041666666): step\_2 is shown on the screen, written out.

##### [07:48.434](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=468.43410416666666)

Narration: Firm 1 responds again. Against twenty-two point five, its maximizing quantity is twenty-eight point seven five. The red vertical step is already much shorter than the first.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0))

Actions:
- [07:49.34](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=469.3396041666666): state is redrawn as the numbers it depends on change.
- [07:49.34](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=469.3396041666666): q1 ticks to 28.75.
- [07:56.98](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=476.9796041666666): step\_3 is shown on the screen, written out.

##### [08:0.644](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=480.64410416666664)

Narration: Firm 2 answers with twenty-five point six. The green horizontal step is shorter as well. The pair has entered the narrow region between the two curves.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75))

Actions:
- [08:1.562](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=481.5616041666666): state is redrawn as the numbers it depends on change.
- [08:1.562](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=481.5616041666666): q2 ticks to 25.625.
- [08:4.255](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=484.25460416666664): step\_4 is shown on the screen, written out.

##### [08:10.904](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=490.9041041666666)

Narration: Another Firm 1 response gives about twenty-seven point two. It still overshoots the crossing slightly, but by less than before.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75))

Actions:
- [08:12.681](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=492.6806041666666): state is redrawn as the numbers it depends on change.
- [08:12.681](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=492.6806041666666): q1 ticks to 27.1875.
- [08:16.303](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=496.30260416666664): step\_5 is shown on the screen, written out.

##### [08:19.434](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=499.4336041666666)

Narration: Firm 2 then chooses about twenty-six point four. The alternating steps produce a staircase: red movements are Firm 1, and green movements are Firm 2.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875))

Actions:
- [08:20.618](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=500.61760416666664): state is redrawn as the numbers it depends on change.
- [08:20.618](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=500.61760416666664): q2 ticks to 26.40625.
- [08:28.176](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=508.17560416666663): step\_6 is shown on the screen, written out.

##### [08:30.622](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=510.62210416666665)

Narration: Firm 1 now moves to about twenty-six point eight. The vertical correction has become small enough that the displayed coordinates begin to agree in their first two digits.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875))

Actions:
- [08:31.807](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=511.8066041666666): state is redrawn as the numbers it depends on change.
- [08:31.807](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=511.8066041666666): q1 ticks to 26.796875.
- [08:37.449](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=517.4486041666667): step\_7 is shown on the screen, written out.

##### [08:41.033](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=521.0326041666666)

Narration: Firm 2 replies with about twenty-six point six. The horizontal correction is smaller again.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875)); step\_7 — a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875))

Actions:
- [08:42.031](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=522.0306041666666): state is redrawn as the numbers it depends on change.
- [08:42.031](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=522.0306041666666): q2 ticks to 26.6015625.
- [08:47.662](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=527.6621041666666): step\_8 is shown on the screen, written out.

##### [08:48.262](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=528.2621041666666)

Narration: One more Firm 1 response gives about twenty-six point seven. The point is now visually almost at the crossing.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875)); step\_7 — a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875)); step\_8 — a Line \[green\] drawn in axes (start=(26.40625, 26.796875), end=(26.6015625, 26.796875))

Actions:
- [08:50.375](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=530.3746041666666): state is redrawn as the numbers it depends on change.
- [08:50.375](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=530.3746041666666): q1 ticks to 26.69921875.
- [08:55.983](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=535.9831041666666): step\_9 is shown on the screen, written out.

##### [08:56.583](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=536.5831041666667)

Narration: Firm 2 answers at about twenty-six point seven as well. The staircase has tightened around the yellow Cournot-Nash point.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875)); step\_7 — a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875)); step\_8 — a Line \[green\] drawn in axes (start=(26.40625, 26.796875), end=(26.6015625, 26.796875)); step\_9 — a Line \[red\] drawn in axes (start=(26.6015625, 26.796875), end=(26.6015625, 26.69921875))

Actions:
- [08:57.64](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=537.6396041666666): state is redrawn as the numbers it depends on change.
- [08:57.64](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=537.6396041666666): q2 ticks to 26.650390625.
- [09:2.632](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=542.6316041666666): step\_10 is shown on the screen, written out.
- [09:2.632](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=542.6316041666666): equilibrium is shown on the screen, written out.

##### [09:4.857](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=544.8571041666667)

Narration: The motion itself suggests stability. A displacement away from the crossing generates a smaller response in the opposite direction, then a still smaller reply.

Board: rule\_one — a Math \[text\] that says "$q\_1 arrow.r upright("BR")\_1(q\_2)$"; rule\_two — a Math \[text\] that says "$q\_2 arrow.r upright("BR")\_2(q\_1)$"; axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); heading — a Heading that says "Alternating Best Responses"; br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875)); step\_7 — a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875)); step\_8 — a Line \[green\] drawn in axes (start=(26.40625, 26.796875), end=(26.6015625, 26.796875)); step\_9 — a Line \[red\] drawn in axes (start=(26.6015625, 26.796875), end=(26.6015625, 26.69921875)); step\_10 — a Line \[green\] drawn in axes (start=(26.6015625, 26.69921875), end=(26.650390625, 26.69921875)); equilibrium — a Point \[yellow\] labelled "N" drawn in axes (location=(26.666666666666668, 26.666666666666668))

Actions:
- [09:9.188](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=549.1876041666666): equilibrium is indicated — a transient flash.

##### [09:15.442](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=555.4416041666666)

Narration: We can measure that shrinkage. Let e one and e two denote each firm's output minus its equilibrium output.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [09:15.442](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=555.4416041666666): heading is hidden from the screen — left the board.
- [09:15.442](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=555.4416041666666): rule\_one is hidden from the screen — left the board.
- [09:15.442](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=555.4416041666666): rule\_two is hidden from the screen — left the board.
- [09:15.442](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=555.4416041666666): stability\_heading is shown on the screen, written out.
- [09:16.719](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=556.7186041666666): contraction is shown on the screen, written out.

##### [09:23.379](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=563.3791041666666)

Narration: Firm 1's response curve has slope minus one half. Therefore Firm 1's new error is minus one half of Firm 2's old error.

Board: axes — an Axes (x\_range=(0.0, 45.0), y\_range=(0.0, 45.0), aspect=(1.0, 1.0)); br1 — a FunctionPlot \[red\] labelled "upright("BR")\_1" drawn in axes (function=\<function\>, x\_range=(0.0, 45.0)); br2 — a FunctionPlot \[green\] labelled "upright("BR")\_2" drawn in axes (function=\<function\>, x\_range=(17.5, 40.0)); state — a Point \[blue\] labelled "(10.0, 10.0)" drawn in axes (location=(\<VariableNumber q2 = 26.650390625\>, \<VariableNumber q1 = 26.69…); step\_1 — a Line \[red\] drawn in axes (start=(10.0, 10.0), end=(10.0, 35.0)); step\_2 — a Line \[green\] drawn in axes (start=(10.0, 35.0), end=(22.5, 35.0)); step\_3 — a Line \[red\] drawn in axes (start=(22.5, 35.0), end=(22.5, 28.75)); step\_4 — a Line \[green\] drawn in axes (start=(22.5, 28.75), end=(25.625, 28.75)); step\_5 — a Line \[red\] drawn in axes (start=(25.625, 28.75), end=(25.625, 27.1875)); step\_6 — a Line \[green\] drawn in axes (start=(25.625, 27.1875), end=(26.40625, 27.1875)); step\_7 — a Line \[red\] drawn in axes (start=(26.40625, 27.1875), end=(26.40625, 26.796875)); step\_8 — a Line \[green\] drawn in axes (start=(26.40625, 26.796875), end=(26.6015625, 26.796875)); step\_9 — a Line \[red\] drawn in axes (start=(26.6015625, 26.796875), end=(26.6015625, 26.69921875)); step\_10 — a Line \[green\] drawn in axes (start=(26.6015625, 26.69921875), end=(26.650390625, 26.69921875)); equilibrium — a Point \[yellow\] labelled "N" drawn in axes (location=(26.666666666666668, 26.666666666666668)); stability\_heading — a Heading that says "Why the Chase Contracts"

Actions:
- [09:26.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=566.0726041666667): contraction (the "-frac(1,2)" part) is emphasized.
- [09:33.097](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=573.0966041666666): contraction (the "-frac(1,2)" part) is no longer emphasized.

##### [09:33.697](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=573.6966041666666)

Narration: Firm 2's response also has slope minus one half. Its new error is minus one half of Firm 1's new error.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [09:33.697](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=573.6966041666666): contraction is shown on the screen, written out.
- [09:36.124](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=576.1236041666666): contraction (the "-frac(1,2)" part) is emphasized.
- [09:41.65](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=581.6496041666667): contraction (the "-frac(1,2)" part) is no longer emphasized.

##### [09:42.25](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=582.2496041666666)

Narration: Multiplying the two slopes gives positive one quarter. After one complete Firm 1 and Firm 2 round, the remaining error has only one quarter of its previous magnitude.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [09:44.792](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=584.7916041666666): contraction is shown on the screen, written out.
- [09:44.792](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=584.7916041666666): contraction (the "frac(1,4)" part) is emphasized.
- [09:53.035](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=593.0346041666667): contraction (the "frac(1,4)" part) is no longer emphasized.

##### [09:53.635](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=593.6346041666666)

Narration: That is why the staircase contracts rather than exploding outward. The negative slopes make successive corrections alternate sides, while their product being smaller than one makes the corrections shrink.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [10:2.795](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=602.7946041666665): contraction (the "frac(1,4)" part) is indicated — a transient flash.

##### [10:6.054](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=606.0536041666667)

Narration: The conclusion is conditional, not universal. We assumed exact best responses, one firm moving at a time, and an unchanged demand and cost environment. Different adjustment rules can create slower motion, simultaneous jumps, or instability.

Board: Unchanged from the preceding beat in this scene.

Actions:
- None.

##### [10:24.08](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=624.0796041666666)

Narration: Under this benchmark, however, equilibrium is both a pair of mutual best responses and the stable fixed point of the visible chase. We can now ask what market price that fixed point produces.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [10:30.001](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=630.0006041666666): equilibrium is indicated — a transient flash.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): axes is hidden from the screen — left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): br1 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): br2 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): state is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_1 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_2 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_3 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_4 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_5 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_6 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_7 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_8 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_9 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): step\_10 is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): equilibrium is hidden from the screen — axes left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): contraction is hidden from the screen — left the board.
- [10:36.073](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=636.0733124999999): stability\_heading is hidden from the screen — left the board.

### Scene 4: [Three Market Prices](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667)

Span: 10:37.115–13:32.865 (637.1149791666667s–812.8653958333333s).

#### Objects

- comparison: a Table \[text\] that says "Market organization Total quantity Price Monopoly $40$ $60$ Cournot duopoly $160/3 approx 53.3$ $140/3 approx 46.7$ Perfect competition $80$ $20$" (rows=(('Market organization', 'Total quantity', 'Price'), ('Monopoly…, header=True)
- competition\_line: a Line \[green\] drawn in market (start=(80.0, 0.0), end=(80.0, 20.0), dashed=True)
- competition\_point: a PlotPoint \[green\] labelled "C" drawn in market (target='demand', x=80.0)
- competition\_result: a Math \[text\] that says "$P\_(upright("PC"))=20, quad Q\_(upright("PC"))=80$"
- cournot\_line: a Line \[yellow\] drawn in market (start=(53.333333333333336, 0.0), end=(53.333333333333336, 46.666666666666664), dashed=True)
- cournot\_point: a PlotPoint \[yellow\] labelled "N" drawn in market (target='demand', x=53.333333333333336)
- cournot\_work: a Derivation \[text\] that says "$Q\_N&=frac(160,3) approx 53.3 \\ P\_N&=frac(140,3) approx 46.7$"
- demand: a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))
- heading: a Heading that says "Monopoly, Cournot, and Competition"
- marginal\_cost: a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))
- marginal\_revenue: a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0))
- market: an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0)
- monopoly\_line: a Line \[magenta\] drawn in market (start=(40.0, 0.0), end=(40.0, 60.0), dashed=True)
- monopoly\_point: a PlotPoint \[magenta\] labelled "M" drawn in market (target='demand', x=40.0)
- monopoly\_work: a Derivation \[text\] that says "$upright("TR")&=(100-Q)Q \\ upright("MR")&=100-2Q \\ 100-2Q\_M&=20 \\ Q\_M&=40, quad P\_M=60$"
- point: a Point \[yellow\] drawn in market (location=(40.0, 20.0))

#### Beats

##### [10:37.115](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667)

Narration: Use the same demand and cost curves to compare three market organizations. The blue line is demand and the green line is marginal cost twenty.

Board: Empty.

Actions:
- [10:37.115](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667): heading is shown on the screen, written out.
- [10:37.115](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=637.1149791666667): market is shown on the screen, written out.
- [10:42.281](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=642.2809791666667): demand is shown on the screen, drawn.
- [10:44.058](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=644.0579791666667): marginal\_cost is shown on the screen, drawn.

##### [10:47.328](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=647.3279791666666)

Narration: Begin with monopoly. One owner controls the entire market quantity, so its total revenue is price times Q: one hundred minus Q, multiplied by Q.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0))

Actions:
- [10:53.04](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=653.0399791666666): market moves to a new place on the board.
- [10:53.04](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=653.0399791666666): monopoly\_work is shown on the screen, written out.

##### [10:59.039](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=659.0389791666666)

Narration: Differentiating total revenue gives marginal revenue one hundred minus two Q. The red marginal-revenue curve falls twice as quickly as demand.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [11:1.35](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=661.3499791666667): monopoly\_work is shown on the screen, written out.
- [11:5.216](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=665.2159791666667): marginal\_revenue is shown on the screen, drawn.

##### [11:9.879](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=669.8789791666667)

Narration: The monopolist chooses quantity where marginal revenue equals marginal cost. One hundred minus two Q equals twenty.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0))

Actions:
- [11:13.327](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=673.3269791666667): monopoly\_work is shown on the screen, written out.
- [11:17.507](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=677.5069791666667): point is shown on the screen, grown.

##### [11:18.908](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=678.9079791666667)

Narration: Solving gives monopoly quantity forty. Move up from quantity forty to demand, and buyers pay the monopoly price sixty.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0)); point — a Point \[yellow\] drawn in market (location=(40.0, 20.0))

Actions:
- [11:19.507](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=679.5069791666667): point is hidden from the screen.
- [11:21.033](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=681.0329791666667): monopoly\_work is shown on the screen, written out.
- [11:22.205](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=682.2049791666667): monopoly\_line is shown on the screen, written out.
- [11:23.691](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=683.6909791666667): monopoly\_point is shown on the screen, written out.

##### [11:27.681](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=687.6814791666667)

Narration: Now return to Cournot. Each firm produces eighty thirds, so together they supply one hundred sixty thirds, about fifty-three point three units.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0)); monopoly\_line — a Line \[magenta\] drawn in market (start=(40.0, 0.0), end=(40.0, 60.0), dashed=True); monopoly\_point — a PlotPoint \[magenta\] labelled "M" drawn in market (target='demand', x=40.0)

Actions:
- [11:28.9](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=688.8999791666666): cournot\_work is shown on the screen, written out.
- [11:36.006](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=696.0059791666666): cournot\_work (the "Q\_N" part) is emphasized.

##### [11:38.695](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=698.6954791666667)

Narration: Demand at that total quantity gives price one hundred forty thirds, about forty-six point seven. The yellow Cournot point lies down and to the right of monopoly.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [11:41.377](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=701.3769791666666): cournot\_work is shown on the screen, written out.
- [11:41.377](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=701.3769791666666): cournot\_work (the "Q\_N" part) is no longer emphasized.
- [11:43.583](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=703.5829791666666): cournot\_work (the "P\_N" part) is emphasized.
- [11:45.986](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=705.9859791666667): cournot\_line is shown on the screen, written out.
- [11:46.277](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=706.2769791666667): cournot\_point is shown on the screen, written out.
- [11:49.585](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=709.5849791666667): cournot\_work (the "P\_N" part) is no longer emphasized.

##### [11:50.185](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=710.1849791666666)

Narration: Why does Cournot produce more than monopoly? Each firm considers how its own output lowers price, but it does not fully internalize the price loss imposed on the rival's units.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0)); monopoly\_line — a Line \[magenta\] drawn in market (start=(40.0, 0.0), end=(40.0, 60.0), dashed=True); monopoly\_point — a PlotPoint \[magenta\] labelled "M" drawn in market (target='demand', x=40.0); cournot\_line — a Line \[yellow\] drawn in market (start=(53.333333333333336, 0.0), end=(53.333333333333336, 46.666666666666664), dashed=True); cournot\_point — a PlotPoint \[yellow\] labelled "N" drawn in market (target='demand', x=53.333333333333336)

Actions:
- [11:51.103](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=711.1029791666666): cournot\_point is indicated — a transient flash.
- [11:52.333](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=712.3329791666666): monopoly\_point is indicated — a transient flash.

##### [12:2.244](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=722.2439791666667)

Narration: For perfect competition, firms take price as given and expand until price equals marginal cost. Demand reaches price twenty at total quantity eighty.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [12:3.057](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=723.0569791666667): competition\_result is shown on the screen, written out.
- [12:12.646](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=732.6459791666666): competition\_line is shown on the screen, written out.
- [12:12.646](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=732.6459791666666): competition\_point is shown on the screen, written out.

##### [12:14.001](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=734.0009791666666)

Narration: The ordering is now visible. Monopoly restricts output the most and has the highest price. Cournot lies between. Perfect competition has the largest output and the lowest price.

Board: competition\_result — a Math \[text\] that says "$P\_(upright("PC"))=20, quad Q\_(upright("PC"))=80$"; market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0)); monopoly\_line — a Line \[magenta\] drawn in market (start=(40.0, 0.0), end=(40.0, 60.0), dashed=True); monopoly\_point — a PlotPoint \[magenta\] labelled "M" drawn in market (target='demand', x=40.0); cournot\_line — a Line \[yellow\] drawn in market (start=(53.333333333333336, 0.0), end=(53.333333333333336, 46.666666666666664), dashed=True); cournot\_point — a PlotPoint \[yellow\] labelled "N" drawn in market (target='demand', x=53.333333333333336); competition\_line — a Line \[green\] drawn in market (start=(80.0, 0.0), end=(80.0, 20.0), dashed=True); competition\_point — a PlotPoint \[green\] labelled "C" drawn in market (target='demand', x=80.0)

Actions:
- [12:16.567](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=736.5669791666667): monopoly\_point is indicated — a transient flash.
- [12:21.048](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=741.0479791666667): cournot\_point is indicated — a transient flash.
- [12:23.068](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=743.0679791666666): competition\_point is indicated — a transient flash.

##### [12:27.894](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=747.8944791666667)

Narration: Numerically, price falls from sixty under monopoly, to about forty-six point seven under Cournot, to twenty under perfect competition.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [12:30.135](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=750.1349791666667): monopoly\_work (the "P\_M=60" part) is emphasized.
- [12:32.12](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=752.1199791666667): cournot\_work (the "P\_N" part) is emphasized.
- [12:34.535](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=754.5349791666666): competition\_result (the "P\_(upright("PC"))=20" part) is emphasized.
- [12:36.492](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=756.4919791666666): cournot\_work (the "P\_N" part) is no longer emphasized.
- [12:36.492](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=756.4919791666666): monopoly\_work (the "P\_M=60" part) is no longer emphasized.
- [12:36.492](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=756.4919791666666): competition\_result (the "P\_(upright("PC"))=20" part) is no longer emphasized.

##### [12:37.692](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=757.6919791666667)

Narration: The table collects the three outcomes. Read the headings first: market organization, total quantity, and market price.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [12:37.692](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=757.6919791666667): competition\_result is hidden from the screen — left the board.
- [12:37.692](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=757.6919791666667): cournot\_work is hidden from the screen — left the board.
- [12:37.692](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=757.6919791666667): monopoly\_work is hidden from the screen — left the board.
- [12:37.692](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=757.6919791666667): comparison is shown on the screen, written out.

##### [12:46.552](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=766.5519791666667)

Narration: Monopoly produces forty and charges sixty. That row is the benchmark for coordinated quantity restriction.

Board: market — an Axes (x\_range=(0.0, 105.0), y\_range=(0.0, 105.0), x\_ticks\_every=20.0); heading — a Heading that says "Monopoly, Cournot, and Competition"; demand — a FunctionPlot \[blue\] labelled "P=100-Q" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_cost — a FunctionPlot \[green\] labelled "upright("MC")=20" drawn in market (function=\<function\>, x\_range=(0.0, 100.0)); marginal\_revenue — a FunctionPlot \[red\] labelled "upright("MR")" drawn in market (function=\<function\>, x\_range=(0.0, 50.0)); monopoly\_line — a Line \[magenta\] drawn in market (start=(40.0, 0.0), end=(40.0, 60.0), dashed=True); monopoly\_point — a PlotPoint \[magenta\] labelled "M" drawn in market (target='demand', x=40.0); cournot\_line — a Line \[yellow\] drawn in market (start=(53.333333333333336, 0.0), end=(53.333333333333336, 46.666666666666664), dashed=True); cournot\_point — a PlotPoint \[yellow\] labelled "N" drawn in market (target='demand', x=53.333333333333336); competition\_line — a Line \[green\] drawn in market (start=(80.0, 0.0), end=(80.0, 20.0), dashed=True); competition\_point — a PlotPoint \[green\] labelled "C" drawn in market (target='demand', x=80.0)

Actions:
- [12:46.854](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=766.8539791666667): comparison is shown on the screen, written out.

##### [12:54.895](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=774.8954791666667)

Narration: Cournot duopoly produces about fifty-three point three and charges about forty-six point seven. Strategic quantity competition moves the market toward competition, but not all the way.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [12:55.244](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=775.2439791666667): comparison is shown on the screen, written out.

##### [13:7.024](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=787.0244791666667)

Narration: Perfect competition produces eighty and sets price equal to marginal cost, twenty. Relative to Cournot, another twenty-six point seven units are traded.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [13:7.245](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=787.2449791666667): comparison is shown on the screen, written out.

##### [13:18.653](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=798.6534791666667)

Narration: The Cournot result is therefore intermediate because firms compete through quantities while retaining some control over market price. If firms compete directly through prices, the strategic logic changes sharply.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [13:19.188](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=799.1879791666667): comparison is indicated — a transient flash.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): comparison is hidden from the screen — left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): heading is hidden from the screen — left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): market is hidden from the screen — left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): demand is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): marginal\_cost is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): marginal\_revenue is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): monopoly\_line is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): monopoly\_point is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): cournot\_line is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): cournot\_point is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): competition\_line is hidden from the screen — market left the board.
- [13:31.824](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=811.8237291666667): competition\_point is hidden from the screen — market left the board.

### Scene 5: [Quantity Setting Versus Price Setting](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=812.8653958333333)

Span: 13:32.865–17:15.606 (812.8653958333333s–1035.6055625s).

#### Objects

- benchmark: a Panel that says "Two firms sell an identical product, have marginal cost 20, can serve the whole market, and buyers purchase from the lower-price firm."
- bertrand\_equilibrium: a Math \[text\] that says "$p\_1^\*=p\_2^\*=c=20$"
- comparison: a Table \[text\] that says "Game Strategic choice Benchmark price Total output Cournot Quantity $140/3 approx 46.7$ $160/3 approx 53.3$ Bertrand Price $20$ $80$" (rows=(('Game', 'Strategic choice', 'Benchmark price', 'Total output'…, header=True)
- comparison\_heading: a Heading that says "Cournot Beside Bertrand"
- cost\_point: a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0))
- firm\_one\_price: a Point \[red\] labelled "p\_1=50" drawn in price\_line (location=(\<VariableNumber p1 = 20.0\>, 0.0))
- firm\_two\_price: a Point \[blue\] labelled "p\_2=45" drawn in price\_line (location=(\<VariableNumber p2 = 20.0\>, 0.0))
- heading: a Heading that says "What If Firms Set Prices?"
- lowest\_price: a Math \[text\] that says "$p\_i\<p\_j arrow.r q\_j=0$"
- p1: a VariableNumber (initial\_value=50.0, format\_spec='.0f')
- p2: a VariableNumber (initial\_value=45.0, format\_spec='.0f')
- price\_line: a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0)
- qualification: a Panel that says "The price-equals-cost result uses homogeneous products, identical marginal costs, sufficient capacity, and frictionless buyer switching. Product differentiation or capacity limits soften the undercutting logic."
- undercut: a Math \[text\] that says "$p\>c arrow.r upright("undercut")$"

#### Beats

##### [13:32.865](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=812.8653958333333)

Narration: Cournot firms commit to quantities and let market demand determine one common price. Bertrand competition reverses the strategic choice: each firm posts a price.

Board: Empty.

Actions:
- [13:32.865](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=812.8653958333333): heading is shown on the screen, written out.
- [13:38.101](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=818.1013958333333): benchmark is shown on the screen, written out.

##### [13:44.146](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=824.1463958333333)

Narration: Keep the comparison disciplined. The product is identical, both firms have marginal cost twenty, either firm can serve the market, and buyers choose the lower price.

Board: benchmark — a Panel that says "Two firms sell an identical product, have marginal cost 20, can serve the whole market, and buyers purchase from the lower-price firm."; heading — a Heading that says "What If Firms Set Prices?"

Actions:
- [13:50.253](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=830.2533958333333): price\_line is shown on the screen, written out.
- [13:50.253](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=830.2533958333333): cost\_point is shown on the screen, written out.

##### [13:55.985](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=835.9848958333333)

Narration: Suppose Firm 1 posts fifty while Firm 2 posts forty-five. The two colored points display those prices on the same scale.

Board: benchmark — a Panel that says "Two firms sell an identical product, have marginal cost 20, can serve the whole market, and buyers purchase from the lower-price firm."; price\_line — a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0); heading — a Heading that says "What If Firms Set Prices?"; cost\_point — a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0))

Actions:
- [13:57.703](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=837.7033958333333): firm\_one\_price is shown on the screen, written out.
- [13:59.224](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=839.2243958333333): firm\_two\_price is shown on the screen, written out.

##### [14:5.049](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=845.0488958333333)

Narration: The lower-price firm serves the market. Buyers do not pay fifty for what they can buy at forty-five, so Firm 2 sells and Firm 1 sells nothing.

Board: benchmark — a Panel that says "Two firms sell an identical product, have marginal cost 20, can serve the whole market, and buyers purchase from the lower-price firm."; price\_line — a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0); heading — a Heading that says "What If Firms Set Prices?"; cost\_point — a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0)); firm\_one\_price — a Point \[red\] labelled "p\_1=50" drawn in price\_line (location=(\<VariableNumber p1 = 20.0\>, 0.0)); firm\_two\_price — a Point \[blue\] labelled "p\_2=45" drawn in price\_line (location=(\<VariableNumber p2 = 20.0\>, 0.0))

Actions:
- [14:5.049](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=845.0488958333333): benchmark is hidden from the screen — left the board.
- [14:5.049](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=845.0488958333333): lowest\_price is shown on the screen, written out.
- [14:12.037](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=852.0373958333333): firm\_two\_price is indicated — a transient flash.
- [14:14.115](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=854.1153958333333): firm\_one\_price is indicated — a transient flash.

##### [14:15.54](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=855.5398958333333)

Narration: Firm 1 can respond by posting forty-four. It gives up one unit of margin relative to forty-five, but captures the market instead of selling zero.

Board: price\_line — a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0); heading — a Heading that says "What If Firms Set Prices?"; cost\_point — a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0)); firm\_one\_price — a Point \[red\] labelled "p\_1=50" drawn in price\_line (location=(\<VariableNumber p1 = 20.0\>, 0.0)); firm\_two\_price — a Point \[blue\] labelled "p\_2=45" drawn in price\_line (location=(\<VariableNumber p2 = 20.0\>, 0.0)); lowest\_price — a Math \[text\] that says "$p\_i\<p\_j arrow.r q\_j=0$"

Actions:
- [14:17.664](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=857.6643958333333): firm\_one\_price is redrawn as the numbers it depends on change.
- [14:17.664](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=857.6643958333333): p1 ticks to 44.0.

##### [14:25.996](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=865.9963958333333)

Narration: Firm 2 can answer with forty-three. Unlike the Cournot chase, an attractive response here is not a movement toward a smooth quantity curve. It is a price just below the rival.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [14:27.621](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=867.6213958333333): firm\_two\_price is redrawn as the numbers it depends on change.
- [14:27.621](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=867.6213958333333): p2 ticks to 43.0.
- [14:36.875](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=876.8753958333333): firm\_two\_price is indicated — a transient flash.

##### [14:38.357](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=878.3573958333333)

Narration: As long as the lower price remains above marginal cost, the higher-price firm can profitably undercut it. So no common price above twenty can be an equilibrium.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [14:40.47](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=880.4703958333333): undercut is shown on the screen, written out.
- [14:40.47](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=880.4703958333333): undercut (the "p\>c" part) is emphasized.
- [14:49.282](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=889.2823958333333): undercut (the "p\>c" part) is no longer emphasized.

##### [14:49.882](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=889.8823958333332)

Narration: Continue the undercutting pressure toward cost. Both price points move down the scale and arrive at twenty.

Board: price\_line — a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0); heading — a Heading that says "What If Firms Set Prices?"; cost\_point — a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0)); firm\_one\_price — a Point \[red\] labelled "p\_1=50" drawn in price\_line (location=(\<VariableNumber p1 = 20.0\>, 0.0)); firm\_two\_price — a Point \[blue\] labelled "p\_2=45" drawn in price\_line (location=(\<VariableNumber p2 = 20.0\>, 0.0)); lowest\_price — a Math \[text\] that says "$p\_i\<p\_j arrow.r q\_j=0$"; undercut — a Math \[text\] that says "$p\>c arrow.r upright("undercut")$"

Actions:
- [14:52.285](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=892.2853958333333): firm\_one\_price is redrawn as the numbers it depends on change.
- [14:52.285](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=892.2853958333333): firm\_two\_price is redrawn as the numbers it depends on change.
- [14:52.285](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=892.2853958333333): p1 ticks to 20.0.
- [14:52.285](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=892.2853958333333): p2 ticks to 20.0.

##### [14:57.773](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=897.7733958333333)

Narration: At a common price of twenty, neither firm can gain by charging more, because it would lose its customers. Neither can gain by charging less, because price would fall below marginal cost.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [14:59.05](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=899.0503958333334): bertrand\_equilibrium is shown on the screen, written out.
- [15:8.095](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=908.0953958333333): cost\_point is indicated — a transient flash.

##### [15:10.019](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=910.0188958333333)

Narration: The Bertrand equilibrium is therefore price equal to marginal cost under these assumptions. Total demand at price twenty is eighty, the same total output as the perfectly competitive benchmark.

Board: price\_line — a NumberLine labelled "p" (x\_range=(15.0, 65.0), include\_numbers=True, ticks\_every=5.0); heading — a Heading that says "What If Firms Set Prices?"; cost\_point — a Point \[green\] labelled "c=20" drawn in price\_line (location=(20.0, 0.0)); firm\_one\_price — a Point \[red\] labelled "p\_1=50" drawn in price\_line (location=(\<VariableNumber p1 = 20.0\>, 0.0)); firm\_two\_price — a Point \[blue\] labelled "p\_2=45" drawn in price\_line (location=(\<VariableNumber p2 = 20.0\>, 0.0)); lowest\_price — a Math \[text\] that says "$p\_i\<p\_j arrow.r q\_j=0$"; undercut — a Math \[text\] that says "$p\>c arrow.r upright("undercut")$"; bertrand\_equilibrium — a Math \[text\] that says "$p\_1^\*=p\_2^\*=c=20$"

Actions:
- [15:11.04](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=911.0403958333334): A box is drawn around bertrand\_equilibrium.

##### [15:22.867](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=922.8668958333333)

Narration: This is the central contrast. Under Cournot, a firm choosing more output depresses the price on all units, so each firm restrains quantity. Under Bertrand, a slightly lower price can redirect the whole market.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [15:35.092](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=935.0923958333333): firm\_one\_price is indicated — a transient flash.
- [15:36.474](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=936.4743958333333): firm\_two\_price is indicated — a transient flash.

##### [15:38.131](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=938.1308958333333)

Narration: Quantity competition therefore leaves price above marginal cost in our two-firm example. Direct price competition drives the benchmark price down to marginal cost.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): bertrand\_equilibrium is hidden from the screen — left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): heading is hidden from the screen — left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): lowest\_price is hidden from the screen — left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): price\_line is hidden from the screen — left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): cost\_point is hidden from the screen — price\_line left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): firm\_one\_price is hidden from the screen — price\_line left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): firm\_two\_price is hidden from the screen — price\_line left the board.
- [15:48.846](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=948.8463958333333): undercut is hidden from the screen — left the board.

##### [15:50.046](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=950.0463958333333)

Narration: Place the two games side by side. The table names the strategic choice, equilibrium price, and total output.

Board: Empty.

Actions:
- [15:50.046](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=950.0463958333333): comparison\_heading is shown on the screen, written out.
- [15:53.181](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=953.1813958333333): comparison is shown on the screen, written out.

##### [15:58.889](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=958.8893958333333)

Narration: In Cournot, firms choose quantities. Their best-response crossing gives price about forty-six point seven and total output about fifty-three point three.

Board: comparison\_heading — a Heading that says "Cournot Beside Bertrand"

Actions:
- [15:59.632](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=959.6323958333334): comparison is shown on the screen, written out.
- [16:5.054](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=965.0543958333333): comparison (the "$140/3 approx 46.7$" part) is indicated — a transient flash.

##### [16:10.066](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=970.0658958333333)

Narration: In the homogeneous-product Bertrand benchmark, firms choose prices. Undercutting gives price twenty and total output eighty.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [16:12.202](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=972.2023958333333): comparison is shown on the screen, written out.
- [16:16.962](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=976.9623958333333): comparison (the "$20$" part) is indicated — a transient flash.

##### [16:19.965](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=979.9653958333333)

Narration: Do not treat that sharp result as a law for every price-setting market. If products differ, customers may stay with a higher-price seller. If capacity is limited, the cheaper firm may be unable to serve everyone.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [16:21.138](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=981.1383958333333): qualification is shown on the screen, written out.

##### [16:34.219](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=994.2188958333334)

Narration: Different marginal costs, search costs, repeated interaction, and capacity constraints can also sustain prices above the simplest Bertrand level. The comparison works because we held the environment fixed and changed the strategic variable.

Board: qualification — a Panel that says "The price-equals-cost result uses homogeneous products, identical marginal costs, sufficient capacity, and frictionless buyer switching. Product differentiation or capacity limits soften the undercutting logic."; comparison\_heading — a Heading that says "Cournot Beside Bertrand"

Actions:
- None.

##### [16:50.191](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1010.1908958333333)

Narration: The full lesson is now one connected argument. Demand turns two quantities into one price. Profit maximization turns each rival quantity into a best response. Alternating responses converge to the Cournot crossing. That crossing prices below monopoly but above competition, while direct price setting creates the undercutting race to marginal cost.

Board: Unchanged from the preceding beat in this scene.

Actions:
- [16:56.193](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1016.1933958333333): comparison is indicated — a transient flash.
- [17:4.726](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1024.7263958333333): comparison is indicated — a transient flash.
- [17:14.564](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1034.5638958333334): comparison is hidden from the screen — left the board.
- [17:14.564](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1034.5638958333334): comparison\_heading is hidden from the screen — left the board.
- [17:14.564](https://academa.ai/lectures/cournot-duopoly-and-best-responses?t=1034.5638958333334): qualification is hidden from the screen — left the board.
