机器学习(MACHINE LEARNING)MATLAB动态规划解决背包问题
文章目录
- 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动态规划解决背包问题相关推荐
- 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总
本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...
- 机器学习(Machine Learning)深度学习(Deep Learning)资料集合
机器学习(Machine Learning)&深度学习(Deep Learning)资料 原文链接:https://github.com/ty4z2008/Qix/blob/master/dl ...
- (转)机器学习(Machine Learning)深度学习(Deep Learning)资料
原文链接:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...
- Re:从零开始的机器学习 - Machine Learning(一) 线性回归
从我对整个职业生涯的规划出发,我不仅想做一些高质量的应用(软件工程的角度),还想做一些激动人心的应用,所以我希望能在机器学习的方向走,尽管我在大学粗浅的学了些皮毛,但如果要把机器学习作为职业发展的话这 ...
- 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics
数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...
- 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么
数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...
- 机器学习(Machine Learning)深度学习(Deep Learning)资料【转】
转自:机器学习(Machine Learning)&深度学习(Deep Learning)资料 <Brief History of Machine Learning> 介绍:这是一 ...
- 机器学习 Machine Learning 深度学习 Deep Learning 资料
机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...
- 机器学习(Machine Learning)amp;深度学习(Deep Learning)资料
机器学习(Machine Learning)&深度学习(Deep Learning)资料 機器學習.深度學習方面不錯的資料,轉載. 原作:https://github.com/ty4z2008 ...
最新文章
- SQL SERVER 2008 数据恢复错误的解决步骤
- 如何从零到一地开始机器学习?
- JavaScript入门(part4)--简单数据类型
- python 社区网络转化_python-将numpy打开网格转换为坐标
- cpu影响matlab仿真速度吗,Proteus仿真速度很慢的分析
- qt获取场景的缩略图
- md5 java 工具类_Java实现一个MD5工具类
- CCF 201503-2 数字排序
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 输入法黑科技:语音识别准确率98% 用户超过6亿
- 余数计算方法及其使用方法
- 利用Python一键爬取上海二手房信息
- argb和rgb风扇的区别是什么
- java中打开eclipse_关于Java:如何在Eclipse中打开jar文件
- c++面试常见问题2019-10-03
- DMS渠道管理系统:助力农产品行业实现精细化会员管理
- 微信AirSync服务之计步器
- 海量搜索服务架构搭建2-SolrCloud集群搭建
- 智能风控平台核心之风控决策引擎(四)
- PHP的LZF压缩扩展工具
热门文章
- sqlite DLL load failed
- ncnn-mobile
- opencv滤波美颜
- “load”: 不是“torch::jit”的成员
- Check failed: error == cudaSuccess (35 vs. 0) CUDA driver version is insufficient for CUDA runtime
- FCN制作自己的数据集、训练和测试 caffe
- jni返回byte[]
- laravel5.0升级到5.1
- ubuntu 图形化更换apt源
- 安全模式怎么更改计算机用户,台式电脑怎么进入安全模式?电脑安全模式有什么用?...