用 Python 模擬囚徒困境(下):從海洋生態合作到遊戲理論哲學
第3章:資料視覺化與分析
合作率與收益的視覺化分析
我們將上篇章節建立的模型進行分析結果數據的計算,之後依序繪製出統計圖表,最後的執行檔會顯示出統計數據報告於terminal中。
import matplotlib.pyplot as plt
import seaborn as sns
# 設定中文字體
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS', 'Microsoft JhengHei']
plt.rcParams['axes.unicode_minus'] = False
def analyze_tournament_results(ecosystem, tournament_results):
"""分析錦標賽結果"""
# 創建分析資料
analysis_data = []
for creature in ecosystem.creatures:
creature_matches = [r for r in tournament_results
if r['creature1'] == creature.name or r['creature2'] == creature.name]
cooperation_rates = []
payoffs = []
for match in creature_matches:
if match['creature1'] == creature.name:
cooperation_rates.append(match['cooperation_rate1'])
payoffs.extend(match['payoffs1'])
else:
cooperation_rates.append(match['cooperation_rate2'])
payoffs.extend(match['payoffs2'])
analysis_data.append({
'name': creature.name,
'strategy': creature.strategy_type,
'avg_cooperation_rate': np.mean(cooperation_rates),
'total_payoff': creature.total_payoff,
'avg_payoff_per_match': creature.total_payoff / len(creature_matches),
'reputation': creature.reputation,
'payoff_variance': np.var(payoffs)
})
df = pd.DataFrame(analysis_data)
# 創建視覺化圖表
fig, axes = plt.subplots(2, 2, figsize=(15, 12))
fig.suptitle('海洋生態囚徒困境錦標賽分析', fontsize=16, fontweight='bold')
# 1. 合作率 vs 總收益
ax1 = axes[0, 0]
scatter = ax1.scatter(df['avg_cooperation_rate'], df['total_payoff'],
c=df['reputation'], s=100, alpha=0.7, cmap='viridis')
ax1.set_xlabel('平均合作率')
ax1.set_ylabel('總收益')
ax1.set_title('合作率與收益關係')
plt.colorbar(scatter, ax=ax1, label='最終信譽')
# 添加生物名稱標籤
for i, row in df.iterrows():
ax1.annotate(row['name'], (row['avg_cooperation_rate'], row['total_payoff']),
xytext=(5, 5), textcoords='offset points', fontsize=8)
# 2. 策略比較柱狀圖
ax2 = axes[0, 1]
strategy_colors = plt.cm.Set3(np.linspace(0, 1, len(df)))
bars = ax2.bar(range(len(df)), df['total_payoff'], color=strategy_colors)
ax2.set_xlabel('海洋生物')
ax2.set_ylabel('總收益')
ax2.set_title('各生物收益比較')
ax2.set_xticks(range(len(df)))
ax2.set_xticklabels([f"{row['name']}\n({row['strategy']})"
for _, row in df.iterrows()], rotation=45, ha='right')
# 3. 信譽分佈
ax3 = axes[1, 0]
ax3.hist(df['reputation'], bins=10, alpha=0.7, color='skyblue', edgecolor='black')
ax3.set_xlabel('最終信譽值')
ax3.set_ylabel('頻次')
ax3.set_title('信譽值分佈')
ax3.axvline(df['reputation'].mean(), color='red', linestyle='--',
label=f'平均信譽: {df["reputation"].mean():.3f}')
ax3.legend()
# 4. 收益變異性
ax4 = axes[1, 1]
ax4.scatter(df['avg_cooperation_rate'], df['payoff_variance'],
c=df['total_payoff'], s=100, alpha=0.7, cmap='plasma')
ax4.set_xlabel('平均合作率')
ax4.set_ylabel('收益變異性')
ax4.set_title('合作率與收益穩定性')
plt.tight_layout()
plt.show()
return df
# 執行分析
results_df = analyze_tournament_results(ecosystem, tournament_results)
# 顯示詳細統計
print("\n詳細統計分析:")
print("=" * 50)
print(results_df.round(3))
第4章:哲學反思——從演算法到生命智慧
理性與合作的悖論
透過我們的 Python 模擬,我們發現了一個深刻的哲學問題:純粹的理性個體主義往往導致集體的非理性結果。
在我們的海洋生態模擬中,「自私海葵」(總是背叛)雖然在短期內可能獲得優勢,但在長期的生態競爭中,往往不如採用合作策略的生物。這個現象引發了幾個重要的哲學問題:
- 個體理性 vs 集體理性:每個個體的最佳策略不等於整體的最佳策略
- 短期利益 vs 長期生存:純粹的競爭策略可能危及物種的長期存續
- 道德的演化基礎:合作行為是否具有自然選擇的優勢?
海洋生態的智慧啟示
def philosophical_analysis(results_df):
"""哲學分析:從數據中提取智慧"""
print("🌊 海洋生態哲學啟示 🌊")
print("=" * 50)
# 找出最成功的策略
top_performer = results_df.loc[results_df['total_payoff'].idxmax()]
most_cooperative = results_df.loc[results_df['avg_cooperation_rate'].idxmax()]
most_reputable = results_df.loc[results_df['reputation'].idxmax()]
print(f"🏆 最高收益者: {top_performer['name']} ({top_performer['strategy']})")
print(f" 收益: {top_performer['total_payoff']}, 合作率: {top_performer['avg_cooperation_rate']:.2%}")
print(f"🤝 最合作者: {most_cooperative['name']} ({most_cooperative['strategy']})")
print(f" 合作率: {most_cooperative['avg_cooperation_rate']:.2%}, 收益: {most_cooperative['total_payoff']}")
print(f"⭐ 最高信譽者: {most_reputable['name']} ({most_reputable['strategy']})")
print(f" 信譽: {most_reputable['reputation']:.3f}, 收益: {most_reputable['total_payoff']}")
# 分析合作與收益的相關性
cooperation_payoff_corr = results_df['avg_cooperation_rate'].corr(results_df['total_payoff'])
reputation_payoff_corr = results_df['reputation'].corr(results_df['total_payoff'])
print(f"\n📊 統計洞察:")
print(f" 合作率與收益相關性: {cooperation_payoff_corr:.3f}")
print(f" 信譽與收益相關性: {reputation_payoff_corr:.3f}")
# 哲學詮釋
print(f"\n🤔 哲學詮釋:")
if cooperation_payoff_corr > 0.3:
print(" ✓ 合作策略在長期競爭中具有顯著優勢")
print(" ✓ 證實了康德的道德律令:普遍化的合作行為有利於整體")
elif cooperation_payoff_corr < -0.3:
print(" ⚠ 在這個生態系統中,競爭比合作更有利")
print(" ⚠ 支持霍布斯的觀點:自然狀態下的競爭本性")
else:
print(" ~ 合作與競爭的效果相當,情境決定最佳策略")
print(" ~ 呼應亞里斯多德的中庸之道")
if reputation_payoff_corr > 0.5:
print(" ✓ 信譽是生存的重要資本")
print(" ✓ 證明了儒家思想中「信」的實用價值")
# 策略多樣性分析
strategy_diversity = len(results_df['strategy'].unique())
print(f"\n🌈 生態多樣性:")
print(f" 策略種類: {strategy_diversity}")
print(f" ✓ 生態系統的穩定需要策略多樣性")
print(f" ✓ 證實了達爾文演化論中「適者生存」的複雜性")
# 執行哲學分析
philosophical_analysis(results_df)
從程式碼到人生哲學
我們的 Python 模擬不僅僅是技術練習,更是一面反映人性和社會的鏡子:
程式碼中的道德選擇:
def life_philosophy_from_code():
"""從程式碼中提取人生哲學"""
philosophical_insights = {
"always_cooperate": {
"哲學派別": "理想主義、基督教愛人如己",
"人生啟示": "無條件的善意可能被利用,但也可能感化他人",
"適用情境": "穩定的社群關係、教育環境"
},
"always_defect": {
"哲學派別": "現實主義、馬基雅維利主義",
"人生啟示": "純粹的自私可能獲得短期利益,但損害長期關係",
"適用情境": "高度競爭的商業環境、資源稀缺時"
},
"tit_for_tat": {
"哲學派別": "功利主義、報應倫理學",
"人生啟示": "公平對待他人,善有善報,惡有惡報",
"適用情境": "大多數社交互動、商業談判"
},
"generous_tit_for_tat": {
"哲學派別": "儒家寬恕思想、基督教饒恕精神",
"人生啟示": "在堅持原則的同時保持寬容,給他人改過的機會",
"適用情境": "領導管理、家庭關係、教育工作"
}
}
print("💡 從演算法到人生智慧 💡")
print("=" * 50)
for strategy, wisdom in philosophical_insights.items():
print(f"\n🔹 {strategy.upper()}:")
for key, value in wisdom.items():
print(f" {key}: {value}")
print(f"\n🌟 綜合智慧:")
print(" • 沒有單一策略能適用所有情境")
print(" • 最佳策略需要考慮環境、對手和長期目標")
print(" • 合作與競爭的平衡是生存的藝術")
print(" • 信譽和關係是比短期利益更寶貴的資產")
print(" • 適應性和多樣性是面對不確定性的最佳策略")
life_philosophy_from_code()
第5章:延伸思考與實際應用
現實世界的囚徒困境
我們的海洋生態模擬可以幫助我們理解許多現實世界的問題:
氣候變遷合作:
- 各國在減碳政策上面臨囚徒困境
- 單方面減碳可能削弱經濟競爭力
- 但全球不合作將導致氣候災難
海洋保護:
- 漁業資源管理的國際合作
- 海洋垃圾清理的跨國協調
- 珊瑚礁保護的區域合作
程式設計的倫理思考
def ethical_programming_reflection():
"""程式設計的倫理反思"""
print("⚖️ 程式設計的倫理維度 ⚖️")
print("=" * 40)
ethical_questions = [
"我們設計的演算法如何影響社會合作?",
"AI系統應該優化個體利益還是集體福祉?",
"在設計遊戲機制時,如何平衡競爭與合作?",
"程式設計師是否有責任考慮代碼的道德後果?",
"如何確保技術進步不會破壞社會信任?"
]
for i, question in enumerate(ethical_questions, 1):
print(f"{i}. {question}")
print(f"\n🎯 行動建議:")
print("• 在設計系統時考慮道德後果")
print("• 優先考慮長期影響而非短期效益")
print("• 建立透明和公平的機制")
print("• 促進合作而非零和競爭")
print("• 重視使用者的福祉和社會責任")
ethical_programming_reflection()
結論:技術與哲學的深度對話
透過這次 Python 模擬囚徒困境的實驗,我們發現技術不僅僅是工具,更是理解世界和自己的媒介。從海洋生態的合作策略到人類社會的道德選擇,從演算法的邏輯到哲學的思辨,我們看到了一個更加豐富和深刻的世界。
主要發現:
- 合作的演化優勢:在長期互動中,適度的合作策略往往勝過純粹的競爭
- 策略的情境依賴性:沒有絕對最優的策略,成功取決於環境和對手
- 信譽的重要性:良好的聲譽是長期成功的重要因素
- 寬容的力量:給予他人改過機會的策略往往更具韌性
哲學啟示:
- 個體理性不等於集體理性
- 道德行為可能具有演化優勢
- 多樣性是系統穩定的基礎
- 長期思維勝過短期利益
技術應用:
- 演算法設計應考慮道德後果
- 系統架構應促進合作而非對抗
- 程式設計師有責任思考社會影響
- 技術創新應服務於人類福祉
當我們用 Python 編寫囚徒困境的模擬時,我們不只是在學習程式設計,更是在探索生命的本質、合作的智慧和存在的意義。這正是技術與哲學結合的魅力所在——通過理性的分析和實證的實驗,我們可以更深刻地理解自己和這個世界。