项目 内容
课程班级博客链接 课程班级博客链接
这个作业要求连接 作业要求链接
我的课程学习目标 (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. 以代码为剑、数学为犁,SPC构建NGK算力生态体系

    人类创造工具,工具反过来也改变着人类.以区块链为核心的货币革命率先吹响了对金融世界重塑的号角.以代码为剑.数学为犁,区块链构建了新的网路信任体系,这是一切的开始.基于此,NGK区块链技术将赋能实体产业 ...

  2. postman功能介绍

  3. MacOS下PHP7.1升级到PHP7.4.15

    最近写SDK的时候需要用到object类型提示符,PHPStorm智能提示说需要PHP7.2以上才能支持这种类型提示. 我一查我本机的PHP是7.1.30版本,于是考虑升级一下PHP版本. 首先要尝试 ...

  4. R语言学习4:函数,流程控制,数据框重塑

    本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...

  5. Linux基本命令——系统管理和磁盘管理

    转: Linux基本命令--系统管理和磁盘管理 Linux命令--系统管理和磁盘管理 一.系统管理 1.1 时间相关指令 <1> 查看当前日历: cal <2> 显示或设置时间 ...

  6. MySql_176. 第二高的薪水 + limit + distinct + null

    MySql_176. 第二高的薪水 LeetCode_MySql_176 题目描述 题解分析 代码实现 # Write your MySQL query statement below select( ...

  7. C#无损压缩图片

    /// <summary> /// 根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸 /// </summary> /// <param name=" ...

  8. redis一句话木马控电脑

      (1)在redis管理工具内写入木马并保存: 输入命令行: config set dbfilename shell.php set shell "<?php @assert($_P ...

  9. AtCoder Beginner Contest 192

    A Star #include <cstdio> using namespace std; int n; int main() { scanf("%d", &n ...

  10. 我给Apache顶级项目贡献了点源码。

    这是why技术的第 91 篇原创文章 这篇文章其实并没有什么技术性的分享,从我的角度而言,更多是记录和思考. 把我对于源码和之前写的部分文章反哺给我的一些东西,带来的一点点思考分享给大家. 一行源码 ...