黄金点游戏结对编程

结对编程博客

结对编程博客

github地址以及作业要求

Github地址

作业要求

项目简介以及游戏规则

通过结对编程实现黄金点游戏的BOT,规则如下:

  1. 假设有M个玩家,每轮每个玩家提供(0,100)区间内的两个有理数,系统计算所有2*M个有理数的平均值的0.618作为本局的黄金点
  2. 提交离黄金点最近数字的Bot +12分,最远的倒扣2分
  3. 比赛分为两个半场,每个半场分别进行400回合,中场1h调整bot时间

预计PSP表格

PSP阶段预计时间
计划讨论3h
实际开发V1.01h
测试讨论1h
再次开发V2.01h

代码设计以及思路

计划讨论的基本思路定在一下几点:

  1. 捣乱可以带来巨大的波动,不确定性,以及受益期望,根据对以往比赛数据分析,捣乱队获得收益非常高,通过等待大盘稳定时候提交一个很大的数,并且提交比黄金点高 80*0.618/24的数就很有机会得分。
  2. 当存在很多队伍捣乱并且偏激进的时候,大盘的波动会非常混乱,并且敌手捣乱的模型并不容易预测,于是选择了更激进的策略,只要上两轮黄金点距离很接近即可进行捣乱。
  3. 动态调整一些参数的大小,参数大小表示捣乱激进程度

因此代码的设计非常简单,很容易design by contract,具体函数逻辑如下表所示

函数名称函数作用
adjust_paras调整lambda以及threshold
adjust_lambda根据上一句结果动态调整
adjust_threshold捣乱人数越多,输出黄金点越大
same_time_trouble输出上一句有多少捣乱人数
other_troble统计多少个捣乱人数

因此不需要考虑 Information Hiding , Interface Design , Loose Coupling的问题,逻辑非常简单。也不需要UML图,调用关系在100行代码里非常清晰

结对模式,代码规范与异常处理

我们采取了传统的领航员与驾驶员模式,一人写几个函数去解决问题,因此代码规范保证合理的变量以及函数命名即可。因为代码规定所有捣乱策略从15轮以后进行,因此基本不会有错误的情况。

结对模式的优点:可以加快debug,coding的速度,在讨论方案的时候可以极大的拓展思路,也可以更加代码,总会保持一个人处于非常专注的状态。

缺点:由于是小的项目,结对伙伴非常容易相处,暂时没发现缺点。

开发时候没有机会留下照片

实际使用时间PSP表格

PSP各个阶段时间
讨论计划2h
开发V1.01.5h
测试与讨论1h
开发V2.01.5h
测试0.5h

其他收获与总结

在这个比赛中我们获得了第三名的成绩,证明打一个逆向思维的计划是有一定作用的,但是对lambda参数的调整并没有做好,当时在估计到捣乱的队伍会有很多,于是策略大多针对捣乱敌手开发,但事实发现主打捣乱的队伍并没有激进提交类似80+的数字。

在结对编程中发现两人互相配合学习coding确实比一个人做在思路,产出,效果上好太多了。并且可以进一步锻炼与他人合作的能力。

posted @ 2018-10-21 21:55  大海的味道*  阅读(203)  评论(2编辑  收藏  举报