201871030107-常雅伦 个人项目-背包问题
项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客 |
这个作业要求链接 | 作业要求 |
我的课程学习目标 | 1.掌握软件项目个人开发流程。 2.根据PSP合理规划项目各项所用时间。 3.掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 软件项目的开发以及GitHub的使用 |
项目Github的仓库链接地址 | 我的GitHub仓库地址 |
实验内容
任务一:阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。
任务二:详细阅读《构建之法》第1章、第2章,掌握PSP流程。
- PSP的特点
- 不局限于某一种软件技术(如编程语言),而是着眼于软件开发的流程,这样,开发不同应用的软件工程师可以互相比较。
- 不依赖于考试,而主要靠工程师自己收集数据,然后分析,提高。
- 在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。
- PSP依赖于数据。
- 需要工程师输入数据,记录工程师的各项活动,这本身就需要不小的时间代价。
- PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。
任务三:个人项目开发
1.项目开发背景
- 背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?
2.需求分析
- 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}背包问题的程序。
3.程序基本功能要求
- 可正确读入实验数据文件的有效D{0-1}KP数据;
- 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
- 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
4.设计实现
- 散点图
- 运用Python数据分析可视化的matplotlib模块中的scatter函数可以非常方便地绘制两个数值型变量的散点图。
- 核心代码:
- 测试运行:
5.总结
- 在此次项目实施中,通过psp时间规划与实际实施,我发现了自己的短板所在,又因为自己编程能力不足,所以计划的开发时间较长,但还是没有在计划时间内完成,甚至超出了很多,并且由于编程能力不足在最后很多功能设计要求没有实现。在今后的在项目设计过程中,我会不断学习,不断进步,争取弥补自己的不足之处。
6.psp
psp2.1 | 任务内容 | 计划共完成需要 的时间 |
实际完成需要 的时间 |
---|---|---|---|
Planning | 计划 | 15 | 20 |
·Estimate | ·估计这个任务需要多少时间, 并规划大致工作步骤 |
30 | 25 |
Development | 开发 | 1200 | 1440 |
·Analysis | 需求分析 | 60 | 80 |
·Design Spec | · 生成设计文档 | 30 | 30 |
·Design Review | · 设计复审 | 0 | 0 |
·Coding Standard | · 代码规范 | 10 | 10 |
·Design | · 具体设计 | 300 | 360 |
·Coding | · 具体编码 | 600 | 1000 |
·Code Review | · 代码复审 | 60 | 180 |
·Test | ·测试 | 60 | 180 |
Reporting | 报告 | 60 | 100 |
·Test Report | · 测试报告 | 50 | 45 |
·Size Measurement | 计算工作量 | 5 | 5 |
·Postmortem & Process Improvement Plan | · 事后总结 ,并提出过程改进计划 | 8 | 20 |