首頁 > 軟體

基於Python實現計算納什均衡的範例詳解

2023-11-01 10:00:24

納什均衡是一種博弈論中的概念,它描述了一種平衡狀態,其中每個參與者都不能通過獨立改變其決策來提高自己的利益。

在 Python 中,可以使用一些第三方庫,例如 Gambit 或 Nashpy,來計算納什均衡。

Nashpy 庫計算兩個參與者的納什均衡

注意安裝 nashpy 庫。

import nashpy as nash
import numpy as np

A = np.array([[1, -1], [-1, 1]])
game = nash.Game(A)
equilibrium = game.vertex_enumeration()
print("納什均衡是: ", next(equilibrium))

在上述程式碼中,先匯入了 nashpy 庫,並使用其中的 Game() 函數建立一個遊戲。

然後,使用 vertex_enumeration() 方法找到納什均衡,並使用 next() 函數從生成器中提取第一個均衡。

手動計算納什均衡

下面是使用原生 Python 手動計算納什均衡的程式碼範例:

import numpy as np
from scipy.optimize import linprog


def nash_equilibrium(payoff_matrix_a, payoff_matrix_b):
    """
    計算二人非合作博弈的納什均衡。
    """
    num_actions_a = payoff_matrix_a.shape[1]
    num_actions_b = payoff_matrix_b.shape[1]

    # 定義優化問題
    c = -np.ones(num_actions_a + num_actions_b)
    A = np.zeros((num_actions_b, num_actions_a + num_actions_b))
    for j in range(num_actions_b):
        A[j, :num_actions_a] = -payoff_matrix_b[:, j]
        A[j, num_actions_a:] = np.ones(num_actions_b)

    b = np.zeros(num_actions_b)
    bounds = [(0, None) for _ in range(num_actions_a + num_actions_b)]

    # 解決優化問題
    res = linprog(c, A_ub=A, b_ub=b, bounds=bounds, method='simplex')

    # 提取混合策略
    mixed_strategy_a = res.x[:num_actions_a]
    mixed_strategy_b = res.x[num_actions_a:]

    return mixed_strategy_a, mixed_strategy_b



payoff_matrix_a = np.array([[1, 5], [0, 5]])
payoff_matrix_b = np.array([[3, 7], [2, 3]])
mixed_strategy_a, mixed_strategy_b = nash_equilibrium(payoff_matrix_a, payoff_matrix_b)

print("混合策略 A:", mixed_strategy_a)
print("混合策略 B:", mixed_strategy_b)

該程式碼僅適用於 2 名玩家的博弈,如果您需要計算多名玩家的博弈,則需要進行一些修改。

程式碼執行結果如下。

上述程式碼使用 scipy 庫的 linprog() 函數來解決博弈矩陣。它將約束條件和目標函數作為輸入,返回納什均衡策略。

使用了 PuLP 庫計算納什均衡

下面是簡單的程式碼實現:

from pulp import *

# 建立一個線性規劃模型
prob = LpProblem("納什均衡", LpMaximize)

# 建立玩家1的策略變數
p1 = LpVariable("p1", 0, 1)

# 建立玩家2的策略變數
p2 = LpVariable("p2", 0, 1)

# 設定目標函數
prob += 5 * p1 + 4 * p2, "Total Utility"

# 設定約束條件
prob += p1 + 2 * p2 <= 1, "玩家 1 約束條件"
prob += 3 * p1 + 2 * p2 <= 2, "玩家 2 約束條件"

# 解決問題
prob.solve()

# 輸出結果
print("玩家1策略: ", value(p1))
print("玩家2策略: ", value(p2))

以上方法是通過線性規劃計算納什均衡的方法,學習的時候可以自行設定約束條件。

總結

在 Python 中,納什均衡可以通過解方程組、對均衡點的搜尋等方式來計算。

常用的方法是使用 scipy 庫中的 linprog() 函數,注意提前安裝 scipy 庫。

如果不使用第三方庫,則可以通過編寫演演算法來計算納什均衡,例如使用解方程組和對均衡點的搜尋。但這需要較複雜的數學知識和程式設計技巧,也就是要數學功底紮實。

到此這篇關於基於Python實現計算納什均衡的範例詳解的文章就介紹到這了,更多相關Python計算納什均衡內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com