动态规划
动态规划是用来解决多阶段决策过程最优化的一种数量方法。其特点在于,可以把困难的多阶段决策问题变换成一系列互相联系较容易的单阶段问题,解决了这一系列较容易的单阶段问题,也就解决了这个困难的多阶段决策问题。
多阶段决策问题:
是动态决策问题的一种特殊形式;
在多阶段决策过程中,系统的动态过程可以按照时间进程分为状态相互联系而又相互区别的各个阶段;
每个阶段都要进行决策,目的是使整个过程的决策达到最优效果。
需指出:动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种算法。必须对具体问题进行具体分析,运用动态规划的原理和方法,建立相应的模型,然后再用动态规划方法去求解。
一、基本概念
1、阶段(stage)
指一个问题需要作出决策的步骤。通常按时间和空间的自然特征划分阶段。如例1是按距A点距离划分的阶段。
2、状态(state)--最关键参数
指每个阶段初所处的自然状况或客观条件。
它既反映前面各阶段决策的结局,又是本阶段作出决策的出发点和依据。
通常第k个阶段的有若干个状态,用状状态变量sk来描述。
某个阶段的状态就是所在的位置。
通常状态数比阶段数多1。
3、决策(decision)
指某一阶段内的抉择,通常用决策变量xk(sk)表示第k阶段状态是sk时所做的选择,这个决策决定了第k+1阶段的状态。
如: x2(B1)=C2表示第2阶段处于状态B1时选择了由B1到C2,即以C2做终点。
又如: x3(C1)=D2
4、策略(policy)
由所有各阶段的决策组成的序列称为全过程策略,记作p1,n(s1)
能够达到总体最优的策略叫做最优策略。
从第k个阶段开始到最后阶段的决策组成序列称为k子过程策略简称K子策略(subpolicy)。记作pk,n(sk)
5、指标函数
指标函数和最优值函数:用来衡量所实现过程优劣的一种数量指标,为指标函数。指标函数的最优值,称为最优值函数,记作f1(s1)或fk(sk) 。在不同的问题中,指标函数的含义是不同的,它可能是距离、利润、成本、产量或资源消耗等。
fk(sk)就是指对某一确定状态选取最优策略后得到的指标函数值,即对某一最优子策略的效益度量值。
阶段指标函数:rk(sk,xk)表示在第k阶段的sk状态下做出xk决策时的指标值。
6、状态转移方程(状态转移率)
从sk的某一状态值出发,当决策变量 xk(sk)的取值决定后,下一阶段状态变量sk+1的取值也随之确定。这种从上一阶段的某状态值到下阶段某状态值的转移的规律称为状态转移率,又叫状态转移方程。
sk+1=Tk(sk,xk)
动态规划的应用
动态规划求解步骤:
1、确定问题的阶段和编号
2、确定状态变量 sk
3、确定决策变量 xk(用 xk*表示该阶段的最优决策)
4、确定状态转移方程
5、确定指标函数
整个求解过程就可以用一个最优决策表来描述,最优决策表是一个二维表,其中行表示决策的阶段,列表示问题状态
一、使用矩阵保存图
二、用一个一维数组cost[]保存每个阶段每个状态的最小代价
for(j=n-1;j>=1;j--)
{temp=0;
min=c[j][temp]+cost[temp];
for(r=0;r<=n;r++)
{ if(c[j][r]!=MAX)
{ if(c[j][r]+cost[r]<min)
{ min=c[j][r]+cost[r];
temp=r;
}
}
}
cost[j]=c[j][temp]+cost[temp];