赞
踩
- """
- __date__:2022.5.1
- __version__: V1.0.0
- __description__:请用动态规划算法来求解0-1背包问题,并且用绘图工具plot对迭代过程中的总价值进行曲线绘制。
- """
-
- from pathlib import Path
- import matplotlib.pyplot as plt
- import numpy as np
- from matplotlib.pyplot import MultipleLocator
- plt.rcParams['font.sans-serif'] = ['SimSun']#显示中文,否则生成的图中文字无法显示
-
- num=6 #背包数量
- room=6 #背包容量
- weight=[1,3,4,2,8,4]#物品重量
- value=[2,4,8,3,2,1]#物品价值
- result=[[0 for j in range(room+1)] for i in range(num+1)]#range(k)不包含k,需要+1
-
- x=range(0,num*room+1)
- y=[0]
-
- for i in range(1,num+1):
- for j in range(1,room+1):
- if j < weight[i-1] or result[i-1][j-weight[i-1]]+value[i-1] <= result[i-1][j]:
- # 放不下或放入背包后价值<=不放
- result[i][j]=result[i-1][j] #价值和前i-1个物品价值一样
- else:
- result[i][j]=result[i-1][j-weight[i-1]]+value[i-1]
-
- y.append(result[i][j])
-
- plt.rcParams['font.sans-serif'] = ['SimSun']#显示中文,否则生成的图中文字无法显示
- plt.title("0-1背包问题的动态规划算法总价值曲线",fontsize = 14) #图标题,设置字体大小为14
- plt.xlabel("迭代次数",fontsize = 14) #x轴的文本说明,设置字体大小为14
- plt.ylabel("总价值",fontsize = 14) # y轴的文本说明,设置字体大小为14
-
- plt.plot(x,y,label="动态规划算法",linewidth=1,color="red",linestyle="--",marker="^",markersize=4)
-
- xlabel=[0]
- for x in range(0,num*room+1):
- xlabel.append(x)
- plt.xticks(xlabel) #设定x轴刻度显示为文本
- plt.gca().yaxis.set_major_locator(MultipleLocator(1))#设置y轴间隔为1
- plt.legend() #加载图例
- plt.savefig('0-1背包问题的动态规划算法总价值曲线(191491531).pdf') #保存图片
- plt.show() #显示图片
-
-
-
'运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。