201871030114-蒋鑫 实验二 个人项目-《折扣{0-1}背包问题》项目报告

| 项目 | 内容 |
| ---- | ---- | ---- |
| 课程班级博客链接☛ | 班级博客 |
|这个作业要求链接☛|作业要求|
|我的课程学习目标☛|1. 掌握软件项目个人开发流程。

2. 掌握Github发布软件项目的操作方法。

3. 回顾学习动态规划算法、回溯算法。|
|这个作业在哪些方面帮助我实现学习目标☛|1. 制定了该项目的PSP

2.复习了动态规划算法、回溯算法 |
|项目Github的仓库链接地址☛|仓库地址|

实验内容

任务1: 阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。

点评1☛:点评1

点评2☛:点评2

点评3☛:点评3

点评4☛:点评4

任务2: 详细阅读《构建之法》第1章、第2章,掌握PSP流程。

《构建之法》第1章主要介绍了计算机科学的领域、软件的几个特性、软件工程是什么以及软件工程与计算机科学的关系,第二章主要介绍了单元测试、回归测试、效能分析以及个人软件开发流程(PSP)。对于个人开发流程(PSP)它有PSP0、PSP0.1、PSP1、PSP2以及PSP2.1四个版本,本次实验用到的是PSP2.1(个人项目耗时对比记录表)。此次个人项目的PSP已在任务3的7中展示(详情请见任务3的7)。

任务3:完成个人项目报告博文作业

1. 需求分析:

  • 折扣{0-1}背包问题 (Discounted{0-1} Knapsack Problem,D{0-1}KP) 是经典的{0-1}背包问题 ({0-1} Knapsack Problem, {0- 1}KP)的一个拓展形式,通过数学模型刻画实际商业活动中折扣销售、捆绑销售等现象, 对这类问题进行最优化求解, 达到获利最大化。。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大。

  • D{0-1}KP可简单理解为A物品售价40元,B物品售价50元,同时购买A,B记为购买物品C只需支出80元或其他小于90元的价格。在现实商业销售案例中,如“黑色星期五”“双十一”等大型购物节, 通过D{0-1}KP能够很好地使客户在项目决策得到最优方案, 销售商也能够通过D{0-1}KP更有针对性地设计自己的销售方案。利用D{0-1}KP使得商业价值达到最大化, 在实际商业问题中,例如在项目决策、投资和预算控制等方面具有广阔的的应用背景。D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解D{0-1}背包问题的经典算法。

2. 功能设计:

  • 基本功能

(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文件;

  • 扩展功能

3. 设计实现:

(1)绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;

(2)对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;

4. 测试运行:

(1)绘制散点图:绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;

3*10

(2)排序:非递增对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;

重量比进行非递增排序

5. 代码展示:

(1)绘制散点图:

plt.scatter(x, y)#绘制散点图
plt.xlabel('weight')#横轴
plt.ylabel('profit')#纵轴
plt.title('weight versus profit')#标题
plt.yticks([0,200,400,600,800,1000,1200,1400,1600,1800,2000])
plt.show()

(2)非递增对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序

a=[]
b=[]
n=30
for i in range(n):
  A=y[i]/x[i]
  a.append(A)
for i in range(2,len(a), 3):
  B=a[i]
  b.append(B)
b.sort(reverse=True)#排序
print('比值排序:',b)

6. 总结:

7. PSP展示:

psp2.1 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
Planning 计划 1 0.75
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 1 0.75
Development 开发 40 18.8
Analysis 需求分析 (包括学习新技术) 3 3
Design Spec 生成设计文档 3 2
Design Review 设计复审 (和同事审核设计文档) 1 0.8
Coding Standard 代码规范 (为目前的开发制定合适的规范) 1 0.5
Design 具体设计 4 2
Coding 具体编码 20 8
Code Review 代码复审 4 2
Test 测试(自我测试,修改代码,提交修改) 2 1
Reporting 报告 3.5 2.5
Test Report 测试报告 2 1
Size Measurement 计算工作量 0.5 0.5
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 1 1

任务4: 完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。

已上传

总结:

刚开始看到题目时,看到需要绘制散点图,首先想到的是使用python语言来实现,在大二上学期选修过python,但是现在很多东西都已经遗忘了,所以在功能实现时只能简单实现部分,因为实现的功能简单,实际完成的时间比预计完成的时间要快一点。其实刚看到题目时,题目都有点难懂,后来自己慢慢摸索,就做到了现在看到的这样,此次作业我自己都觉得不满意,通过此次作业,意识到自己学艺不精,需要学习的内容还有很多,在以后的学习中还需要更加努力。

posted @ 2021-03-31 09:56  JX1204  阅读(203)  评论(1编辑  收藏  举报