201871010112-梁丽珍 实验二 个人项目—《背包问题》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客园 |
这个作业要求链接 | 作业要求 |
我的课程学习目标 | (1)掌握软件项目个人开发流程。 (2)掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 了解0-1背包问题的基本原理;了解了软件项目开发流程;了解了GitHub发布软件项目的操作方法;明白自己在编码过程中的不足之处。 |
项目Github的仓库链接地址 |
实验内容和步骤
- 任务1:阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。
作业点评 | 作业链接 |
---|---|
第1份作业 | 作业1 |
第2份作业 | 作业2 |
第3份作业 | 作业3 |
-
任务2:详细阅读《构建之法》第1章、第2章,掌握PSP流程。
-
什么是PSP
- 它是一个自我改进的过程,它帮助控制、管理和改进自己的工作方式
- 它是一个结构化的框架,包括了软件开发中使用的表格、准则和规程
- 它提供了一个度量和分析框架,用来检验和管理你的个人工作
- 它还是一个已定义过程,用来帮助你改善自己的个人绩效
-
psp如何帮助工作
- PSP可以做什么?
- 稳定、成熟的PSP可以使你:
- 估计和计划自己的工作
- 满足自己的承诺
- 拒绝不合理的承诺
- 你还可以:
- 了解自己的当前绩效
- 更好的提高自己的能力
- PSP提供了:
- 一个得到证明的用于开发的基础框架
- 告诉你怎么来改进自己个体过程
- 持续改进工作效率、工作质量、工作可预测性的相关数据
- 稳定、成熟的PSP可以使你:
- PSP可以做什么?
-
PSP的特点
- 不局限于某一种软件技术(如编程语言),而是着眼于软件的开发流程,这样,开发不同应用的软件工程师可以相互比较。
- 不依赖于考试,而主要靠工程师自己收集数据,然后分析,提高。
- 在小型、初创团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。在这种情况下,程序员的输出(程序/软件)往往质量也不高,然而这并不能全部由程序员负责。
- PSP依赖于数据。
- PSP的目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。
-
Personal Software Process Table (PSP)
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际共完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
· Estimate | 计划 | 10 | 10 |
Development | 开发 | - | - |
· Analysis | · 需求分析 (包括学习新技术) | 20 | 15 |
Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 (和同事审核设计文档) | 0 | 0 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | - | - |
· Design | · 具体设计 | - | - |
· Coding | · 具体编码 | - | - |
· Code Review | · 代码复审 | - | - |
· Test | · 测试(自我测试,修改代码,提交修改) | - | - |
Reporting | 报告 | - | - |
· Test Report | · 测试报告 | - | - |
· Size Measurement | · 计算工作量 | - | - |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | - | - |
合计 | - | - |
-
任务3:项目开发背景:背包问题(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}背包问题的程序,程序基本功能要求如下: - 1.可正确读入实验数据文件的有效D{0-1}KP数据;
- 2.能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
- 3.能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
- 4.用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 5.任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
-
1、需求分析:
看到题目后,具体分析如下:
D{0-1}KP背包问题的目的是:如何选择物品装入背包,使得装入背包的物品的重量系数之和在不超过背包载重C的前提下价值系数之和达到最大。
设给定n个含有3个物品的物品集,物品集i(0<=n<=n-1)中含有的3个物品分别表示为3i,3i+1和3i+2,其中前面两个物品3i和3i+1的价值系数分别记为P3i和P3i+1,重量系数分别记为W3i和W3i+1;第三个物品3i+2为前两个物品的合并,它的价值系数为P3i+2=P3i+P3i+1,它的折扣重量系数为W3i+2,满足W3i+2<W3i+W3i+1,并且W3i<W3i+2,W3i+1<W3i+2.对于每一个物品集i(0<=n<=n-1),物品3i,3i+1和3i+2中至多有一个可以被选择装入背包中。
-
2、功能设计:文件读取数据、绘制数据散点图、实现D{0-1}KP背包问题求得最大价值系数之和、求得最优解和求解时间、文件输出。
-
3、设计实现:
-
4、测试运行:
- 任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。
小结:通过这次的任务学习,我了解到了软件项目个人开发流程,对PSP流程有了一定的了解。关于这次的项目的程序开发,感觉难度比较大,没有能编程实现出来。还是自己能力不足。需要多加提升自己的能力。