201873030133-杨子豪 实验二 个人项目—《折扣背包问题》项目报告
项目 | 内容 |
---|---|
课程班级博客链接 | 班级博客连接 |
这个作业要求链接 | 作业要求链接 |
我的课程学习目标 | 了解软件工程的作用与意义,将软件工程与过去所学相结合 |
这个作业在哪些方面帮助我实现学习目标 | 在完成任务的过程中使用了项目源代码管理工具,集成开发环境,以及过去所学的算法等各种知识 |
项目Github的仓库链接地址 | 项目Github的仓库链接地址 |
任务一:点评链接
https://www.cnblogs.com/chms/p/14550446.html#4842799
https://www.cnblogs.com/mayan0821/p/14547899.html#4842798
https://www.cnblogs.com/weinana/p/14550875.html#4842797
任务二:详细阅读《构建之法》第1章、第2章,掌握PSP流程。
已完成阅读并构建PSP。
任务三:折扣背包问题
项目开发背景:背包问题(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文件。
需求分析
- 可正确读入实验数据文件的有效D{0-1}KP数据;
- 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
- 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
- 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
- 用户界面来进行指定数据的选取,特定功能的选择
功能设计
- 程序要求从txt文档中读取物品的重量,价值两项属性
- 绘制任意一组数据以重量为横轴、价值为纵轴的数据散点图
- 按照第三项的价值:重量比进行非递增排序
- 动态规划算法,回溯算法求解指定数据
- 导出数据最优解以及求解时间,解向量。
- 用户界面来进行指定数据的选取,特定功能的选择
设计实现
测试运行
独特代码
设计总结
读取数据即遇到了麻烦,由于没有保持对编程的练习,如今能力堪忧,查阅完折扣背包相关资料后感到难度较大。虽未完成变成任务,本次实验过程中体验了软件工程开发项目的个人步骤,PSP的设计,领悟了软件工程开发思想,抓紧提升编程能力的想法也愈加强烈。
PSP展示
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|
总体规划这个任务需要多少时间,并大致规划工作步骤 | 20 | 30 |
任务一 点评博客 | 10 | 8 |
任务二 阅读《构建之法》掌握PSP流程 | 30 | 30 |
构建PSP | 40 | 35 |
了解项目大致内容,查阅相关资料 | 60 | 90 |
程序 | ||
读入数据 | 180 | |
绘制散点图 | 60 | |
非递增排序 | 60 | |
动态规划算法 | 360 | |
回溯算法 | 360 | |
导出求解数据 | 180 | |
图形界面 | 120 | |
阅读阿里巴巴Java开发手册指定代码规范 | 60 | |
学习GitHub的使用 | 60 | 60 |
博客 | 60 | |
需求分析 | 20 | |
功能设计 | 20 | |
函数关系介绍 | 40 | |
测试运行截图 | 20 | |
独特代码介绍 | 20 | |
设计总结 | 20 | |
PSP展示 | 25 |
任务四:完成任务三的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。
-
已阅读阿里巴巴Java开发手册指定代码规范
-
练习使用pr、release等操作
-
commit操作