石头剪刀布自学习人工智能

前言

先点关注,不迷路

前一段灵光一现,想出了这个算法
不知道以前有没有人写过(应该是有的)
不过我觉得我还是可以大概说一下我的想法
还是那句话,讲得不好勿喷~

代码详解

思路

既然是自学习,那肯定是得学习的
石头剪刀布这个游戏本身可能是没什么可学的,随机数就可以获得不错的胜率
由于胜负是由两个人的决策决定的,只能通过随机+猜对手的决策来进行决策,不存在永远获胜的方案
因此可以通过学习对手通常的决策或是偏好来提高胜率

另外,石头剪刀布可以抽象成0, 1, 2或1, 2, 3
本人这里用的1, 2, 3(没错,很脏)

存储结构

存储单元:每个存储单元有三个数据组成a1, a2, a3, n分别表示对手出1, 2, 3, 总数的个数

//memory point
struct memPoint{int _list[4];int _all;
};

这里用all(n)而不用概率是因为要避免小数
每个的概率就是ai / all

整个存储结构就由很多个存储单元组成
至于多少个,各位可以按照自己的想法自己设计
我这里用了3*3的,表示上一轮我和对手的状态

//0~3->4
memPoint _mem[4][4];//last turn status->foe decision

所以整个存储结构的意思就是说在上回合的情况下,对手出1,2,3的概率

因为大多数人都是根据上一轮的数据来决定这一轮的决策,这样就可以对一般人有很好的效果了
也可以根据对手的算法来设计自己的存储结构
但注意存储深度越大,学习时间越长

决策

前文说过,没有永远获胜的方案
进行了学习对手的偏好优化后,仍然需要随机数来决策
但由于知道对手当前出i的概率,我们可以针对对手的决策来进行决策
所以在这里,随机数是模拟对手的选择

随机数Mod all+1, 得出一个[1, all] 的数 k

1<=k<=a1 :a1/n的概率,这种情况下,我们认为对手会出1
a1<k<=a1+a2:a2/n的概率,这种情况下,我们认为对手会出2
a1+a2<k<=all:a3/n的概率,这种情况下,我们认为对手会出3

然后模拟出对手的决策,我们就可以出能赢他(她,它)的决策

void Decision(int one, int two, int &res){int maxNum=_mem[one][two]._all;int choose=rand() % maxNum + 1;int add=0;if(choose<=_mem[one][two]._list[1]+add){res=2;//cout<<"foe may choose 1, us choose 2"<<endl;return;}add+=_mem[one][two]._list[1];if(choose<=_mem[one][two]._list[2]+add){res=3;//cout<<"foe may choose 2, us choose 3"<<endl; return;}res=1;//cout<<"foe may choose 3, us choose 1"<<endl;return;
}

这边注意一点初值问题,因为随机数要Mod all, 所以all!=0
但是开始第一局每种决策概率应该相等
又考虑到不能对以后的学习产生太大的影响
所以all=3, ai=1

void GenMem(){for(int i=0; i<=MAXN; i++){for(int m=0; m<=MAXN; m++){for(int k=1; k<=MAXN; k++){_mem[i][m]._list[k]=1;} _mem[i][m]._all=3;} }
}

顺便提一句,第一局的决策可以存在[0][0]里面,因为开局人也是有偏好的
另外,不要忘记在对手做出决策后存储在记忆数组里哦~

结尾

好了,差不多说完了
代码我到时候会发粉丝专栏
如果有 错误/优化/疑问 欢迎提出
WeChat:wxid_ffe28hxx677f32
(其实是我想认识大佬)

注解

1.本文中all和n是同一个东西,推到中用到的是n,代码中写的是all
2.Mod即%,模数不能等于零(因为结果小于模数)
——by于斯为盛

石头剪刀布自学习人工智能相关推荐

  1. AFLA深度学习外观检测自学习人工智能软件

    ALFA基于机器视觉的智能机器学习算法,并且已经通过现场测试. 优化和可靠的验证.目前成功的应用是在医药. 汽车. 纺织. 印刷.新能源电池, 手机 和制表行业.可实现纺织品外观检测,五金加工件检测, ...

  2. “未卜先知”、“自学成才”:GANs奇思妙想TOP10

    还记得<射雕英雄传>中老顽童发明的"左右互搏术"吗? 表面上看,左手与右手互为敌手,斗得不可开交.实际上,老顽童却凭借此练就了一门绝世武功. 这样的故事似乎只能发生在小 ...

  3. 值得关注的医疗 AI 公司(待续)

    医疗成像 Clearview Diagnostics 是一家开发辅助医生诊断疾病的工具的 AI 软件公司.该公司最初的重点是乳腺癌. Butterfly Network 是一家医疗成像技术公司,该公司 ...

  4. GANs奇思妙想TOP10榜单

    本文经大数据文摘公众号授权转载. 还记得<射雕英雄传>中老顽童发明的"左右互搏术"吗? 表面上看,左手与右手互为敌手,斗得不可开交.实际上,老顽童却凭借此练就了一门绝世 ...

  5. 从1亿美元到10亿美元,博世/大陆看到的自动驾驶量产技术趋势

    从ADAS到自动驾驶,基于数据驱动的开发模式已经是明确趋势.但如何降低开发成本,仍然是最大的障碍之一. 本周一,以色列汽车人工智能公司Autobrains宣布,获得1.01亿美元的C轮融资,来自克诺尔 ...

  6. koa2微信公众号开发及JS-SDK的使用

    微信公众号项目介绍 当前只对实现思路进行说明,不作基础介绍!详细信息查看微信官方文档及git地址! 实现功能 新关注自动回复: 被动回复: 推送消息: 自定义菜单: js-sdk使用: 网页授权获取用 ...

  7. 面向物联网的 23 个开源软件项目

    物联网市场呈现碎片化.无定形.不断变化的特点,其性质需要不仅仅像平常那样关注互操作性.开源在这方面表现不俗也就不足为奇了--客户犹豫不决,不敢将物联网的未来寄托在一种可能销声匿迹或变得难以定制.互联的 ...

  8. TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:6~11

    原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[Apach ...

  9. 阿里云发布智能语音自学习平台,零基础训练人工智能模型

    摘要: 业务人员甚至门卫大爷也能训练人工智能?曾经只出现科幻电影中的一幕真的发生了.7月18日,阿里巴巴机器智能技术实验室宣布在阿里云正式发布智能语音自学习平台公有云产品,突破性地提供一键式语音智能自 ...

最新文章

  1. SC-A-LOAM:在A-LOAM中加入回环检测
  2. 无需训练RNN或生成模型,我写了一个AI来讲故事
  3. APP启动速度是门面,如何做到极致优化?
  4. CVPR 2019 ATOM:《ATOM: Accurate Tracking by Overlap Maximization》论文笔记
  5. jQuery.ready in CRM Fiori Opportunity Application
  6. WTM 3.5发布,VUE来了!
  7. 胡椒“辣”味是怎样炼成的
  8. Subversion服务器搭建 (安装步骤)
  9. C++ C++基础语法入门总结(二)引用-内联函数-C++11新特性
  10. oracle插入百万测试,Oracle中插入大量测试数据
  11. 新浪微博Emoji表情解析
  12. CAPL编程语言简介
  13. Spring Boot微服务API网关
  14. 信息安全-网络安全审计技术原理与应用
  15. 拿什么拯救你,我的校园网——校园网优化之单线多拨
  16. 使用 Springboot websocket 实现聊天室
  17. 教学案例一python初探
  18. 6-8.4V自动升降压5V 9V 12V PD快充解决方案 TYPE-C快充
  19. 关于laravel下composer安装excel插件
  20. 删库跑路、“投毒”、改协议,开源有哪几大红线千万不能踩?

热门文章

  1. WIN2003系统安全防护
  2. 201909-1 小明种苹果
  3. windows 通过ftp更新系统
  4. 从绿叶中窜出来的一朵朵红花
  5. packages.xml分析
  6. 四川计算机学校在哪,四川省分离经济计算机学校位置在哪儿
  7. jquery对象PHP转换,JavaScript_jQuery对象与DOM对象之间的相互转换,1、jQuery对象转换成DOM对象 jQue - phpStudy...
  8. 虚幻4修改引擎渲染管线解析【第一卷】通过添加自定义ShadingModle实现卡通着色来熟悉渲染管线
  9. [Linux Audio Driver] SM6350 平台外部CODEC WCD9370 tinyalsa 命令总结
  10. 【zTree小贴士】树节点的图标不显示