博弈论中的简单合作博弈 C#实现
最近在看一本关于博弈的书.有个比较简单的合作不合作的博弈.挺有意思大意是这样的:这个博弈是对现实生活中人与人之间是否合作的简单抽象具体内容和规则可以概括为“如果A与B都是合作态度则是双赢每人得3分如果A合作态度B玩阴的则A欺骗了B取得了B本该得到的利益则B得5分A扣3分反之亦然。最后如果A和B都不合作则一拍两散两个人都白费劲则每人扣一分”在这个游戏里每个人都和除了自己之外的人合作100次则得分最高的人胜利.我抽象到C#代码里是用一个接口来规范参与者让他们实现自己的算法,并通过泛型列表保存和对手之间以往的合作记录并可以根据合作记录来返回采取的策略..废话不说接口代码如下:Code对于我的策略我在第一次合作时保持合作态度在以后是否合作都根据对手和自己上一步的情况来确定是否合作具体代码如下:1public class CareySon : ActorBase2{3Dictionarystring, Listbool Record;//用于保存和对手以往的记录4public Songyunjian()//构造函数,用于构造记录5{6Record new Dictionarystring, Listbool();7}8public string GetUniqueCode() //返回你的唯一标识9{10return CareySon;11}12public void AddRecord(string OpponentName, bool record)13{14if (!Record.ContainsKey(OpponentName))//如果没合作过创建合作记录15{16Listbool l new Listbool();17l.Add(record);18Record.Add(OpponentName, l);19}20else21{22Record[OpponentName].Add(record);//利用索引器把记录添加到list里23}24}25public bool Gamble(string name)26{27if (!Record.ContainsKey(name))//如果是第一次合作则保持合作态度28{29return true;30}31else32{33Listbool t Record[name];34if (t.Count 1)35{36if (t[t.Count - 1])//如果最后一次是合作则返回合作37{38return true;39}40else//否则返回不合作41{42return false;43}44}45return true;464748}49}50public int Score51{52get { return _score; }53set{_scorevalue;}54}55public int _score0;//用于记录每个人的分数5657}下面是一个我加进去的随机选手即合作和不合作的态势是随机的,这里只展示Gamble()方法其他同1 public bool Gamble(string name)2 {3 Random rdnew Random();4 int ird.Next(2);5 if (i 1)6 {7 return true;8 }9 return false;10 }