之前帮别人写的田忌赛马博弈矩阵分析

import java.util.HashMap;
import java.util.Random;
import java.util.Scanner;/*** 田忌赛马 博弈矩阵 * @author txr**/
public class MyMatrix {/*** @param args*///赛马出场 顺序次数private int cnt;//赛马数量//private int horscnt;//申明 博弈矩阵private int[][] matrix = null;String[] rs = null;int count = 0;int[] fpGameArray = null; int[] spGameArray = null;public MyMatrix(int horse){/*String[] s = new String[cnt];s[0]="123";s[1]="132";s[2]="213";s[3]="231";s[4]="321";s[5]="312";String[] s1 = new String[cnt];*/if(horse<2){System.out.println("赛马的数量少于两匹,不能进行赛马出场顺序排序");return;}cnt = horse*(horse-1);matrix = new int[cnt][cnt];rs = new String[cnt];String[] s1 = new String[cnt];String ss = "";for(int n=1;n<=horse;n++){ss = ss + n;}System.out.println("排列组合");array(ss.toCharArray(),0,ss.length()-1);System.arraycopy(rs, 0, s1, 0, rs.length);for(int i=0;i<cnt;i++){for(int j=0;j<cnt;j++){int a = winPer(rs[i],s1[j]);matrix[i][j] = a;}}}//排列组合public void array(char[] c,int start,int end){String s1 = "";if(start == end){for(int i=0;i<=end;i++){s1 = s1 + c[i];System.out.print(c[i]);}rs[count] = s1;count++;System.out.println();}else{for(int i=start;i<=end;i++){char temp = c[start];c[start] = c[i];c[i] = temp;array(c,start+1,end);temp=c[start];c[start] = c[i];c[i]=temp;}}//return rs;}//齐王 和 田忌  一等马对一等马 1,二等马对二等马 1,三等马对三等马1,二等马对一等马 -1,三等马对二等马 -1,一局比赛之后的比赛结果public int winPer(String s1,String s2){int n = 0;char[] c1 = s1.toCharArray();char[] c2 = s2.toCharArray();for(int i=0;i<s1.length();i++){if(c1[i] <= c2[i])n = n + 1;elsen = n - 1;}return n;}public void print(){System.out.println("输出");System.out.print("    ");for(int i=0;i<cnt;i++){System.out.print("β["+(i+1)+ "] ");}System.out.println();for(int i=0;i<cnt;i++){System.out.print("α["+(i+1)+"]  ");for(int j=0;j<cnt;j++){System.out.print(matrix[i][j] + "    ");}System.out.println();}}public void pt(){System.out.println("请输入比赛的局数:");Scanner sc = new Scanner(System.in);int count = 0;int index = 0;count = sc.nextInt();fpGameArray = new int[count];spGameArray = new int[count];Boolean bl = false;do{System.out.println("请输入第一局α的下标");Scanner sc1 = new Scanner(System.in);//输入参数 0-5index = sc1.nextInt()-1;if(index>5){System.out.println("请输入1-6之间的数字");}elsebl = true; }while(!bl);System.out.print("局数 "+"   " );System.out.print("I   ");for(int i=1;i<=cnt;i++){System.out.print("β["+i+"] ");}System.out.print("  II   ");for(int i=1;i<=6;i++){System.out.print("α["+i+"] ");}System.out.println();int bmaxIndex = 0;int[] b = new int[cnt];int[] a = new int[cnt];for(int i=1;i<=count;i++){if(i != 1){index = bmaxIndex;}System.out.print(i+"   α["+ (index +1)+"] ");fpGameArray[i-1] = index;for(int j=0;j<cnt;j++){a[j] = a[j] + matrix[index][j];System.out.print(a[j]+"    ");}int amin = min(a);int aminIndex = 0;//int[] tempArray = null;int[] aminIndexArray =  findIndex(a,amin);if(aminIndexArray.length == 1){aminIndex  = aminIndexArray[0];}else if(aminIndexArray.length >1){int secondPerson = conditionThirdα(aminIndexArray,b);aminIndex = secondPerson;}System.out.print("β["+(aminIndex+1)+"] " );spGameArray[i-1] = aminIndex ;for(int k=0;k<6;k++){b[k] = b[k] + matrix[k][aminIndex];System.out.print(b[k]+"    ");}int[] bmaxIndexArray = findIndex(b,max(b));if(bmaxIndexArray.length == 1){bmaxIndex = bmaxIndexArray[0];}else{int firstPerson = conditionThirdβ(bmaxIndexArray,b);bmaxIndex = firstPerson;}System.out.println();}}//求出 该数字在矩阵中的坐标  纵坐标位置public int[] findIndex(int[] a,int j){int k = 0;for(int m=0;m<a.length;m++){if(a[m] == j){k++;}}int k1 = 0;int[] indexArray = new int[k];for(int m=0;m<a.length;m++){if(a[m] == j){indexArray[k1]=m;k1++;}}return indexArray;}//查找  局数n 罗马数字Ⅰ 下面 α右边最小的β值public int  min(int[] a){int[] at = new int[a.length];System.arraycopy(a, 0, at, 0, a.length);int temp = 0;for(int i=0;i<at.length;i++){for(int j=i+1;j<at.length;j++){if(at[i]>at[j]){temp = at [i];at[i] = at[j];at[j] = temp;}}}int min = at[0];return min;}//查找  局数n 罗马数字Ⅱ 下面 β右边最大的α值public int max(int[] b){int temp = 0;int[] bt = new int[b.length];System.arraycopy(b, 0, bt, 0, b.length);for(int i=0;i<bt.length;i++){for(int j=i+1;j<bt.length;j++){if(bt[i]>bt[j]){temp = bt [i];bt[i] = bt[j];bt[j] = temp;}}}int max = bt[bt.length-1];return max; }//局中人Ⅰ 选择后,局中人Ⅱ 有多个选择选择的时候的规则   public int conditionThirdα(int[] a,int[] b){int len = b.length;int alen = a.length;int[] bTemp = new int[len];int[] max = new int[alen];for(int i=0;i<alen;i++){System.arraycopy(b, 0, bTemp, 0, len);for(int k=0;k<6;k++){bTemp[k] = bTemp[k] + matrix[k][a[i]];}max[i] = max(bTemp);}int[] index = findIndex(max,min(max));int r = 0;if(index.length == 1){r = index[0];}else{Random rd=new Random();r = index[rd.nextInt(index.length)];}return r;}//局中人Ⅱ 选择后,局中人Ⅰ 有多个选择选择的时候的规则public int conditionThirdβ(int[] a,int[] b){int len = b.length;int alen = a.length;int[] bTemp = new int[len];int[] min = new int[alen];for(int i=0;i<alen;i++){System.arraycopy(b, 0, bTemp, 0, len);for(int k=0;k<6;k++){bTemp[k] = bTemp[k] + matrix[k][a[i]];}min[i] = min(bTemp);}int[] index = findIndex(min,max(min));int r = 0;if(index.length == 1){r = index[0];}else{Random rd = new Random();r = index[rd.nextInt(index.length)];}return r;}public void  proportion2(){HashMap<Integer,Double> map = new HashMap<Integer, Double>();for(int i=0;i<spGameArray.length;i++){double  cnt = 1;if(! map.containsKey(spGameArray[i])){map.put(spGameArray[i], cnt);for(int j=i+1;j<spGameArray.length;j++){if(spGameArray[i] == spGameArray[j]){cnt ++;}}map.put(spGameArray[i], cnt/spGameArray.length);}}Object[] c = map.keySet().toArray();for(int i=0;i<map.size();i++){System.out.println("β" +(Integer.valueOf(c[i].toString())+1)+"在局中人 Ⅱ所占比例 为"+map.get(c[i]));}}public void  proportion1(){HashMap<Integer,Double> map = new HashMap<Integer, Double>();for(int i=0;i<fpGameArray.length;i++){double  cnt = 1;if(! map.containsKey(fpGameArray[i])){map.put(fpGameArray[i], cnt);for(int j=i+1;j<fpGameArray.length;j++){if(fpGameArray[i] == fpGameArray[j]){cnt ++;}}map.put(fpGameArray[i], cnt/fpGameArray.length);}}Object[] c = map.keySet().toArray();for(int i=0;i<map.size();i++){System.out.println("α" +(Integer.valueOf(c[i].toString())+1)+"在局中人Ⅰ中 所占比例 为"+map.get(c[i]));}}public static void main(String[] args) {MyMatrix matrix = new MyMatrix(3);//matrix.cnt = 6;matrix.print();matrix.pt();matrix.proportion1();matrix.proportion2();}}

对你有帮助的话欢迎下载源码并给分,谢谢,毕竟我下载别人东西也需要分的
o(╥﹏╥)o

田忌赛马博弈矩阵分析相关推荐

  1. 博弈论(2):智猪博弈

    智猪博弈,可能很多人听过,在假设的猪圈里有一头大猪.一头小猪,当然我们默认这个猪是有智慧会思考的.猪圈的一头有猪食槽,另一头安装着控制猪食供应的按钮,按一下按钮会有10个单位的猪食进槽,但是谁按按钮就 ...

  2. 山东大学软件学院众智科学与网络化产业(网络、群体与市场)复习笔记

    文章目录 教材版本 第1章:概述 第2章:图论 第3章:强联系和弱联系 第4章:网络及其存在的环境 4.1 同质性 4.2 同质现象背后的机制:选择与社会影响 4.5 隔离的一种空间模型 第5章:正关 ...

  3. 博弈 习题-田忌赛马问题

    问题描述: 田忌赛马:田忌和齐王赛马,每人有上.中.下三个等级的马各一匹,上等马优于 中等马,中等马优于下等马,同一等级的马中齐王的马优于田忌的马.比赛共进行 三局,每匹马只能参加一局比赛,每局的胜者 ...

  4. [XSY] 简单的博弈题(博弈+dp+组合数+容斥)

    简单的博弈题 对于贪心的对手,显然用最大的一半和他最小的一半比较判断是否全胜.(这不就是田忌赛马吗) 对于随机的对手,先考虑暴力怎么做: void check(int x,int w){if(x> ...

  5. 矩阵分析 (二) 内积空间

    矩阵分析系统学习笔记 本系列所有文章来自东北大学韩志涛老师的矩阵分析课程学习笔记,系列如下: 矩阵分析 (一) 线性空间和线性变换 矩阵分析 (二) 内积空间 矩阵分析 (三) 矩阵的标准形 矩阵分析 ...

  6. 1.3 博弈结构和博弈的分类

    1.3.1 博弈中的博弈方 博弈方:独立决策.独立承担博弈结果的个人或组织 博弈规则面前博弈方之间平等,不因博弈方之间权利.地位的差异而改变 博弈方数量对博弈结果和分析有影响 根据博弈方数量分单人博弈 ...

  7. 田忌赛马java lms_【044】:田忌赛马

    相比于S赛和季中邀请赛,洲际赛更像是正餐过程中的下午茶.它的赛制相当独特,各大赛区被划分为数个大区,互相展开团体对抗.诸如田忌赛马之类的策略也成为了可能. 星际的SPL季后赛(抢七和排阵赛),国家杯( ...

  8. python田忌赛马

    一,简介 田忌赛马的故事大家都知道我就不展开说了,田忌能用同全面被碾压的马赢了齐威王(公子),我觉得这是十分具有智慧的.但是,如果说这里的条件改为:1,田忌的马比齐威王同等次的马弱一点但是比齐威王下一 ...

  9. POJ1067_取石子游戏_威佐夫博弈

    /* *State: 1067 Accepted 176K 16MS C++ 435B *题目大意: * 威佐夫博弈 *解题思路: * 略. */ #include <iostream> ...

  10. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

最新文章

  1. PHP更新数据库记录
  2. H3CSE 380笔记
  3. 做为 iOS 开发者 现在对未来迷茫怎么办?
  4. 精彩回顾 | Serverless Developer Meetup 12.04 深圳站
  5. Lync-用户-电话号码-更新
  6. java常见性能优化_十大最常见的Java性能问题
  7. flowable实战(十四) 关于流程设计器 act_de_mode的表详解
  8. java编程应该要的英语_java编程中常用英语单词
  9. 推荐30款最佳的数据可视化工具
  10. 3529: [Sdoi2014]数表 - BZOJ
  11. 尚学堂--面向对象2
  12. CoinFLEX的基本情况以及与Bakkt
  13. 形式语言与自动机第二课
  14. 如何用keil5打开keil4工程
  15. 鸿蒙系统微信双开,支持微信双开 老旗舰一加3/3T喜迎系统更新
  16. 实战用Python+Pygame+Kivy(Buildozer)+Ubuntu开发安卓android手机端apk游戏及踩坑分享
  17. java mybatis优点_mybatis优缺点是什么?有哪些优点和缺点?
  18. 计算机视觉实验四 人脸面部识别
  19. 双系统window更新后,开机引导错误,grub rescue修复
  20. 标签云打印/微信小程序蓝牙标签打印开放平台功能

热门文章

  1. 文件夹自动生成目录树(批处理)
  2. 武汉纺织大学计算机考试在哪个校区,武汉纺织大学校区有几个 地址是什么
  3. 关于正则表达式的补充(贪婪和懒惰)
  4. 复合高斯求积matlab代码,谁有复何求积公式和高斯求积公式在matlab中实现的代码...
  5. 【董天一】什么是IPFS(三)
  6. plist图片列表分割拆分器(修复输出图片错误的BUG)
  7. jquery ztree 皮肤(官网介绍)
  8. 苹果笔记本显卡性能测试软件,苹果Mac Pro性能测试:好厉害的“垃圾桶”
  9. 入职两个月的一些感受
  10. php mysql免安装版_资源共享:免安装版nginx+php+mysql+phpmyadmin+memcache开发环境包