日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python博弈论代码_使用 40 多行的 Python 代码实现一个简单的演化过程

發布時間:2024/4/18 python 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python博弈论代码_使用 40 多行的 Python 代码实现一个简单的演化过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

在納米比亞的 PyCon 會議上,我發表了一篇名為 《使用 Python 解決“升級版的剪刀石頭布”》(Rock, Paper, Scissors, Lizard, Spock with Python )的文章。在這篇文章中,介紹到用Nashpy 來計算兩個玩家的平衡是很簡單的事情,但是其中只是涉及了一點點演化穩定性的內容。 在這篇博文中,我將闡述一下如何在 Python + Numpy 環境下,使用大概 40 行代碼來建立一個簡單的演化過程模型。

我想講的第一個游戲是“旅行者困境”問題。這里給出一個簡化的版本:

我不想過多的講解這個游戲的數學模型如何建立。在建模后,我們只需要知道一件事情,那就是我們有兩個玩家:

行玩家:選擇我們處于哪一行;

列玩家:選擇我們處于哪一列。

如果,行玩家選擇的是第二行,列玩家選擇的是第三列,則得分為:5,1。即行玩家得 5 分,而列玩家得 1 分。這個時候列玩家可能會傾向于選擇第一列,這樣的話得分就是 0,4 了。

下面,我們可以使用 Nashpy 來計算這個游戲的平衡位置。

我們可以看到,納什平衡是由兩個向量組成的單個集合,向量表明了玩家應該如何玩這個游戲:

行玩家應該按照 [1,0,0] 來玩

列玩家也應該按照 [1,0,0] 來玩

在這里,[1,0,0] 是概率向量,表示一個玩家的游戲策略的概率。所以,在這種情況下,兩位玩家都應該選擇第一個選擇,這樣的話得分為 2,2。這位置稱為納什平衡,因為所有玩家都不能偏離這個點(一旦偏離,就可能得到比別人低的分數)。

我們可以對“升級版的剪刀石頭布”這個游戲進行同樣的建模,其數學模型如下:

接下來,使用如下的程序計算其納什平衡:

我們可以看到每個位置都是 1/5 的概率,所以兩位玩家可以隨意的選擇。這完全可以憑借個人直覺,因為當兩位玩家都這么做的時候,實際上就是隨機不可預測的。

所有結果都很合理。納什平衡是博弈論中一個很有用且很重要的概念,但是當我們以演化的視角看這些游戲的時候,會發生什么呢?

如果我們有一大群人,并且這群人總是會選擇與他們人數相同的多種選擇。他們每個都和另外一大群人玩這個游戲,如果他們比對手得分要高,他們繼續。反之則他們的對手繼續。

下面是我們使用 Python 和 Numpy 來進行模擬的代碼。

首先,得到一個隨機的人數:

然后開始游戲:

接下來進行變化(將那些獲勝的策略進行匯總):

最后將上面的這些進行匯總,給定一個游戲的迭代次數,重復的運行 mutate 函數:

下面讓我們看看最后畫出來的曲線圖(點擊這里下載?Jupyter notebook):

首先我們看看玩“旅行者困境”這個游戲時會發生什么(回顧上面講的納什平衡,兩位玩家應該選擇第一種策略):

我們可以看到,人群中的玩家很快都選擇了第一種策略。當然這也可能是我們使用了特定的隨機數種子所引起的人為結果。下面的圖片展示了使用不同的隨機數種子所得到的結果圖片。

他們的初始條件皆不相同但是結果相同:人群中的人們使用都是納什平衡策略。

接下來的是比較酷的一部分了,讓我們看看在“升級版的剪刀石頭布”的曲線圖中會發生了什么:

我們可以看到結果不是很穩定。下面的圖片顯示了不同隨機數種子的結果:

關于兩者穩定性的差異有個直觀的解釋:在“旅行者困境”游戲中納什平衡策略是非常強的:如果每個人都按照納什平衡來決策,我們就沒法作出改變,我們只能跟別人一樣。在“升級版的剪刀石頭布”游戲中:如果每個人都是隨機的玩,或者所謂的人群是由玩家或者策略進行隨機的組合,你就很有可能碰見那些戰勝你的人。

從這篇文章中,我們有兩點需要注意:

這只是使用 Python 模擬一個簡單的演化過程。

人數的動態變化為這個游戲添加了一個迷人的維度。我在這里使用的演化過程非常的簡單,一般情況都是使用馬爾科夫隨機過程來研究這類問題。你也可以使用 Python 的庫來研究這類“囚徒困境”問題,使用的庫的鏈接為:?axelrod.readthedocs.io/en/latest/tutorials/getting_started/moran.html

英文原文:http://vknight.org/unpeudemath/mathematics/2017/03/08/simple-evolutionary-process.html

譯者:無

總結

以上是生活随笔為你收集整理的python博弈论代码_使用 40 多行的 Python 代码实现一个简单的演化过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。