假設有三個組織欲將各自資金合併存入銀行,以獲得更高之定存利率:
組織 1(ASTIN, Actuarial Studies in Non-life Insurance)
為國際精算師協會(IAA)的非人壽保險分會,可投入 1,800,000 比利時法郎
組織 2(I.A.A., International Actuarial Association)
國際精算師協會本部,可投入 900,000 比利時法郎
組織 3(A.A.Br., Association des Actuaires de Bruxelles)
布魯塞爾精算師協會,可投入 300,000 比利時法郎
當地存款利率結構如下表所示:
假設我們進行三個月的定存,則若他們各自存的話:
ASTIN 單獨存 1,800,000(介於 1,000,000~3,000,000 之間),年利率 10.25%,三個月約 46,125 法郎
I.A.A. 單獨存 900,000(低於 1,000,000),年利率 7.75%,三個月約 17,437.5 法郎
A.A.Br. 單獨存 300,000(低於 1,000,000),年利率 7.75%,三個月約 5,812.5 法郎
三者分開時三個月利息合計約 69,375 法郎。但若三方合併存款,總額會達到 3,000,000,可享 12% 年利率,三個月利息約可達 90,000 法郎。合作可以產生更多的效益
令玩家集合 N={1,2,3} 分別代表三個組織。特徵函數 v(S) 為該聯盟 S 能取得的三個月利息金額。根據利率門檻可計算出:
顯然這些值滿足超可加性,那我們來看看如果全體聯盟形成的時候,該如何分配利息
我們可以在 Sage 的命令行介面輸入以下程式碼:
from sage.game_theory.cooperative_game import CooperativeGame
# 定義特徵函數 v,使用 tuple 做為 key
v = {
(): 0,
(1,): 46125,
(2,): 17437.5,
(3,): 5812.5,
(1,2): 69187.5,
(1,3): 53812.5,
(2,3): 30750,
(1,2,3): 90000
}
# 建立合作博弈物件
G = CooperativeGame(v)
# 計算並輸出 Shapley Value
shapley_val = G.shapley_value()
print("Shapley Value:", shapley_val)
SageMath 計算完畢後會吐出
Shapley Value: {1: 51750.0000000000, 2: 25875.0000000000, 3: 12375.0000000000}
# 匯入符號運算與繪圖
var('x1 x2')
# 列出我們要同時滿足的不等式
ineqs = [
x1 >= 46125, # x1 >= v({1})
x2 >= 17437.5, # x2 >= v({2})
x1 + x2 <= 84187.5, # x3 >= 5812.5
x1 + x2 >= 69187.5, # v({1,2}) = 69187.5
x2 <= 36187.5, # x1 + x3 >= 53812.5
x1 <= 59250 # x2 + x3 >= 30750
]
# 使用 region_plot 繪出同時滿足這些不等式的區域
p = region_plot(
ineqs, # 不等式列表
(x1, 40000, 62000), # x1 繪圖範圍,可酌情調整
(x2, 10000, 45000), # x2 繪圖範圍,可酌情調整
incol='lightblue', # 填充顏色
bordercol='blue', # 邊界顏色
alpha=0.5 # 填充透明度
)
# 在圖上加文字標示
p += text("Projected Core Region", (50000, 40000), color='black', fontsize=10)
p.axes_labels(['x1','x2'])
# 顯示繪圖
p.show()
Lemaire, Jean. "Cooperative game theory and its insurance applications." _ASTIN Bulletin: The Journal of the IAA_ 21.1 (1991): 17-40.