程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用C#實現博弈論中的簡單合作博弈

使用C#實現博弈論中的簡單合作博弈

編輯: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
 }

對於我的策略,我在第一次合作時保持合作態度,在以後是否合作都根據對手和自己上一步的情況來確定是否合作
    具體代碼如下:
   

 1\public class CareySon : ActorBase
 2\\        \{
 3\            Dictionary<string, List<bool>> Record;//用於保存和對手以往的記錄
 4\            public Songyunjian()//構造函數,用於構造記錄
 5\\            
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved