从囚徒困境到世风日下
生活随笔
收集整理的這篇文章主要介紹了
从囚徒困境到世风日下
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在每個時代我們都會聽到人們感嘆世風日下,人心不古。這到底是對舊時代的幻覺還是一種真相呢?我們今天就來寫個小程序,證明世風日下是的的確確在發生的。
我們先從博弈論的囚徒困境說起,兩個囚犯面臨這樣的問題,要么同時咬緊牙關一起抗拒從嚴回家過年,或者坦白從寬刑期打折。但是如果一個人坦白了,而沒有坦白的那個人就得牢底坐穿。參考以下表格可以得到結論:
| 無罪 / 無罪 | 5年 / 1年 |
| 1年 / 5年 | 2年 / 2年 |
道德問題的本質是信任問題,上古時期民風淳樸,人與人之間都相信相信的力量,所以能相信一起做出收益最大的決策(至于兩個淳樸的人為什么會坐牢?這...)。但信任這事,吃了幾次虧之后,戒備心開始提升,做決策必須考慮對方不按套路出牌怎么辦?如果這位大兄弟被社會多教育幾次,他就會發現坦白是最優解,畢竟無罪釋放需要對手合作,概率太低。
大多數人都是理性的,在受到懲罰后會調整自己的反應決策機制。我們可以構造一個模型,假設一個人初始是向善的,基本是信任對方的,但是每次遭受背叛后,他的信任值就會下降。而且人們一般對壞的事情印象深刻,所以自己行善被別人坑后,人品值下降會比遇到好人好事的上升更多一點。
為了模擬這種情況,寫了一段程序模擬了一下:
import randomdef init(users, n):for i in range(n):users[i] = 51 # 設置每個用戶的初始人品值為51,最小為0,最大100。def do_choice(users, i):r = random.randint(0, 100)return 1 if r < users[i] else 0 # 人品值越高,做出雙贏選擇1的概率更大。def update_rp(users, i, v):users[i] += vif users[i] > 100:users[i] = 100if users[i] < 0:users[i] = 0def gamble(users, rounds):n = len(users)i = 0while i < rounds:u1 = random.randint(0, n - 1) # 隨機兩個用戶u2 = random.randint(0, n - 1)if u1 == u2:continuec1 = do_choice(users, u1)c2 = do_choice(users, u2)if (c1 == 1) and (c2 == 1): # 最優選擇,雙方人品值加1。update_rp(users, u1, 1)update_rp(users, u2, 1)elif (c1 == 1) and (c2 == 0): # 被用戶2坑了,用戶1變壞,人品值減1.5。壞事讓人印象更深刻!update_rp(users, u1, -1.5)elif (c2 == 1) and (c1 == 0):update_rp(users, u2, -1.5)i += 1def display_result(users):good, bad = 0, 0for v in users.values():if v >= 50:good += 1else:bad += 1print('good/bad: ' + str(good) + '/' + str(bad))def simulation(n, rounds):users = {}init(users, n)gamble(users, rounds)display_result(users)if __name__ == '__main__':simulation(100, 300)simulation(100, 1000)simulation(100, 5000)結果是迭代次數越多,好人越少。參考輸出如下:
good/bad: 62/38 good/bad: 28/72 good/bad: 5/95那為什么這個世界不會全是壞人組成呢?我猜原因跟電腦一樣,時間廠了系統卡得不能用總有人會忍不住格式化一下。
總結
以上是生活随笔為你收集整理的从囚徒困境到世风日下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用API进行FTP文件上传和下载
- 下一篇: 如何自己编译 skychart (Car