项目 内容
课程班级博客链接 课程班级博客链接
这个作业要求连接 作业要求链接
我的课程学习目标 (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,求解最优值
\[\begin{cases}
\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}
\]
\[max\sum_{i=2}^nv_ix_i
\]
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》项目报告的更多相关文章

  1. 201871030114-蒋鑫 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接☛ 班级博客 这个作业要求链接☛ 作业要求 我的课程学习目标☛ 1. 体验软件项目开发中的两人合作,练习结对编程(Pair programming).2. 掌握Github ...

  2. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  3. 201871030115-康旭 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 18卓越班 这个作业要求链接 实验三结对编程要求 我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming):(2)掌握Git ...

  4. 201871030140-朱婷婷 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 实验三 结对项目 我的课程学习目标 1.体验软件项目开发中的两人合作,练习结对编程:2.掌握GitHub协作开发程序的操作方法. 这个 ...

  5. 201871030136-颜静 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    ​ 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  6. 201871030137-杨钦颖 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030137-杨钦颖 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 班级连接 这个作业要求链接 作业连接 我的课程学习目 ...

  7. 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计

    实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...

  8. 201871030135-姚辉 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 课程班级博客链接 这个作业要求链接 这个作业要求链接 我的课程学习目标 (1)掌握软件项目个人开发流程.(2)掌握Github发布软件项目的操作方法. 这个作业在哪些方面 ...

  9. 201871030108-冯永萍 实验二 个人项目— D{0-1}背包问题项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

随机推荐

  1. c++ 获取当前程序的主模块句柄

    char text[2014]; GetModuleBaseNameA(GetCurrentProcess(), 0, text, 1024); HMODULE hModule = GetModule ...

  2. 法兰西金融专访SPC空投重磅来袭

    最近,法兰西金融日报联合德意志财经等知名金融媒体就SPC这一话题进行了专访. 法兰西金融日报记者德维尔斯问到,之前2020年的BGV项目等市场反响异常火爆,2021年已经来到,NGK目前有何新的大动作 ...

  3. scala:函数作为值或参数进行传递、作为返回值进行返回

    @ 目录 函数可以作为值进行传递 函数可以作为参数进行传递 函数可以作为返回值进行返回 什么是匿名函数 函数可以作为值进行传递 语法var f = 函数名 _ 如果明确了变量的数据类型,那么下划线可以 ...

  4. C++入门教程:大白话讲解,新手基础篇⭐⭐⭐(附源码及详解、视频课程资料推荐)

    目录 C++教程 前言 视频教程 文字教程 集成开发环境(IDE) 编译器 工作原理 学习指南 入门书籍 进阶书籍 算法.竞赛书籍 教程 标准构建 程序解释 第一个C++程序--"hello ...

  5. 按照阿里巴巴规范创建Java线程池

    前言 Executors Executors 是一个Java中的工具类.提供工厂方法来创建不同类型的线程池. 常用方法: 1.newSingleThreadExecutor   介绍:创建一个单线程的 ...

  6. js实现element中可清空的输入框(2)

    接着上一篇的:js实现element中可清空的输入框(1)继续优化,感兴趣的可以去看看哟,直通车链接:https://www.cnblogs.com/qcq0703/p/14450001.html 实 ...

  7. 进位&&大数字符串处理

    Have Fun with Numbers Notice that the number 123456789 is a 9-digit number consisting exactly the nu ...

  8. 关于Java高并发编程你需要知道的“升段攻略”

    关于Java高并发编程你需要知道的"升段攻略" 基础 Thread对象调用start()方法包含的步骤 通过jvm告诉操作系统创建Thread 操作系统开辟内存并使用Windows ...

  9. keras环境搭建

    操作系统 : CentOS7.5.1804_x64 Python 版本 : 3.6.8 keras + tensorflow 环境搭建,使用cpu,安装命令如下: virtualenv -p /usr ...

  10. 学习java之基础语法(三)

    学习java之基础语法(三) java运算符 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运 ...