Market Price Calculation and Proxy Profit¶
Overview¶
The Plant Agent Model (PAM) relies on market prices to calculate plant profitability and balance sheets. However, the Trade Module doesn’t simulate a true market price - it optimizes global allocation based on production costs. This document explains how “proxy profit” approximates realistic market dynamics.
The Challenge¶
Trade Module Optimization:
Uses levelized cost of steel/iron (LCOS) as the bid price for suppliers
Minimizes global cost of allocation to meet demand
Naturally captures competitive advantage based on production costs
Does NOT reflect: Profit maximization or true market price/value of commodities
Problem: Without market prices, we can’t calculate realistic profits or balance sheets for plant agents.
Solution: Proxy Profit Method¶
Step 1: Derive Cost Curve¶
Aggregate all plants’ production costs to create a supply curve:
Cost ($/t) ↑
│ ╱──────
│ ╱
│ ╱
│ ╱
│ ╱
│╱___________→ Cumulative Capacity (t)
X-axis: Cumulative production capacity (sorted by cost, lowest to highest)
Y-axis: Levelized cost of steel/iron (LCOS) for each plant
Result: Upward-sloping supply curve
Step 2: Find Market-Clearing Price¶
Identify where the supply curve intersects demand:
Cost ($/t) ↑
Market price│-----╱──────
│ ╱ │
│ ╱ │
│ ╱ │
│ ╱ │
│╱______│_____→ Cumulative Capacity (t)
``` Demand
- Vertical line at demand quantity
- Intersection with cost curve and y-axis = **market price**
### Step 3: Calculate Proxy Profit
For each plant:
```python
profit_i = (market_price - lcos_i) × sales_i
Where:
market_price: Derived from cost curve intersection (Step 2)lcos_i: Plant i’s levelized cost of steel/ironsales_i: Plant i’s allocated production volume (from Trade Module)
Example¶
Scenario¶
Demand: 100 Mt steel
Plants:
Plant A: LCOS = $400/t, Capacity = 50 Mt
Plant B: LCOS = $500/t, Capacity = 40 Mt
Plant C: LCOS = $600/t, Capacity = 30 Mt
Cost Curve¶
0-50 Mt: $400/t (Plant A)
50-90 Mt: $500/t (Plant B)
90-120 Mt: $600/t (Plant C)
Market Price Calculation¶
Demand = 100 Mt
Falls in Plant C’s range (90-120 Mt)
Market Price = $600/t (marginal plant’s cost)
Profit Calculation¶
Plant A: profit = (600 - 400) × 50 = $10,000M
Plant B: profit = (600 - 500) × 40 = $4,000M
Plant C: profit = (600 - 600) × 10 = $0M (marginal plant breaks even)
Implementation in PAM¶
Where It’s Used¶
Balance Sheet Updates (
Plant.update_furnace_and_plant_balance()):Uses market price to calculate:
balance = (market_price - unit_cost) × productionAggregates to plant and plant group balances
NPV Calculations (
FurnaceGroup.optimal_technology_name()):Uses forecasted market prices for each year, by extracting future demands from current cost curves
Projects future revenues based on future demand and predicted prices
Expansion Decisions (
PlantGroup.evaluate_expansion()):Uses forecasted market prices for each year, by extracting future demands from current cost curves
Determines if new capacity will be profitable at projected prices
Price Updates¶
Market prices are recalculated after every Trade Module run:
# In simulation.py or handlers
market_price = extract_price_from_costcurve(
demand=current_demand,
cost_curve=sorted_plants_by_cost
)
Limitations¶
Assumes Perfect Competition: All plants receive the same market price
Reality: Regional price differences, contracts, quality premiums
No Price Dynamics: Prices update annually based on current supply/demand
Reality: Intra-year volatility, speculation, inventory effects
Marginal Cost Pricing: Market price = marginal plant’s cost
Reality: Market power, cartels, trade barriers affect pricing
No Demand Elasticity: Demand is fixed, doesn’t respond to price
Reality: High prices → demand destruction, substitution
Why This Approach Works¶
Despite limitations, proxy profit provides:
Competitive Differentiation: Low-cost plants earn higher profits
Realistic Losses: High-cost plants may operate at losses
Investment Signals: Profitable plants can finance expansions
Technology Transition Incentives: Cleaner/cheaper tech improves profitability
This approximation is sufficient for modeling long-term industry transformation where:
Annual time steps smooth out short-term volatility
Strategic decisions (technology switches, expansions) depend on multi-year trends
Relative competitiveness matters more than absolute price levels