问题定义


游戏规则:

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

我们的比赛中,每个玩家在每个回合提交两个数,最后的得分也即两个数字分别的得分之和。

难点分析:

这个游戏的难点在于他是一个多人决策游戏,如果采用强化学习作为策略,它的state和action都不是那么好去定义,而且很难去直接的判断定义的优劣,即使是在某一场游戏中表现的很好,也很难直接地认为是由于state和action定义的好。再一个就是它也很难像其他游戏那样可以预先去训练好一个通用的模型,因为每次一起参与游戏的玩家都不一样,很难有一个通用的model去应对所有的情况。

方法建模


在选择方法上面,我们选择了DQN(深度强化学习)来作为我们的策略,选择DQN的原因一个就是之前提到的state定义的问题,传统的Q Learning需要定义若干个离散的state,而DQN则可以将连续的state作为输入,还有一个原因也是我们两个之前接触这方面不多,也想通过这次机会对DQN有个更深入的了解。

DQN的伪代码和算法流程如下所示:

简单来说,就是输入state到定义的网络Q中,得到n个输出,n为定义的action的数目,每个输出代表了该action的一个得分(reward)。而通过游戏中实际选择的action和执行action后得到的next state,可以计算出该action对应的一个target reward,用这个target就可以更新网络参数,其实也就类似于Q Table的一个学习过程,只不过state连续化了。还一个不同就是DQN会存放一个记忆单元,每次从中采样出若干个样本来作为一个batch更新网络,而不仅仅是使用最近的这一次的数据。

在我们的这次任务中,state(即图中的s)为倒数十个黄金点组成的一维向量,而action(即图中的a)为提供的RLDemo里前7个action两两组合再加上第8个action,所以总共有22个action,每个action产生两个不一样的数。我们的实验中采用的网络模型比较简单,为三层的全连接网络,具体网络定义如下:

class DQN(nn.Module):

    def __init__(self, state_size, action_size, mid_dim=128):
super().__init__()
self.net = nn.Sequential(
nn.Linear(state_size, mid_dim),
nn.ReLU(inplace=True),
nn.Linear(mid_dim, mid_dim),
nn.ReLU(inplace=True),
nn.Linear(mid_dim, action_size)
) def forward(self, x):
return self.net(x)

我们之前也尝试过了更复杂一些的网络模型,如LSTM等,但似乎在我们自己测试的时候效果表现的并不好。由于也不确定更复杂的其他网络模型效果会不会更好,所以还是先采用了简单的网络结构。

在实验测试时,我们发现有一些固定策略的Bot会表现的特别好,于是我们后来有在代码里增加了一个策略比较简单的Bot,然后根据每个Bot历史得分情况,按照概率去选择,有些类似于“集成学习”的思想。

结果分析


在正式比赛前进行测试的时候,我们的Bot表现的其实非常好,当然也可能是测试的Bot中有许多类似于我们的action的简单Bot,以至于我们对最后的比赛还是比较有信心。

在第一轮的表现中,我们的Bot也能排到第三,而且领先其他组较多,因此第一轮后也没有对Bot进行调整。第二轮比赛中,我们的Bot则表现的有些可怜,一开始还能在中下游起起伏伏,到了后期直接变成倒数第一。分析原因,我们的state定义、action定义以及网络结构其实都并不是那么合理,但是由于测试时表现还不错,也就没有过多的去思考有没有更合理的方式。从比赛结果来看,我们的策略确实不够通用,可能只能再某一些特定的情况,才会有较好的表现。

如果每轮提交数字变为3个,我们的代码中action的定义需要做一些调整,因为每个action对应的数目还是固定的。

我的合作伙伴是一个代码能力非常强的人,我们大部分的代码是由他来完成具体编写的,我主要是在后期对代码进行了一些测试,以及完善了一些细节(包括概率选择部分代码等)。虽然比赛结果可能不是特别理想,但这次合作还是非常愉快的,也学到了不少东西。

ASE —— 第一次结对作业的更多相关文章

  1. ASE——第一次结对作业

    ASE--第一次结对作业 问题定义 很早就听说了MSRA的黄金点游戏,让大家写Bot来参加比赛看谁的AI比较聪明可以操盘割韭菜.深感ASE课程老师设计的任务太用心了,各种接口都准备好了,大家只用专注于 ...

  2. [BUAA软工]第一次结对作业

    [BUAA软工]结对作业 本次作业所属课程: 2019BUAA软件工程 本次作业要求: 结对项目 我在本课程的目标: 熟悉结对合作,为团队合作打下基础 本次作业的帮助:理解一个c++ 项目的开发历程 ...

  3. 【ASE高级软件工程】第一次结对作业

    问题定义 具体规则见:讲义.大致规则如下: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数 ...

  4. ASE高级软件工程 第一次结对作业

    黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...

  5. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  6. ASE —— 第二次结对作业

    目录 重现基线模型 基线模型原理 模型的优缺点 模型重现结果 提出改进 改进动机 新模型框架 评价合作伙伴 重现基线模型 基线模型原理 我们选用的的模型为DeepCS,接下来我将解释一下它的原理. 我 ...

  7. 第6次结对作业--郑锦伟&古维城

    第6次结对作业 在线英语学习平台客户端原型 1.结对成员 郑锦伟 2015034643034 古维城 2015034643033 2.原型设计工具实现-Photoshop 3.需求分析 使用NABCD ...

  8. [2019BUAA软件工程]结对作业

    Tips Link 作业链接 [2019BUAA软件工程]结对作业 GitHub地址 WordChain PSP表格 psp2.1   预估耗时(分钟) 实际耗时(分钟) Planning 计划 60 ...

  9. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...

随机推荐

  1. 123456---com.twoapp.xiaoxiaofeixingyuan---小小飞行员

    com.twoapp.xiaoxiaofeixingyuan---小小飞行员

  2. Django之model详解

    Django中的页面管理后台 Djano中自带admin后台管理模块,可以通过web页面去管理,有点想php-admin,使用步骤: 在项目中models.py 中创建数据库表 class useri ...

  3. Windows .net服务器系列 wmic命令使用示例--Examples of WMIC commands for Windows .NET SERVER Family

    1.0 Method execution: NICCONFIG (Win32_NetworkAdapterConfiguration) WMIC NICCONFIG WHERE Index=1 CAL ...

  4. linux 安装网易云音乐

    1.首先去官网下载最新的网易云 网易云音乐曾经推出官方Linux版本,提供的下载安装包有:deepin15(32位):http://s1.music.126.net/download/pc/net . ...

  5. 树莓派连接显示器后设置ssh服务开机自动开启

    进入命令行,然后执行: cd /boot sudo touch ssh sudo restart -r now 然后就重新启动了,重启好了会有依据提示. 然后可以输入ssh localhost进行一下 ...

  6. vs2012编译的程序不能在XP和2003下执行问题的解决方法

    问题如题,通过无数次百度和谷歌后,发现,微软已经确认这是一个缺陷,安装Vs2012的update 3的升级包就可以解决问题.同时,在分发包的地方,vcredist_x86.exe 随程序分发一份就可以 ...

  7. Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法

    Win + R 键运行 gpedit.msc 找到 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Defender 防病毒程序 右边双击 “关闭Win ...

  8. C#API解决自定义请求头下的跨域问题

    解决方法一: public class CrosHandler : DelegatingHandler { private const string Origin = "Origin&quo ...

  9. 2017年度好视频,吴恩达、李飞飞、Hinton、OpenAI、NIPS、CVPR、CS231n全都在

    我们经常被问:机器翻译迭代了好几轮,专业翻译的饭碗都端不稳了,字幕组到底还能做什么? 对于这个问题,我们自己感受最深,却又来不及解释,就已经边感受边做地冲出去了很远,摸爬滚打了一整年. 其实,现在看来 ...

  10. H5本地存储(转)

    H5本地存储  一.本地存储由来的背景         众所周知Html4时代Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的部分信息,那么只能借助于Cookie.但是 ...