201871030137-杨钦颖 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
201871030137-杨钦颖 实验二 个人项目—《西北师范大学学生疫情上报系统》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级连接 |
这个作业要求链接 | 作业连接 |
我的课程学习目标 | 1、掌握软件项目个人开发流程。 2、掌握Github发布软件项目的操作方法。 |
这个作业在哪些方面帮助我实现学习目标 | 1、实战使用了Github项目仓库,更加熟悉了Github的使用方法。 2、基本完成了个人项目的开发,掌握了项目开发流程。 |
项目Github的仓库链接地址 | 仓库连接 |
任务1:作业互评
任务2:阅读《构建之法》,掌握PSP流程
- PSP 的特点:
- 不局限于某一种软件技术 (如编程语言), 而是着眼于软件开发的流程, 这样不同应用的工程师可以互相比较。
- 不依赖于考试, 而主要靠工程师自己收集数据, 然后统计提高。
- 在小型,初创的团队中, 高质量的项目需求很难找到,这意味着给程序员的输入质量不高,在这种情况下, 程序员的输出 (程序/软件) 往往质量不高, 然而这并不能全部由程序员负责。
任务3:个人项目开发
需求分析
应用动态规划算法或回溯算法实现 D{0-1} KP问题。其中D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大。
功能设计
- 可正确读入实验数据文件的有效D{0-1}KP数据;
- 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
- 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
设计实现
测试运行
- 读取文件有效数据
- 绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图
- 对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位)
- 动态规划算法
- 回溯算法
- 动态规划算法
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
- 动态规划算法
- 回溯算法
- 动态规划算法
代码展示
- 动态规划算法
def bag(n, c, w, v):
value = [[0 for j in range(c + 1)] for i in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, c + 1):
value[i][j] = value[i - 1][j]
if j >= w[i - 1] and value[i][j] < value[i - 1][j - w[i - 1]] + v[i - 1]:
value[i][j] = value[i - 1][j - w[i - 1]] + v[i - 1]
return value
- 回溯算法
def backtrack(i):
global bestV,bestx,currV,currW,x
if i>= n:
if bestV<currV:
bestV = currV
bestx = x[:]
else:
if currW+w[i]<=c:
x[i]=1
currW += w[i]
currV += v[i]
backtrack(i+1)
currW -= w[i]
currV -= v[i]
x[i]=0
backtrack(i+1)
总结
本次实验较为复杂,在实验中我遇到了很多问题,如:在绘制散点图时不能正确导入需要的库、对两种算法的模糊记忆、GitHub无法正常使用等等,这些问题都在我实现项目的过程中耗费了大量的时间。目前已经基本完成了老师提出的要求,学到了很多,同时也意识到了我还有很多需要学习的地方,还需要做到温故而知新。
PSP展示
PSP 各个阶段 | 自己预估的时间 (分钟) | 实际的记录 (分钟) |
---|---|---|
计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 | 10 | 10 |
开发 (包括下面 8 项子任务) | 1440 | 1030 |
· 需求分析 (包括学习新技术、新工具的时间) | 40 | 30 |
· 生成设计文档 (整体框架的设计,各模块的接口,用时序图,快速原型等方法) | 30 | 20 |
· 设计复审 (和同事审核设计文档,或者自己复审) | 20 | 20 |
· 代码规范 (为目前的开发制定或选择合适的规范) | 10 | 10 |
· 具体设计(用伪代码,流程图等方法来设计具体模块) | 60 | 50 |
· 具体编码 | 600 | 500 |
· 代码复审 | 180 | 100 |
· 测试(自我测试,修改代码,提交修改) | 500 | 300 |
报告 | 60 | 60 |
测试报告(发现了多少bug,修复了多少) | 20 | 20 |
计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) | 20 | 20 |
事后总结, 并提出改进计划 (包括写文档、博客的时间) | 20 | 20 |
任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中
任务5:完成个人项目报告博文作业
- 已完成博客
写在后面
-
用python绘制散点图时要注意的
- 当我们用python绘制散点图时需要以下语句添加相应库
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties
- 在运行程序前首先需要下载matplotlib库,这时我们要做的是打开cmd窗口,输入
python -m pip install matplotlib
,单机回车即可(有时会出现报错,一种可能是网速太慢不能支持库继续下载,还有一种可能是出现error报错,这时只需要将error中的提示语句输入并单击回车即可),当提示Successfully时就安装成功啦。