其他分享
首页 > 其他分享> > 201971010235-阮凯 实验二 软件工程个人项目 《0-1 背包问题》项目报告

201971010235-阮凯 实验二 软件工程个人项目 《0-1 背包问题》项目报告

作者:互联网

项目 内容
课程班级博客链接 2022年春软件工程课程班(2019级计算机科学与技术)
这个作业要求链接 实验二 软件工程个人项目
我的课程学习目标
  • 掌握软件项目个人开发流程;
  • 掌握Github发布软件项目的操作方法。
我实现的学习目标
  • 掌握了个人项目的开发流程以及熟悉了求解{0-1}背包问题的各种算法;
  • 了解了使用python语言绘图以及排序以及掌握了Github发布软件项目的操作方法;
  • 了解了PSP的特点以及软件设计的原则。
项目Github的仓库链接地址 https://github.com/RuanKaio/dp

任务1的完成情况如下:

任务2的完成情况如下:

任务3的完成情况如下:

1. 项目背景:

  背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用
背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值
系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在
不超过背包载重前提下价值系数之和达到最大?

2. 需求分析:

  {0-1}KP数据集是研究{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;在此次实验中通过采用贪心算
法、动态规划算法、回溯算法求解{0-1}背包问题。

3. 功能设计:

4. 设计实现:

代码功能介绍如下:

5. 代码片段:

x, y = np.loadtxt(res, delimiter=' ', unpack=True)
plt.plot(x, y, '.', color='blue')

plt.xlabel('wight')
plt.ylabel('value')
plt.title('scatter plot')
plt.legend()
plt.show()
# 读取数据(第一行读取)
f1 = open("D:\Python_work\dp\测试数据\\beibao0.in", "r")
a1 = []
res1 = f1.readlines()  # 若不想读取第一行则使用res = f.readlines()[1:]

for line in res1:
    line = line.replace('\n', '')  # 去掉\n;
    line = line.split(' ')  # 以空格划分
    a1.append(line)

f.close()
def GreedyAlgo(item,c,num):
    data = np.array(item)
    idex = np.lexsort([data[:,0], -1*data[:,1]])
    status = [0] * num
    Tw=0
    Tv=0

    for i in range(num):
        if data[idex[i],0] <= c:
            Tw += data[idex[i],0]
            Tv += data[idex[i],1]
            status[idex[i]] = 1
            c -= data[idex[i],0]
        else:
            continue

    print("贪心算法,最大价值为:")
    return Tv
def Dp(w,v,c,num):
    cnt=[0 for j in range(c + 1)]

    for i in range(1,num+1):
        for j in range(c,0,-1):
                if j>=w[i-2]:
                    cnt[j] =max(cnt[j],cnt[j-w[i-2]]+v[i-2] )
                
    print("动态规划算法,最大价值为:")
    return cnt[c]
def Backtracking(k,c,num):
    global Nw,Nv,Bv,Bw
    status = [0 for i in range(num)]

    if k>=num:
        if Bv<Nv:
                Bv = Nv
    else:
        if Nw + w[k] <= c:
            status[k] = 1
            Nw += w[k]
            Nv += v[k]
            Backtracking(k+1,c,num)
            Nw -= w[k]
            Nv -= v[k]
        status[k] = 0
        Backtracking(k+1,c,num)
result = "贪心算法:最优解:" + str(ret1) + "," + "求解时间:" + str(time_sum)
file = open('D:\Python_work\dp\\resultG.txt', 'w')
file.write(result)
file.close()

6. 测试运行:

7. 代码规范:

8. PSP展示:

PSP2.1
任务内容
计划共完成需要的时间
(min)
实际共完成需要的时间
(min)
Planning 计划
6
10
Estimate
估计这个任务需要多少时
间,并规划大致工作步骤
6
10
Development 开发
912
1336
Analysis
需求分析
(包括学习新技术)
16
26
Design Spec
生成设计文档
16
20
Design Review
设计复审
(和同事审核设计文档)
10
20
Coding Standard
代码规范
(为目前的开发制定合适的规范)
30
50
Design
具体设计
120
160
Coding
具体编码
480
720
Code Review
代码复审
120
160
Test
测试
(自我测试。修改代码, 提交修改)
120
180
Reporting 报告
70
92
Test Report
测试报告
30
36
Size Measurement
计算工作量
10
16
Postmortem &
Process Improvement Plan
事后总结,并提出过程改进计划
30
40

9. 经验分享:

在最开始了解此次作业时,认为自己一个人无法完成,然而结果是在自己长时间的努力下,完成了对自己来说完成不了的任务。

任务4的完成情况如下:

已将项目提交至Github:

标签:201971010235,num,求解,代码,阮凯,算法,软件工程,KP
来源: https://www.cnblogs.com/RuanKaio/p/16014008.html