201971010160-谢家俊 实验二 软件工程个人项目 背包问题项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 2019级卓越工程师班 |
这个作业要求链接 | 实验二 软件工程个人项目 |
我的课程学习目标 | 1.掌握Github发布软件项目的操作方法; 2.完成D{0-1}KP问题个人开发项目; 3.掌握软件项目个人开发的流程。 |
这个作业在哪些方面帮助我实现学习目标 | 深入学习0/1背包问题的算法,掌握PSP流程 |
项目Github的仓库链接地址 | Github仓库 |
任务一:阅读教师博客“常用源代码管理工具与开发工具”内容要求并点评博客。
-
点评博客
点评博客作者 | 点评博客地址 |
---|---|
Eggsy | 地址1 |
N0Name | 地址2 |
Almira | 地址3 |
任务二:总结详细阅读《构建之法》第1章、第2章,掌握PSP流程
- 第1章主要介绍了计算机科学的领域、软件的几个特性、软件工程是什么以及软件工程与计算机科学的关系。
- 第2章主要讲了单元测试、回归测试、效能分析、个人软件开发流程。讲述了一个好的软件工程师应该怎样合理分析软件错误并明确各个模块功能和提高效能还有如何管理自己的源代码。
任务三:个人项目开发——背包问题
1、项目开发背景:
背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?
2、需求分析:
{0-1}KP数据集是研究{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解{0-1}背包问题的经典算法。查阅相关资料,设计一个采用贪心算法、动态规划算法、回溯算法求解{0-1}背包问题的程序。
3、功能设计:
-
可正确读入实验数据文件的有效{0-1}KP数据;
-
能够绘制任意一组{0-1}KP数据以价值重量为横轴、价值为纵轴的数据散点图;
-
能够对一组{0-1}KP数据按重量比进行非递增排序;
-
用户能够自主选择贪心算法、动态规划算法、回溯算法求解指定{0-1} KP数据的最优解和求解时间(以秒为单位);
-
任意一组{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
4、设计实现: -
回溯法:
list1 = [] for i in index: list1.append(i) list1.reverse() index = np.array(list1) a = self.v.copy() b = self.w.copy() for i in range(self.v.size): a[i] = self.v[index[i]] b[i] = self.w[index[i]] self.v = a.copy() self.w = b.copy() return self.v, self.w, index
5、测试运行:
- 散点图:
- 运行结果:
总结:
- 通过做这次项目掌握了绘制散点图的方法,了解了相关的函数;能够计算出价值与重量的比值并进行排序。开始进行问题求解设计和编码,最后经过努力还是对基本功能的实现中的动态规划算法测试还是有bug但是回溯算法已经实现,基本的五个功能虽说有所差距,体会到了自己努力编码和整体软件工程的方法指导是密不可分的,本次项目中时间差距最大的还是编码部分,由于在前期需求分析阶段,对回溯和动态规划算法理解不清楚,设计和编码的时候,浪费了很多的时间去调试代码,重新分析算法、设计算法。通过这次的项目意识到自己缺乏的很多,需要学习的内容还有很多,在以后的学习中还需要更加努力。
PSP
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 15 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 15 |
Development | 开发 | 600 | 800 |
Analysis | 需求分析 (包括学习新技术) | 30 | 50 |
Design Spec | 生成设计文档 | 15 | 15 |
Design Review | 设计复审 (和同事审核设计文档) | 10 | 10 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 15 | 20 |
Design | 具体设计 | 60 | 80 |
Coding | 具体编码 | 300 | 430 |
Code Review | 代码复审 | 40 | 30 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 20 |
Reporting | 报告 | 90 | 130 |
Test Report | 测试报告 | 20 | 15 |
Size Measurement | 计算工作量 | 20 | 15 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 30 | 40 |