五大常用算法的思想之二:动态规划

                                 动态规划


一、基本概念

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

二、基本思想与策略

    基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

    由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

    与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)

 


三、适用的情况

能采用动态规划求解的问题的一般要具有3个性质:

    (1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

    (2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

   (3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势

 


四、求解的基本步骤

     动态规划所处理的问题是一个多阶段决策问题,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。如图所示。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。

    初始状态→│决策1│→│决策2│→…→│决策n│→结束状态

                      图1 动态规划决策过程示意图

    (1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。

    (2)确定状态和状态变量:将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

    (3)确定决策并写出状态转移方程:因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程

    (4)寻找边界条件:给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。

    一般,只要解决问题的阶段状态状态转移决策确定了,就可以写出状态转移方程(包括边界条件)。

实际应用中可以按以下几个简化的步骤进行设计:

    (1)分析最优解的性质,并刻画其结构特征。

    (2)递归的定义最优解。

    (3)以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值

    (4)根据计算最优值时得到的信息,构造问题的最优解

 


五、算法实现的说明

    动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。

     使用动态规划求解问题,最重要的就是确定动态规划三要素

    (1)问题的阶段 (2)每个阶段的状态

    (3)从前一个阶段转化到后一个阶段之间的递推关系

     递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处

    确定了动态规划的这三要素,整个求解过程就可以用一个最优决策表来描述最优决策表是一个二维表,其中行表示决策的阶段,列表示问题状态,表格需要填写的数据一般对应此问题的在某个阶段某个状态下的最优值(如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。

          f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}

 


六、动态规划算法基本框

代码
for(j=1; j<=m; j=j+1) // 第一个阶段
   xn[j] = 初始值;

 for(i=n-1; i>=1; i=i-1)// 其他n-1个阶段
   for(j=1; j>=f(i); j=j+1)//f(i)与i有关的表达式
     xi[j]=j=max(或min){g(xi-1[j1:j2]), ......, g(xi-1[jk:jk+1])};

t = g(x1[j1:j2]); // 由子问题的最优解求解整个问题的最优解的方案

print(x1[j1]);

for(i=2; i<=n-1; i=i+1)
{  
     t = t-xi-1[ji];

     for(j=1; j>=f(i); j=j+1)
        if(t=xi[ji])
             break;
}

转载于:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
量子机器学习(Quantum Machine Learning,QML)是将量子计算和传统机器学习算法相结合,以加速模型训练和数据处理的领域。随着量子计算技术的不断发展,越来越多的量子机器学习算法被提出并得到了广泛应用。本文将介绍常用的量子机器学习算法,包括量子支持向量机、量子神经网络、量子主成分分析等。 一、量子支持向量机(Quantum Support Vector Machine,QSVM) 量子支持向量机是将支持向量机算法与量子计算相结合的一种方法。它的基本思想是利用量子计算处理高维空间中的数据,从而实现对复杂数据集的分类。量子支持向量机可以通过量子线路实现,其中量子比特的状态表示数据集中的样本点。在训练过程中,通过优化量子线路中的参数,使得预测结果与实际结果的误差最小化。与传统支持向量机相比,量子支持向量机可以更快地处理高维数据,并且具有更高的准确度。 二、量子神经网络(Quantum Neural Network,QNN) 量子神经网络是一种基于量子计算的神经网络模型。它的基本思想是利用量子比特和量子门实现神经元的计算和连接,从而实现对数据的处理和学习。量子神经网络可以用于分类、回归和聚类等机器学习任务,其训练过程通常采用梯度下降等优化算法来最小化损失函数。与传统神经网络相比,量子神经网络具有更高的计算效率和更强的处理能力。 三、量子主成分分析(Quantum Principal Component Analysis,QPCA) 量子主成分分析是一种基于量子计算的数据降维算法。它的基本思想是通过量子比特和量子门实现数据的线性变换,从而找到数据中的主成分。量子主成分分析可以用于数据压缩、特征提取和可视化等领域,在像处理、语音识别和生物信息学等领域有广泛的应用。 四、量子朴素贝叶斯(Quantum Naive Bayes,QNB) 量子朴素贝叶斯是一种基于贝叶斯定理的分类算法。它的基本思想是利用量子计算处理特征空间中的数据,从而实现对数据的分类。量子朴素贝叶斯可以通过量子线路实现,其中量子比特的状态表示特征空间中的样本点。在分类过程中,通过对量子线路中的概率幅值进行测量,得到不同类别的概率分布。量子朴素贝叶斯可以用于文本分类、像分类和生物信息学等领域,在处理高维度数据时具有优势。 五、量子卷积神经网络(Quantum Convolutional Neural Network,QCNN) 量子卷积神经网络是一种基于卷积神经网络和量子计算的深度学习模型。它的基本思想是利用量子比特和量子门实现卷积和池化等操作,从而实现对像和信号等数据的处理和分类。量子卷积神经网络可以用于像识别、语音识别和自然语言处理等领域,在处理大规模数据时具有优势。 总结: 量子机器学习是一种新兴的领域,其发展前景广阔。本文介绍了常用的量子机器学习算法,包括量子支持向量机、量子神经网络、量子主成分分析、量子朴素贝叶斯和量子卷积神经网络等。这些算法在处理高维度数据、大规模数据和复杂数据集时具有优势,并且可以加速模型训练和数据处理。随着量子计算技术的不断发展,相信量子机器学习将在未来发挥更加重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值