当前位置:   article > 正文

python实现动态规划求解0-1背包问题_零一规划python代码

零一规划python代码
  1. """
  2. __date__:2022.5.1
  3. __version__: V1.0.0
  4. __description__:请用动态规划算法来求解0-1背包问题,并且用绘图工具plot对迭代过程中的总价值进行曲线绘制。
  5. """
  6. from pathlib import Path
  7. import matplotlib.pyplot as plt
  8. import numpy as np
  9. from matplotlib.pyplot import MultipleLocator
  10. plt.rcParams['font.sans-serif'] = ['SimSun']#显示中文,否则生成的图中文字无法显示
  11. num=6 #背包数量
  12. room=6 #背包容量
  13. weight=[1,3,4,2,8,4]#物品重量
  14. value=[2,4,8,3,2,1]#物品价值
  15. result=[[0 for j in range(room+1)] for i in range(num+1)]#range(k)不包含k,需要+1
  16. x=range(0,num*room+1)
  17. y=[0]
  18. for i in range(1,num+1):
  19. for j in range(1,room+1):
  20. if j < weight[i-1] or result[i-1][j-weight[i-1]]+value[i-1] <= result[i-1][j]:
  21. # 放不下或放入背包后价值<=不放
  22. result[i][j]=result[i-1][j] #价值和前i-1个物品价值一样
  23. else:
  24. result[i][j]=result[i-1][j-weight[i-1]]+value[i-1]
  25. y.append(result[i][j])
  26. plt.rcParams['font.sans-serif'] = ['SimSun']#显示中文,否则生成的图中文字无法显示
  27. plt.title("0-1背包问题的动态规划算法总价值曲线",fontsize = 14) #图标题,设置字体大小为14
  28. plt.xlabel("迭代次数",fontsize = 14) #x轴的文本说明,设置字体大小为14
  29. plt.ylabel("总价值",fontsize = 14) # y轴的文本说明,设置字体大小为14
  30. plt.plot(x,y,label="动态规划算法",linewidth=1,color="red",linestyle="--",marker="^",markersize=4)
  31. xlabel=[0]
  32. for x in range(0,num*room+1):
  33. xlabel.append(x)
  34. plt.xticks(xlabel) #设定x轴刻度显示为文本
  35. plt.gca().yaxis.set_major_locator(MultipleLocator(1))#设置y轴间隔为1
  36. plt.legend() #加载图例
  37. plt.savefig('0-1背包问题的动态规划算法总价值曲线(191491531).pdf') #保存图片
  38. plt.show() #显示图片
'
运行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/844174
推荐阅读
相关标签
  

闽ICP备14008679号