| |

用 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 模擬,我們發現了一個深刻的哲學問題:純粹的理性個體主義往往導致集體的非理性結果

在我們的海洋生態模擬中,「自私海葵」(總是背叛)雖然在短期內可能獲得優勢,但在長期的生態競爭中,往往不如採用合作策略的生物。這個現象引發了幾個重要的哲學問題:

  1. 個體理性 vs 集體理性:每個個體的最佳策略不等於整體的最佳策略
  2. 短期利益 vs 長期生存:純粹的競爭策略可能危及物種的長期存續
  3. 道德的演化基礎:合作行為是否具有自然選擇的優勢?

海洋生態的智慧啟示

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 模擬囚徒困境的實驗,我們發現技術不僅僅是工具,更是理解世界和自己的媒介。從海洋生態的合作策略到人類社會的道德選擇,從演算法的邏輯到哲學的思辨,我們看到了一個更加豐富和深刻的世界。

主要發現

  1. 合作的演化優勢:在長期互動中,適度的合作策略往往勝過純粹的競爭
  2. 策略的情境依賴性:沒有絕對最優的策略,成功取決於環境和對手
  3. 信譽的重要性:良好的聲譽是長期成功的重要因素
  4. 寬容的力量:給予他人改過機會的策略往往更具韌性

哲學啟示

  • 個體理性不等於集體理性
  • 道德行為可能具有演化優勢
  • 多樣性是系統穩定的基礎
  • 長期思維勝過短期利益

技術應用

  • 演算法設計應考慮道德後果
  • 系統架構應促進合作而非對抗
  • 程式設計師有責任思考社會影響
  • 技術創新應服務於人類福祉

當我們用 Python 編寫囚徒困境的模擬時,我們不只是在學習程式設計,更是在探索生命的本質、合作的智慧和存在的意義。這正是技術與哲學結合的魅力所在——通過理性的分析和實證的實驗,我們可以更深刻地理解自己和這個世界。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *