锤子,剪刀,布游戏的研究
题目来自于kaggle。用AI模拟锤子,剪刀,布的游戏。下面是我的一些解法和尝试。
1. 随机数
最直观的解法。用随机数产生。代码如下:
import numpy as npdef random_agent (observation, configuration):return np.random.randint(1, 10000) % 3
这个解法得到了742.2分。
2. 基于对手会使用平均的策略
这个想法基于对手会比较平均的出锤子,剪刀,布,那样我就永远猜测对手下一次会出已经出过的里面的最少的那个。代码如下:
import numpy as npcounts = {}def random_agent (observation, configuration):if observation.step > 0:counts[observation.lastOpponentAction] = counts.get(observation.lastOpponentAction, 0) + 1count_of_zero = counts.get(0, 0)count_of_one = counts.get(1, 0)count_of_two = counts.get(2, 0)if count_of_zero == count_of_one and count_of_one == count_of_two:answer = np.random.randint(1, 10000) % 3elif count_of_zero <= count_of_one and count_of_zero <= count_of_two:answer = 1elif count_of_one <= count_of_two:answer = 2else:answer = 0return answer
这个结果并不好,只得了400分。看了一下结果,很明显被针对了,因为对手一直在出剪刀和布,我就一直猜对手下一次会出锤子,就一直出布,这样我不是平就是输。
3. 使用过去一段时间内取得分数最多的动作
这个想法是统计在过去的几个动作内取得得分最多的动作,然后继续使用该动作。比如赢了的动作记一分,输了记负一分,平了不计分。
import numpy as npcounts = {}
my_last_action = 0
cover_range = 7scores = {0:[], 1:[], 2:[]}def get_score(action):score_list = scores[action]if len(score_list) < cover_range:return sum(score_list)else:return sum(score_list[-1 * cover_range:])def random_agent (observation, configuration):global my_last_actionif observation.step > 0:if (observation.lastOpponentAction == 0 and my_last_action == 1) or (observation.lastOpponentAction == 1 and my_last_action == 2) or (observation.lastOpponentAction == 2 and my_last_action == 0):for i in range(0, 3):if i != my_last_action:scores[i].append(0)else:scores[i].append(1)elif (observation.lastOpponentAction == 1 and my_last_action == 0) or (observation.lastOpponentAction == 2 and my_last_action == 1) or (observation.lastOpponentAction == 0 and my_last_action == 2):for i in range(0, 3):if i != my_last_action:scores[i].append(0)else:scores[i].append(-1)else:for i in range(0, 3):scores[i].append(0)count_of_zero = get_score(0)count_of_one = get_score(1)count_of_two = get_score(2)if count_of_zero == count_of_one and count_of_one == count_of_two:my_last_action = np.random.randint(1, 10000) % 3elif count_of_zero >= count_of_one and count_of_zero >= count_of_two:my_last_action = 0elif count_of_one >= count_of_two:my_last_action = 1else:my_last_action = 2return my_last_action
但是这个结果也不好,最后得分一直在500分之下徘徊。目前得分最高的随机数算法。我决定自己写个小程序比较一下各个实现方案,调整一下参数。
这个问题一直没有什么好的进展,一直是随即策略的结果最好。后来看到一个人写的帖子,大概意思是这个问题如果是真的随机数,那么随机策略就是最好的策略。因为所有的其他策略对随机策略都是在赌运气。这个说法我觉得是正确的。即便考虑到我们使用的随机数是伪随机数,除非hack掉对方的随机策略,否则还是没有办法用ML等算法探测出对方的策略。
锤子,剪刀,布游戏的研究相关推荐
- 剪刀游戏c语言代码,C++编程锤子剪刀布游戏源代码
这个游戏的源代码很基础..一般学过程序的基本都看得懂...网上找的,自己稍作修改了 用的软件仍是Visual C++ 6.0 下面是源代码: #include #include #include vo ...
- Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
题目描述: 大家应该都会玩"锤子剪刀布"的游戏:现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...
- Basic Level 1018. 锤子剪刀布 (20)
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势, 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N ...
- 锤子剪刀布 (20)
链接:https://www.nowcoder.com/questionTerminal/79db907555c24b15a9c73f7f7d0e2471?toCommentId=3225314 来源 ...
- 1018 锤子剪刀布 (20 分)
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- 牛客网_PAT乙级1008_锤子剪刀布 (20)
题目 题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N( ...
- C语言满分代码:1018 锤子剪刀布 (20分)(解题报告)
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记 ...
- [PAT乙级]1018 锤子剪刀布
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- PAT——1018. 锤子剪刀布
大家应该都会玩"锤子剪刀布"的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入 ...
- 锤子剪刀布pat-1018
题目描述 大家应该都会玩"锤子剪刀布"的游戏: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入描述: 输入第1行给出正整数N(< ...
最新文章
- 什么是 JVM方法区
- openstack用rdo方式安装时遇到的问题
- 蓝桥杯_算法训练_ALGO10_集合运算
- University of Edinburgh
- git删除远程服务的文件夹
- java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...
- html5 indexeddb 排序,html5 – 在IndexedDB中,有没有办法进行排序复合查询?
- gwas snp 和_eQTL和GWAS还可以这样玩
- Redis入门到精通-姜海强-专题视频课程
- 华为云HCIE认证有多难?考试内容是什么?
- CNN之Xception Keras实现模型训练
- 2022《福布斯》富豪榜发布,FTX联合创始人Gary Wang上榜
- led大屏按实际尺寸设计画面_led显示屏尺寸大小要怎么算
- tao.opengl + C#
- 如何用eclipse读取.txt文件
- 如何把带图片html转为doc,教您一招:如何将图片里面的文字转成word格式并能编辑...
- 多种多样的Photoshop 的撤消命令
- 科三考试邢台市交安考试路线
- 中国下一个十年的大趋势
- mysql 全文检索_MySQL全文检索