使用C#实现博弈论中的简单合作博弈
最近在看一本关于博弈的书.有个比较简单的合作不合作的博弈.挺有意思,大意是这样的:
这个博弈是对现实生活中人与人之间是否合作的简单抽象,具体内容和规则可以概括为“如果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 }
对于我的策略,我在第一次合作时保持合作态度,在以后是否合作都根据对手和自己上一步的情况来确定是否合作
具体代码如下:
2 {
3 Dictionary<string, List<bool>> Record;//用于保存和对手以往的记录
4 public Songyunjian()//构造函数,用于构造记录
5
补充:软件开发 , C# ,