201871030133-徐作朝 实验二 个人项目—《D{0-1} KP》项目报告
| 项目 | 内容 |
|---|---|
| 课程班级博客链接 | 课程班级博客链接 |
| 这个作业要求连接 | 作业要求链接 |
| 我的课程学习目标 | (1)掌握软件项目个人开发流程。 (2)掌握Github发布软件项目的操作方法。 |
| 这个作业在那些方面帮助我实现学习目标 | (1)理解PSP流程,形成计划。 (2)熟练GitHub项目托管。 (3)培养良好的代码规范习惯。 |
| 项目GitHub的仓库链接地址 | GitHub的仓库链接地址 |
任务一:作业互评
同学一:https://www.cnblogs.com/hc82/p/14549034.html#4842808
同学二:https://www.cnblogs.com/nwnuyh/p/14545632.html#4842815
同学三:https://www.cnblogs.com/ybp7/p/14540117.html#4842819
同学四:https://www.cnblogs.com/yuzehao/p/14548645.html#4842835
任务二:个人开发流程
卡内基梅隆大学(CMU)的能力成熟度模型(CMM和CMMI),是用来衡量一个团队能力的一套模型。CMU专家针对软件工程师也有一套模型,叫Personal Software Process(PSP)。
PSP特点
•不局限于某一种软件技术(如编程语言),而是着眼于软件开发流程,这样开发不同应用工程师可以互相比较。
•不依赖考试,而主要靠工程师自己收集数据,然后分析,提高。
•在小型、初创的团队中,很难找到高质量的项目需求,这意味着给程序员的输入质量不高。这种情况下,程序员输出质量也不高,并不能全部由程序员负责。
•PSP依赖数据。
•PSP目的是记录工程师如何实现需求的效率,而不是记录顾客对产品的满意度。
| PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
|---|---|---|---|
| Planning | 计划 | 30 | 20 |
| Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 20 |
| Development | 开发 | 450 | 385 |
| Analysis | 需求分析 (包括学习新技术) | 30 | 18 |
| Design Spec | 生成设计文档 | 20 | 15 |
| Design Review | 设计复审 (和同事审核设计文档) | 10 | 6 |
| Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 20 | 15 |
| Design | 具体设计 | 100 | 90 |
| Coding | 具体编码 | 180 | 200 |
| Code Review | 代码复审 | 30 | 20 |
| Test | 测试(自我测试,修改代码,提交修改) | 30 | 21 |
| Reporting | 报告 | 60 | 70 |
| Test Report | 测试报告 | 20 | 20 |
| Size Measurement | 计算工作量 | 20 | 20 |
| Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 20 | 30 |
任务三:个人项目开发
1,需求分析
背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。它的一般描述为:给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装 入背包中物品的总价值最大?
D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集。
2,求解最优值
\sum_{i=2}^nw_ix_i\leq C-w_ix_i \\\\
x_i\in \ \lbrace 0,1 \rbrace,(2\leq i\leq n)
\end{cases}
\]
\]
3,功能设计
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文件。
4,实验测试
读取文件:

绘制散点图:

降序排列:

动态规划解决{0,1}背包问题

回溯法解决{0,1}背包问题

5,代码展示
读取文件
tex=input("文件名称")
n=int(input("组号"))
m=n*8
s=n*8+2
t=n*8-2
profit=linecache.getline(tex,m)
list1 = profit.split(',')
weight=linecache.getline(tex,s)
list2 = weight.split(',')
list1.pop()
list2.pop()
画出散点图并降序排列
weight=list4
profit=list3
plt.figure(figsize=(10, 10), dpi=100)
plt.scatter(weight,profit)
plt.show()
for (a,b) in zip(list3,list4):
num=a/b
lit.append(num)
lit= [round(i,3) for i in lit]
#print(lit)
lit1=sorted(lit,reverse=True)
动态规划解决0-1背包问题
int V_total(int i, int j)
{
if (values[i][j])
return values[i][j]; //如果结果已经计算过,直接返回
int value = 0;
if (i == 0 || j == 0) //当可选物品数量或背包容量为0时,返回0
value = 0;
else if (j < w[i]) //背包容量不足
value = V_total(i - 1, j);
else
{
value = max(V_total(i - 1, j), V_total(i - 1, j - w[i]) + v[i]);
values[i][j] = value;
}
return value;
}
回溯法解决0-1背包问题
def bag_01(weights, values, capicity):
n = len(values)
f = [[0 for j in range(capicity+1)] for i in range(n+1)]
for i in range(1, n+1):
for j in range(1, capicity+1):
f[i][j] = f[i-1][j]
if j >= weights[i-1] and f[i][j] < f[i-1][j-weights[i-1]] + values[i-1]:
f[i][j] = f[i-1][j-weights[i-1]] + values[i-1]
return f
def show(capicity, weights, f):
n = len(weights)
print("最大价值:", f[n][capicity])
x = [False for i in range(n)]
j = capicity
for i in range(n, 0, -1):
if f[i][j] > f[i-1][j]:
x[i-1] = True
j -= weights[i-1]
print("背包中所装物品为:")
for i in range(n):
if x[i]:
print("第{}个,".format(i+1),end='')
if __name__=='__main__':
n=int(input("数量"))
capicity=int(input("容量"))
weights=list4
values=list3
m = bag_01(weights, values, capicity)
show(capicity, weights, m)
7,总结
通过任务一,在互评中互相学习,发现每个人的编写习惯都不一样,通过学习他人良好的编写习惯,完善自己的博客及代码书写规范以及为用户提供良好的视觉效果;任务二主要是学习PSP流程,通过创建PSP,了解自己的欠缺之处,提高效率。对于任务三,发现自己的项目实践很是匮乏,所以完成度很差,希望再以后的学习中再接再厉。
任务四:代码添加到Github账号的项目仓库

201871030133-徐作朝 实验二 个人项目—《D{0-1} KP》项目报告的更多相关文章
- 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030115-康旭 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 18卓越班 这个作业要求链接 实验三结对编程要求 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming):(2)掌握Git ...
- 201871030140-朱婷婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验三 结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握GitHub协作开发程序的操作方法. 这个 ...
- 201871030136-颜静 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu- ...
- 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...
- 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计
实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...
- 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...
- 201871030108-冯永萍 实验二 个人项目— D{0-1}背包问题项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
随机推荐
- css-next & grid layout
css-next & grid layout css3 demo https://alligator.io/ @media only screen and (max-width: 30em) ...
- 专注于大数据分析和数字基建,星盟UICI切入资产管理领域
资产管理行业体系庞大,按领域可以大致分为公募.私募.券商.保险.银行.信托六大领域.面对六大领域百万亿级市场,近年来,也出现了不少初创公司针对资产管理的细分领域提供专有解决方案.而星盟全球投资公司就是 ...
- JIT原理
本文转载自JVM杂谈之JIT 导语 JIT技术是JVM中最重要的核心模块之一.我的课程里本来没有计划这一篇,但因为不断有朋友问起,Java到底是怎么运行的?既然Hotspot是C++写的,那Java是 ...
- Java中的CPU占用高和内存占用高的问题排查
下面通过模拟实例分析排查Java应用程序CPU和内存占用过高的过程.如果是Java面试,这2个问题在面试过程中出现的概率很高,所以我打算在这里好好总结一下. 1.Java CPU过高的问题排查 举个例 ...
- 程序员如何在VsCode上看基金?
一 我是一个程序员. 代码是我的禁锢,基金是我的自由. 打破禁锢,奔向自由,也许只差几个定投. 有人说,买基金一定要心态好,要学会风险对冲,把8成的钱全仓买基金,剩余2成买意外身亡险,基金大涨就赚,基 ...
- Python网络编程相关的库与爬虫基础
PythonWeb编程 ①相关的库:urlib.urlib2.requests python中自带urlib和urlib2,他们主要使用函数如下: urllib: urlib.urlopen() ur ...
- Python - Asyncio模块实现的生产消费者模型
[原创]转载请注明作者Johnthegreat和本文链接 在设计模式中,生产消费者模型占有非常重要的地位,这个模型在现实世界中也有很多有意思的对应场景,比如做包子的人和吃包子的人,当两者速度不匹配时, ...
- double型数据的输入和输出--%f和%lf
scanf函数是通过指针指向变量的. %f告诉scanf函数在所传地址位置上存储一个float型值, 而%lf告诉scanf函数在所传地址位置上存储一个double型值. 这里float和double ...
- 用vue.js实现的期货,股票的实时K线
用vue.js实现的期货,股票的实时k线 项目地址:https://github.com/zhengquantao/vue-Kline vue-kline 效果图 Build Setup 本项目基于V ...
- python3 中post处理json 数据
使用详情如下 import json import requests headers = { "User-Agent": "Mozilla/5.0 (Windows NT ...