離散市場
離散市場逐一列出每個單位:買方對多一單位的願付價格,以及賣方多生產一單位的成本。需求與供給都是階梯函數;均衡是整數個單位,並由一段價格區間支持。
逐單位表
DiscreteDemand(values)
DiscreteSupply(values)
價格為 price 時的成交單位數;在該價格下無差異的買方或賣方會交易。
表中的單位數。
將多個個人表合併為市場表(詳見由個人加總市場曲線)。
需求表存放邊際願付價格,由第一單位到最後一單位弱遞減;供給表存放邊際成本,弱遞增。順序不符時拋出 DiscreteMarketError。
均衡
solve_discrete_equilibrium(
demand,
supply,
*,
price_rule="midpoint"
)
成交單位數。
支持均衡的價格區間下限。
支持均衡的價格區間上限。
依 price_rule 從區間中選出的價格。
MIDPOINT(預設)、LOWER 或 UPPER;也可傳入字串 "midpoint"、"lower"、"upper"。
成交單位的價值。
成交單位的成本。
每個成交單位的價值減成本。
區間是否只有單一價格。
交易所有價值不低於成本的單位,並找出恰好使該數量成交的價格區間。結果包含下列欄位:
solve_discrete_market(demand_values, supply_values) 直接由 tuple 建立兩張表並求解。需求表的值由高到低、供給表的值由低到高,各單位的價值與成本才能依序配對。
from principle_viz import (
DiscreteDemand,
DiscreteSupply,
solve_discrete_equilibrium,
)
demand = DiscreteDemand((11, 9, 7, 5, 3))
supply = DiscreteSupply((1, 3, 5, 8, 10))
eq = solve_discrete_equilibrium(demand, supply)
print(eq.q_star, eq.price_low, eq.price_high, eq.price)
# 3 5.0 7.0 6.0
print(eq.gains_from_trade)
# (10.0, 6.0, 2.0)
成交 3 單位,價格區間為 5 到 7,中點規則回報 6。交易利得合計 \(10 + 6 + 2 = 18\)。
compute_discrete_surplus(result)
所選價格下的消費者剩餘與生產者剩餘,包含總額與逐單位數值(consumer_surplus_by_unit、producer_surplus_by_unit)。上例價格為 6 時,兩者皆為 \(5 + 3 + 1 = 9\)。
圖形
MarketFigure.add_discrete_curves(
demand=None,
supply=None,
*,
demand_label="$D$",
supply_label="$S$"
)
MarketFigure.add_discrete_equilibrium(result)
每個單位畫成區間 \([q, q + 1)\) 的一階:起點為實心點(包含),終點為空心點(不包含),並以虛線連到下一階。可只傳入其中一張表。均衡在座標軸上標出 \(Q^*\) 與價格區間。
fig = MarketFigure(
x_max=5.5,
y_max=12,
title="Discrete Demand and Supply",
)
fig.add_discrete_curves(demand, supply)
fig.add_discrete_equilibrium(eq)
fig.finalize()
上例的圖形參見離散需求與供給。。