作业要求及项目源码

作业要求:第二周作业 - 结对编程总结
项目源码:黄金点游戏

PSP表格估计项目时间和实际时间

(由于我们没有预估时间,所以只填写了实际时间,现在再事后诸葛亮一样“估计”时间我觉得也无法做到客观)

阶段 预估时间(分钟) 实际时间(分钟)
计划:明确需求和其他因素,估计以下项目需要多少时间 N/A 0
开发:包含下面8项 N/A 700
—— 需求分析 N/A 20
—— 生成设计文档 N/A 30
—— 设计复审 N/A 20
—— 代码规范 N/A 10
—— 具体设计 N/A 20
—— 具体编码 N/A 240
—— 代码复审 N/A 120
—— 测试 N/A 240
报告 N/A 20
—— 测试报告 N/A 0
—— 计算工作量 N/A 0
—— 事后总结 N/A 200
合计(分钟) N/A 900

结对编程中的接口设计

由于我们没有设计图形界面,所以也没有涉及Information Hiding, Interface Design。

重要模块接口的设计与实现过程

我们的程序很简单粗暴,核心就是利用统计学的ARIMA模型拟合前25个点,然后预测下一个点。
主要函数依次实现了以下功能:

  • def data_transfer(history);把历史数据预处理一下,离上一个黄金点近的放在左边,离黄金点远的放在右边,这么做是为了防止有些队伍随机提交数字,而且打乱随机数和真实预测数据的顺序(但结果表明似乎并没有队伍提交位置顺序不同的随机数)。
  • def my_ARIMA(new_history, aaa);对于历史数据中的黄金点,利用arima(p,d,q)去拟合,且令d=1,预测下一个黄金点
  • def detect_random(history);对于与处理过的历史数据,判断有没有随机数,且估计出随机数中的大数的期望和概率(如一个组以0.2的概率提交99)
  • def predict(info_array);利用随机数信息和ARIMA模型的预测,预测下一个黄金点的值GD,然后以0.3的概率提交一个70,随机项记为RM,另一个提交x,x满足(GD22+RM+x)/24 0.618 = x,(22为其他玩家的数目)

但事实上我们没有注意这个游戏的均值其实是稳定的,因此系数不应该是0.618,而应该是一个动态的数,这个失误让我们第一轮的预测值基本都比真实值低不少。第二轮把系数改为0.997,效果有所改善。我们在测试集上修复完bug就取得了第一名,因此就没有注意到这个问题,比赛结束才发现0.618其实是一个极其关键而且需要动态调整的系数。

Design by Contract

契约式编程的核心思想是编程前每一段代码的功能被确定,他有权利和义务,权利就是可以用assert等语句确定程序等输入是合理的,而given一个合理的输入,程序要能产生正确的输出。assert语句就是contract的体现。
在我们的项目中,我负责了arima部分,队友负责了数据预处理和根据ARIMA模型的值完成预测的工作,因此我们的接口很简单,也没有涉及契约式编程的内容

程序的代码规范、设计规范。程序中的异常处理

如上所述,我和队友的交互就是他给我一个列表,我给他一个ARIMA模型的预测值,因此代码设计大部分是割裂的,我们只统一了一下交互输入和输出的具体格式(list),另外一个跟规范稍微有一点点关系的就是indent用tab,没有用4个空格,用这个是因为我们两个人的python IDE都是用tab,且tab都是4个空格长度。

程序会吐出大量的warning,拟合ARIMA模型可能会出现不收敛的问题,对此我们silence了所有warning,如果ARIMA模型拟合不收敛会尝试下一组(p, q)值。

结对过程

10.12-13:讨论涉及算法
10.14-10.15:实现算法
10.15-10.16:测试,修复bug

合作过程

我们没有选择结对编程,只是一人完成一半工作,没有人充当领航员的角色。
我和同伴的优缺点:

  • 同伴的优点:
    -- 代码能力强,擅长用简洁的代码实现复杂逻辑。
    -- 能想到一些有趣的策略(比如交换提交的两个数)。
    -- 熟练使用VS框架,擅长代码管理。

  • 同伴的缺点:
    -- 会在一些很小的细节上出小bug。

  • 我的优点:
    -- 会从别人的角度考虑问题,设计策略
    -- 看代码细致,能发现一些小bug。
    -- 熟悉一些统计学模型

  • 我的缺点
    -- 代码能力不强,编程速度比队友慢得多

如何说服队友改正缺点:
其实我和队友沟通很顺利,没有出现大的分歧。出bug的事情我会先称赞他的代码能力,然后指出小bug,建议他除了熟练使用ML框架,也要复习一下基本数据类型的操作。最后说bug解决了,我们离出结果又近了一步。

其他收获

我们的方法是基于统计和人为设计策略,而第一轮比赛第一名和第二轮比赛第一名的组都是基于强化学习的策略。最初我们没有选择强化学习是因为我们感觉数据量不够,难以完成强化学习的训练。但事实上通过一系列压缩编码和q-table更新策略,强化学习是可以在这个问题上实现在线学习的。不要人为的草率判断一个算法的可行性,也是我的一个很大的收获。

附一张工作图

附录

7,8,9涉及到图形用户界面,而我们并没有,因此没有写。

转载于:https://www.cnblogs.com/ustcscallion/p/9827445.html

现代软件工程第一次结对编程(黄金点游戏)总结相关推荐

  1. 结对编程-黄金点游戏之旅[二]

    项目结构: 前端页面结构及样式和动画设计 登陆(10.14完成) 注册(10.14完成) 主游戏页(10.15完成) ajax回调函数处理以及页面渲染 请求当前房间游戏用户列表返回json数据处理(1 ...

  2. 2022秋软件工程第一次结对编程时作业

    软件工程 FZUSDN社区 作业要求 2022秋软件工程第一次结对编程作业 作业目标 使用NABCD进行需求分析并进行原型设计 成员学号 032002217 成员学号 072003403 墨刀链接 墨 ...

  3. 第四次作业 结对编程-黄金点游戏

    本次配对实验中,我的队员是王新亮同学,他的博客是http://www.cnblogs.com/wangxinliang/ 组员介绍: 我的结对成员是王新亮同学,他性格踏实稳重,认真勤恳,脾气非常温和. ...

  4. 结对编程-黄金点游戏

    一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...

  5. 软件工程第一次结对编程

    10/11-10/16日短短五天,我和队友通过结对编程的方式完成了一个用来做"黄金点游戏"的小程序,项目地址: https://github.com/ycWang9725/gold ...

  6. 软件工程-第一次结对编程

    1.代码地址 本次和我结对的是王肖男 他的代码地址是GitHub 2.代码审查表 计算器算法审查表 重要性 激活 级别 检查项 Y 20 命名规则是否与所采用的规范保持一致? 注释 重要 Y 10 注 ...

  7. 结对编程 黄金点游戏

    一.实现功能: 10个玩家同时游戏,系统根据规则计算出G值,并且给相应玩家分数,游戏可以进行多轮,由玩家自行控制,每一轮的分数都会累计下来除非重新开始 二. 设计过程: 最开始打算用b/s来做这个游戏 ...

  8. 2021秋软工实践第一次结对编程作业

    这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 实现博饼软件原型并进行博客写作 学号 031902139 队友学 ...

  9. 2021软工第一次结对编程作业

    这个作业属于哪个课程 构建之法-2021秋-福州大学软件工程 这个作业要求在哪里 2021秋软工实践第一次结对编程作业 这个作业的目标 结对完成任务并学会原型设计 学号 031902414 队友学号 ...

  10. 现代软件工程系列 结对编程 (II) 电梯调度程序

    [很多同学完成了上一个结对编程项目后,  很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架,  和算法] 现代软件工程系列 结对编程 (II) 电梯调度程序 ------- Pai ...

最新文章

  1. 牛刀小试之Django二
  2. 启动mq 在虚拟机中_记在使用rocketmq client客户端过程中踩到的坑
  3. JavaScript——执行环境、变量对象、作用域链
  4. 小学计算机教室管理制度范本,《中小学微机室规章制度》.doc
  5. java高并发的经验
  6. vsftp.conf 配置文件详解
  7. Kubernetes 详解
  8. Hyperledger Fabric教程(14)--byfn.sh所有命令
  9. 变异记录文件格式 vcf
  10. MAC和夜神模拟器配置adb适配报错
  11. python中pos函数,python pos是什么
  12. vue常用插件(一)
  13. 明光杂感之四:足球与情境觉知(上)
  14. JAVA之线程子类秒表(静态)
  15. 启动VMware虚拟机显示:物理内存不足无法使用
  16. EtherCAT主站SOEM函数详解---- ecx_readstate、ecx_writestate
  17. 【10大基础算法】广度优先搜索-NO7
  18. 牛X公司的开会方式,明天开始参照执行
  19. 11.29 随堂练习
  20. 没文化真可怕(一些互联网职位)

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0195-22T机械设计基础 参考试题
  2. 【Python实例第3讲】管道:连接主成分和Logistic回归
  3. 【sklearn第十八讲】神经网络模型
  4. 请求并操作指定url处的xml文件
  5. 【实物】端到端自动驾驶搭建教程(一)附完整资料
  6. 后台异常 - Content is not allowed in prolog
  7. Spring Security OAuth2实现单点登录
  8. eclipse安装spring boot插件spring tool suite
  9. 前端读者 | 从一行代码里面学点JavaScript
  10. CAS学习笔记(三)—— SERVER登录后用户信息的返回