文章目录

  • 1 问题描述
  • 2 分析思路
  • 3 代码

1 问题描述

有编号分别为 a,b,c,d,e 的五种金银物品,它们的重量分别是2,2,6,5,4,它们的价值分别为6,3,5,4,6,现有一个承重为10的背包,如何让背包带走金银物品的价值总和最大?

2 分析思路

符号说明
x(k): 表示在第k阶段的状态,状态就是第k阶段时的背包的重量
u(k): 表示在第k阶段的决策,决策取1表示将第k个物品放入背包,取0则相反。
v(x(k), u(k)): 表示在第k阶段的阶段指标,也就是决策的取到的第k个物品的价值
f(x(k)):表示总目标函数,即背包承重的范围内要能装走最大价值的金银财宝

过程分析
假设五种金银物品以a,b,c,d,e的顺序排放好,那我们可以以金银物品的顺序作为系统的阶段,即第一个物品(a)作为第一阶段、第二个物品(b)作为第二阶段、第三个物品(c)作为第三阶段段、… ,那么这个题就划分为了5个阶段了。那系统的状态x(k)为背包当前重量,则状态转移方程为 x(k+1) = x(k) + u(k),阶段指标为 v(x(k), u(k)) = x(k)。

总目标函数f(x(k))为从第k段的状态x(k)出发到过程终结的背包所装下的金银总价值最大,即
f(x(k)) = max(v(x(k), u(k)) + f(x(k+1)))

如果觉得分析不清楚可以参考此文章https://blog.csdn.net/mu399/article/details/7722810

代码步骤
了解以上分析后,接下来就是代码的实现。代码是根据上面分析来编写的,系统有五个阶段,每个阶段的决策用0、1表示。

代码第一步:用a矩阵的第一行存放1,2,3,4,5系统的阶段,第二行存放金银重量,第三行存放金银价值。

代码第二步:生成所有种情况的系统状态(下面只取前六行)
1 1 1 1 1
0 1 1 1 1
1 0 1 1 1
1 1 0 1 1
1 1 1 0 1
1 1 1 1 0
比如上面输出的数据矩阵种第一行第一列为1表示第一阶段的决策取值为1(也就是在这五个顺序排列好的物品,取了第一个物品放入背包中),第一行第二列为1表示第二阶段的决策取值为1(将第二个物品放入背包),后面的数字同上。第二行中的数字也如此,只不过表示的是不同的情况。因此也可以明显看出第一行表示所有物品都放入背包中,但已超过了背包的承重了,因此后面的代码还需要有背包承重的约束条件。

代码第三步:给背包承重填上约束条件,即只计算满足背包承重条件的各种情况,将值存放到f中
f = (a(3,:) * v(i,:)’)

代码第四步:算出背包所装下的总价值的情况并输出,最终结果背包所能装下价值最大为15。(详细见代码)

3 代码


clear,clc
a = [1 2 3 4 5;     % 第一行是金银类型,用来表示系统的状态2 2 6 5 4;     % 第二行是金银重量6 3 5 4 6];    % 第三行是金银价值b = perms(a(1, :));
v = [];
for i = 1:size(a,2)-1c = b;id1 = find(c <= i);id2 = find(c >  i);c(id1) = 0;c(id2) = 1;c = unique(c,'rows');v = [v; c];                    % 用0、1变量表示第k状态的决策
end
v = [ones(1,5); v; zeros(1,5)]; % 所有阶段的所有状态都存放在v中F = [];
for i = 1:size(v,1)if (a(2,:) * v(i,:)') <= 10 % 约束条件(背包的承重范围内)f = (a(3,:) * v(i,:)'); % 阶段指标F = [F, f];             % 指标函数end
end
best_value = max(F)             % 指标函数最优值

机器学习(MACHINE LEARNING)MATLAB动态规划解决背包问题相关推荐

  1. 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总

    本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  2. 机器学习(Machine Learning)深度学习(Deep Learning)资料集合

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 原文链接:https://github.com/ty4z2008/Qix/blob/master/dl ...

  3. (转)机器学习(Machine Learning)深度学习(Deep Learning)资料

    原文链接:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  4. Re:从零开始的机器学习 - Machine Learning(一) 线性回归

    从我对整个职业生涯的规划出发,我不仅想做一些高质量的应用(软件工程的角度),还想做一些激动人心的应用,所以我希望能在机器学习的方向走,尽管我在大学粗浅的学了些皮毛,但如果要把机器学习作为职业发展的话这 ...

  5. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics

    数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...

  6. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么

    数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...

  7. 机器学习(Machine Learning)深度学习(Deep Learning)资料【转】

    转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...

  8. 机器学习 Machine Learning 深度学习 Deep Learning 资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...

  9. 机器学习(Machine Learning)amp;深度学习(Deep Learning)资料

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...

最新文章

  1. SQL SERVER 2008 数据恢复错误的解决步骤
  2. 如何从零到一地开始机器学习?
  3. JavaScript入门(part4)--简单数据类型
  4. python 社区网络转化_python-将numpy打开网格转换为坐标
  5. cpu影响matlab仿真速度吗,Proteus仿真速度很慢的分析
  6. qt获取场景的缩略图
  7. md5 java 工具类_Java实现一个MD5工具类
  8. CCF 201503-2 数字排序
  9. 关于Char* ,CString ,WCHAR*之间的转换问题
  10. 输入法黑科技:语音识别准确率98% 用户超过6亿
  11. 余数计算方法及其使用方法
  12. 利用Python一键爬取上海二手房信息
  13. argb和rgb风扇的区别是什么
  14. java中打开eclipse_关于Java:如何在Eclipse中打开jar文件
  15. c++面试常见问题2019-10-03
  16. DMS渠道管理系统:助力农产品行业实现精细化会员管理
  17. 微信AirSync服务之计步器
  18. 海量搜索服务架构搭建2-SolrCloud集群搭建
  19. 智能风控平台核心之风控决策引擎(四)
  20. PHP的LZF压缩扩展工具

热门文章

  1. sqlite DLL load failed
  2. ncnn-mobile
  3. opencv滤波美颜
  4. “load”: 不是“torch::jit”的成员
  5. Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime
  6. FCN制作自己的数据集、训练和测试 caffe
  7. jni返回byte[]
  8. laravel5.0升级到5.1
  9. ubuntu 图形化更换apt源
  10. 安全模式怎么更改计算机用户,台式电脑怎么进入安全模式?电脑安全模式有什么用?...