ASE 第一次结对编程

问题定义

黄金点游戏源于经济学家Richar Thaler构思的在1997年伦敦金融时报进行了一次公开竞猜活动,该游戏有着一些很有意思的性质,因此老师将其作为第一次结对编程的题目。

问题定义

在黄金点游戏中,假设有N个玩家,游戏规则为,每人写一个或两个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值。提交的数字最靠近G(取绝对值)的玩家得到N分,离G最远的玩家得到-2分,其他玩家得0分。只有一个玩家参与时不得分。

问题难点

  • 游戏规则为赢者通吃,在每轮游戏中只有第一名才会得到奖励,且只有最后一名才会被扣除一定分数,如何想法设法冒险在每轮中预测最准,最接近黄金点非常难。
  • 游戏环境未知,而该游戏严重依赖于其他人的策略,同样的模型在不同人中进行比较,可能效果差异极大。
  • 该游戏中能利用的信息几乎只有过往黄金点的信息,可用信息不足,很难学到比较好的模型。
  • 在训练模型时基本只能和room0和room1中几个基于规则的bot对抗来调整,和实际比赛场景之间的Gap较大。
  • 短期收益和长期收益的分配,短期指在当前轮次的尽可能高分,长期指一段时间的尽可能高分。

方法建模

模型介绍和动机

核心算法我们采用了q learning,一是因为时间紧张,而且都身在国外,二是该任务的数据较少而在线反馈又有限且缓慢,如果想通过复杂的模型训出效果较好的模型需要花费大量的时间来进行比赛收集数据,因为还未入职,也就没有和其他同学相约比赛,于是我们就采用了未采用neural network的q learning方法,既简洁又防止因为数据稀疏而欠拟合。

q learning简而言之就是用一张q table来记录不同state下的不同action的价值,然后通过从环境中收集得到的相应动作的reward来更新q表。

具体算法如下:

流程图

具体改进

因为该任务没有label,所以我们很自然地采取了强化学习,因为我们的模型没有什么参数,所以最重要的就是如何设计action以及如何学到一个比较好的action distribution。

前者本次我们主要基于demo中给的8个action进行改进,首先我们更改了数值的大小和范围,因为原始action中的设计很不合理,之后我们发现最后黄金点会收敛到比较小的一个范围,因此我们设计了在各种不同的范围进行随机采样的方法,可以防止action产生的数值有较大的偏差。

后者因为只有半天时间,没时间训练,因此我们尝试拿到其他bot的预测数值,可以通过一次比赛,生成多组数据,来弥补时间和数据不足的问题。

结果分析

第一次比赛结果是第6名,我们主要根据黄金点变化图,改了各个action的数值采样范围和大小,并且新加了几个混合几个action的新的动作,在第二次比赛中取得了第4名,相对于投入的时间来说已经可以接受了,成绩的上升一是来自于我们的改进,二可能是其他同学在匆忙改进,对结果起到了反效果。

反思总结

1. 黄金点比赛的结果符合你们的预期吗?

第一轮游戏的结果不是很符合预期,后来我们改进了一下action,有了一定的提升,不过成绩不是很理想,有三方面原因:1. 训练迭代次数不足。2.模型表示能力不足。3.action的设计仍有待提高。

2. 在正式的比赛前,你们采取了怎样的策略来评价模型的好坏?

在room1和room0选一定时间查看获得的分数,因为没有入职的原因,没有找同学进行比赛。

3. 如果将每轮可提交的数字变成 3个,或者找更多的参赛者来参加比赛,你们的方法还适用吗?

设计思路是适用的,但是具体的方法也就是action的选取需要一些改变,可以进行扰动的思路和方法会变得更多。

4.  请评价合作伙伴的工作,评价方式请参考书中关于三明治方法的论述。并提出结对伙伴可以改进的地方。

我的合作伙伴是吴紫薇和吴雪晴,队友都太强了。

吴雪晴的代码能力和组织能力都很强,大家都很忙,但她还是很快地做出了demo,并写了很多改进。

吴紫薇能很好地根据已有地结果提出高效的改进,并指出比较有希望的方向,当然代码能力也非常强。

我觉得我们的结果一般问题主要还是时间上的紧张,而且都在不同的地方,有的人刚回国在倒时差,有的人在飞机上,有的人还在美国,并且我们都没有入职,对一些要求不是很明了,也没有很多和其他同学老师讨论的机会。

5. 一些想法。

感觉分数除以人数非常不合理,怎么可能多一个人就能线性地提高产出的成果呢,其实一个做出来的效果也不会比三个人做的差多少,希望能换成log或者同样的项目,别人拿10分,我们8,9分这样。

原文地址:https://www.cnblogs.com/wtxwtx/p/11565891.html

时间: 2024-10-02 14:36:24

ASE 第一次结对编程的相关文章

第一次结对编程

经过几周的软件工程的学习,开始了第一次结对编程的项目,这让我在知道队友之前心里很是忐忑,我先来说一说原因吧.因为我对编程基础不是很好,我就在想给我分配一个大神,就会感觉压力真的好大,如果给我分配一个比我还不行的那我们不就完蛋了.之后看到老师给我分配的是璐姐,或多或少还是有压力的,但是在团队合作的过程当中发现我的顾虑是多余的.在我遇到问题的时候,璐姐还是会抽出自己的时间给我讲一些有关题目的方法,非常仔细认真,我也知道她要考研,能抽出时间来给我讲真的很感动.真心是一个中国好队友.在编程的过程中我们是

20165104-Java第一次结对编程练习

Java第一次结对编程练习 学习笔记 中缀表达式转换为后缀表达式 如果遇到数字,我们就直接将其输出. 如果遇到非数字时,若栈为空或者该符号为左括号或者栈顶元素为括号,直接入栈. 如果遇到一个右括号,持续出栈并输出符号,直到栈顶元素为左括号,然后将左括号出栈(注意,左括号只出栈,不输出),右括号不入栈. 如果遇到运算符号且栈非空,查看栈顶元素,如果栈顶元素的运算优先级大于或者等于该运算符号,则持续出栈,直到栈顶元素优先级小于该运算符.最后将该元素入栈. 如果我们读到了输入的末尾,则将栈中所有元素依

ASE高级软件工程 第一次结对编程

问题定义 问题的定义 ? 在邹欣老师的博客有游戏介绍:创新的时机 – 黄金点游戏 ? N个玩家,每人写一个或两个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值.提交的数字最靠近G(取绝对值)的玩家得到N分,离G最远的玩家得到-2分,其他玩家得0分.只有一个玩家参与时不得分. 问题的难点 很难知道其他人的策略,只能通过黄金点的历史值进行一定的估计,如何利用信息是一个难点. 首先从游戏规则上来看

软件工程(2018)结对编程第一次作业

第一次结对编程作业 代码审查表 功能模块名称 表达式的括号匹配 审查人 常远 审查日期 2018.4.4 代码名称 表达式的括号匹配 代码作者 郭靖 文件结构 重要性       审查项 结论                  头文件和定义文件的名称是否合理? 是 头文件和定义文件的目录结构是否合理? 是 版权和版本声明是否完整? 否 重要 头文件是否使用了 ifndef/define/endif 预处理块? 是 头文件中是否只存放"声明"而不存放"定义" 是 程序

pair work结对编程(张艺 杨伊)

一.结对编程人员: 张艺(学号后三位:185) 杨伊(学号后三位:151) 二.这是我们工作的样子:(图片) 三.结对编程优缺点:  优点:  1.结对编程时间紧密,在一定程度上可以督促双方学习,提高效率. 2.Coder在coding过程中会遇到一些细小的问题,而reviewer可以及时指出错误,并给予解决方案进行讨论.  3.遇到问题时,两个人一起讨论,并补充对方没有想到的地方,是完善程序最好的方式.  缺点:  在编程过程中,很长时间是coder在coding的过程中想思路,大概这也是每个

结对编程一二事

一 结队编程过程 作为一次作业,我们进行了这次结对编程.这是我们第一次进行结队编程,感觉还是比较特别的. 这次结队编程的目的是完成微信抢票系统中的查票功能,由张诗文主写,我在旁边进行辅助和帮忙,也就是在旁边协助张诗文一起完成coding.整个过程还是比较流畅的,由于对项目的了解,加之两人之间相互帮助,当他思维阻塞时,我会帮助他疏导思想,当他出现bug时,我也能及时发现.最重要的是这个过程中,他会一直与我进行交流,这就相当于用两人之力共同完成一项任务. 二 遇到的问题 由于是第一次结对编程,而且还

第三次作业结对编程

一.结对编程成员 1.领航员:闵际达 2.驾驶员:郦铸辉 二.黄金点游戏游戏规则 N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值.提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分.玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动. 三.代码上传 代码已上传至Coding.net,地址为:https://coding.

结对编程项目(除附加题)开发过程

结对编程项目(除附加题)开发过程 结对同伴:李云涛 一.照片 结对同伴在家,等回校后补上. 二.结对编程评价 优点: 1.两个人的编程思想.算法.代码风格可以互相借鉴和学习,对于两人的编程水平的提高都很有帮助. 2.两个人可以分工写不同的相对独立的模块,加快开发的进度. 3.自己程序的bug可能自己怎么找都找不到,而自己的同伴就能很快找到. 缺点: 有些工作必须得两人在一起才能进行,而两人都空闲的时间不是太多,很多时候需要通过线上进行交流,导致工作被耽搁. 我自己的优点:做事认真.有恒心.有学习

结对作业——四则运算 Part3. 对于结对编程的总结与思考

结对作业--四则运算 Part3. 对于结对编程的总结与思考 PB15061303 刘梓轩PB16061489 艾寅中 GITHUB 地址 戳这里 目录 Part 1. Core代码编写部分 Part 2. 封装与对接相关问题 Part 3. 对于结对编程的总结与思考 关于结对 View:(From 艾中) 不得不说,结对编程给笔者带来了一次全新的编程体验.就领航员与驾驶员的分工而言,刘承担了生成和计算的大部分任务,笔者(艾)负责了显示和输出部分的函数. 首先我作为领航员的时候,实际上是有点懵的