最近在看一本關於博弈的書.有個比較簡單的合作不合作的博弈.挺有意思,大意是這樣的:
這個博弈是對現實生活中人與人之間是否合作的簡單抽象,具體內容和規則可以概括為“如果A與B都是合作態度,則是雙贏,每人得3分;如果A合作態度,B玩陰的,則A欺騙了B,取得了B本該得到的利益,則B得5分,A扣3分,反之亦然。最後如果A和B都不合作,則一拍兩散,兩個人都白費勁,則每人扣一分”在這個游戲裡,每個人都和除了自己之外的人合作100次,則得分最高的人勝利.
我抽象到C#代碼裡是用一個接口來規范參與者,讓他們實現自己的算法,並通過泛型列表保存和對手之間以往的合作記錄,並可以根據合作記錄來返回采取的策略..廢話不說接口代碼如下:
1 public interface ActorBase
2 {
3 bool Gamble(string OpponentName);//你的策略封裝在這個函數裡,true是合作false是不合作
4 string GetUniqueCode();//用於返回你的名字來讓對手確認你的身份
5 int Score { get; set; }//記錄總分
6 void AddRecord(string OpponentName,bool record); //用於添加以往對戰的記錄
7 }
對於我的策略,我在第一次合作時保持合作態度,在以後是否合作都根據對手和自己上一步的情況來確定是否合作
具體代碼如下: