201871030126-王会娟 实验二 个人项目—《D{0-1} KP》项目报告
项目 | 内容 |
课程班级博客链接 | https://home.cnblogs.com/u/wanghuijuan815 |
这个作业要求链接 | https://www.cnblogs.com/nwnu-daizh/p/14552393.html |
我的课程学习目标 | (1)掌握软件项目个人开发流程。 (2)掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | (1阅读了《构建之法》前两章的内容,掌握了PSP流程并自己对这次的个人项目也尝试做了PSP,对后面项目的开发和进行大有帮助。 (2)复习和掌握了0/1背包的问题解决方法,对动态规划算法和回溯法有进行了复习和巩固。 (3)第一次尝试使用Github,掌握Github发布软件项目的基本方法。 |
项目Github的仓库链接地址 | https://github.com/wang815-hui/jfm |
一、任务1:
阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。
-
https://www.cnblogs.com/wangfenqxx/p/14539846.html#484294
二、任务2:
详细阅读《构建之法》第1章、第2章,掌握PSP流程
(1)计划
· 明确需求和其他因素,估计以下的各个任务需要多少时间
(2)开发
· 分析需求
· 生成设计文档
· 设计复审
· 代码规范
· 具体设计
· 具体编码
· 测试
(3)记录时间花费
(4)测试报告
(5)计算工作量
(6)事后总结
(7)提出过程改进计划
三、任务3
项目实施过程
(1)需求分析
项目开发背景:
背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?
D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解D{0-1}背包问题的经典算法。查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序。
- 对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。
- 从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;
- 能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件
(2)功能设计
1.可正确读入实验数据文件的有效D{0-1}KP数据;
2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
3.能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位)
(3)设计实现
- 可正确读入实验数据文件的有效D{0-1}KP数据,将有效数据然后将数据进行分组,分为两个大组,分别为重量和价值,再对两个组的数据进行分组,每个组有3个数据项其中第三个是前两项之和,第三个数字小于前两个数字之和(即满足每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和)
- 绘制数据散点图,将分好的数据绘制任意一组数据以重量为横轴、价值为纵轴的数据散点图。
- 排序,能够对第一组数据的第三个数字:第二组数据的第三个数字比进行非递增排序。
- 参考0/1背包问题选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间。
(3)测试运行
a.读取文件
- 主要代码展示
- 结果展示
(2)画出散点图
- 主要代码展示
- 结果展示
(7)展示PSP
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
计划 | 40 | 60 |
· 估计这个任务需要多少时间,并规划大致工作步骤 | 8 | 6 |
开发 | 600 | 780 |
需求分析 (包括学习新技术) | 120 | 150 |
· 生成设计文档 | 60 | 50 |
· 设计复审 (和同事审核设计文档) | 40 | 60 |
代码规范 (为目前的开发制定合适的规范) | 50 | 80 |
具体设计 | 60 | 100 |
具体编码 | 420 | 480 |
· 代码复审 | 90 | 80 |
· 测试(自我测试,修改代码,提交修改) | 120 | 180 |
报告 | 120 | 150 |
· 测试报告 | 40 | 80 |
计算工作量 | 20 | 50 |
· 事后总结 ,并提出过程改进计划 | 30 | 40 |
- 总结:这次的实验有难度,自己预估时间和实际消耗的时间差距比较大,在开发和编码上花了很长时间,但是有的内容没有实现,主要原因是自己的编程能力不够。