动态规划之最短路问题及其解法

用动态规划优化老鼠走迷宫中的最短路线解法 #include #include #include #include #include #ifdef _WIN32 #include #endif #ifndef STRICT #define STRICT 1 #endif /* 宏DYNAMIC-是否开启动态规划 */ #define DYNAMIC 1 #define 阅读详情
AI摘要

本文介绍了动态规划解决最短路问题的方法。1951年贝尔曼创立动态规划,它无统一数学模型。以线路网络图为例,将从A到E的过程分阶段,介绍状态变量和决策变量。给出逆序和顺序两种解法,分别从前向后和从后向前求最短弧长,都得出A到E最短弧长为14。

动态规划

引言

  1951年,美国数学家贝尔曼(R.Bellman)等根据一类所谓多阶段决策问题的特性,提出了解决这类问题的“最优化原理”,并研究了许多实际问题,从而创立了最优化的一个新分支----动态规划。
  动态规划没有统一的数学模型,对不同的问题要采用不同的方法去建立它们的模型。有了模型之后,要想得到数值解,仍然没有统一的处理方法。这是应当注意的。

1 动态规划原理

1.1 最短路问题及其解法

1.1.1 最短路问题及其特点

  图1-1称为线路网络图,其中小圆圈称为点,两点间的连线称为弧,弧上的数字称为弧长。试求一条从起点 A A A到终点 E E E的连通弧,使其总弧长最短。称这类问题为最短路问题。

图 1-1

  最短路问题的含义是广泛的,求解方法也有很多,下面介绍它的动态规划解法。
  首先注意,从 A A A 到 E E E的整个过程可以分成从 A A A到B,从 B B B到 C C C,从 C C C到 D D D,再从 D D D到 E E E四个阶段。每个阶段都有起点,如第二个阶段有两个起点 B 1 B_1 B1​ 和 B 2 B_2 B2​,用 x k x_k xk​表示第 k k k( k = 1 , 2 , 3 , 4 k = 1,2,3,4 k=1,2,3,4)个阶段的起点,并称它为状态变量。从每个起点出发都有若干个选择,例如从 B 1 B_1 B1​出发有三种选择,到 C 1 C_1 C1​或到 C 2 C_2 C2​或到 C 3 C_3 C3​,用 u k u_k uk​表示从第 k k k( k = 1 , 2 , 3 , 4 k = 1,2,3,4 k=1,2,3,4)个阶段的状态 x k x_k xk​出发所作的选择,并称它为决策变量。如果用 f k ( x k ) f_k(x_k) fk​(xk​)1表示从第 k k k个阶段的状态 x k x_k xk​出发到终点 E E E的最短弧长,或者用 f k ( x k ) f_k(x_k) fk​(xk​)2表示从起点 A A A到第 k k k个阶段的状态 x k x_k xk​的最短弧长,那么问题就变成求 f 1 ( x 1 ) = f 1 ( A ) f_1(x_1)=f_1(A) f1​(x1​)=f1​(A),或者求 f 5 ( x 5 ) = f 5 ( E ) f_5(x_5)=f_5(E) f5​(x5​)=f5​(E)。
  其次,不难看出,如果最短路经过第 k k k阶段的状态为 x k x_k xk​,那么,从 x k x_k xk​出发到达终点 E E E的这条路线,对于从 x k x_k xk​出发到达终点 E E E的所有路线来说,显然也是最短路线。3
  根据最短路问题的上述特点,可有下述两种解法。

1.1.2 逆序解法

  用 f k ( x k ) f_k(x_k) fk​(xk​)表示从第 k k k阶段的状态 x k x_k xk​出发到终点 E E E的最短弧长,从后向前逐步求出各点到达终点 E E E的最短路线的最短弧长,最后求出 f 1 ( x 1 ) = f 1 ( A ) f_1(x_1)=f_1(A) f1​(x1​)=f1​(A)即为所求最短路线的最短弧长。计算步骤如下:
  (1)从最后一个阶段 k = 4 k=4 k=4开始,按 f 4 f_4 f4​的定义有
f 4 ( D 1 ) = 3 , f 4 ( D 2 ) = 2 , f 4 ( D 3 ) = 2 。 f_4(D_1)=3,f_4(D_2)=2,f_4(D_3)=2。 f4​(D1​)=3,f4​(D2​)=2,f4​(D3​)=2。

  (2)当 k = 3 k=3 k=3时,因为第3阶段有4个状态,而每个状态又有两个决策可选取,所以有
f 3 ( C 1 ) = m i n { d ( C 1 , D 1 ) + f 4 ( D 1 ) d ( C 1 , D 2 ) + f 4 ( D 2 ) } = m i n { 6 + 3 8 + 2 } = 9 , f_3(C_1)=min\left\{ \begin{array}{lcl} d(C_1,D_1)+f_4(D_1)\\ d(C_1,D_2)+f_4(D_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 6+3\\ 8+2 \end{array} \right\}=9, f3​(C1​)=min{d(C1​,D1​)+f4​(D1​)d(C1​,D2​)+f4​(D2​)​}=min{6+38+2​}=9,
其中 d ( ⋅ , ⋅ ) d(\cdot,\cdot) d(⋅,⋅)表示两点间的弧长。这说明从 C 1 C_1 C1​到终点 E E E的最短弧长为9,路径为 C 1 → D 1 → E C_1 \rightarrow D_1 \rightarrow E C1​→D1​→E,决策为 u 3 ( C 1 ) = D 1 u_3(C_1)=D_1 u3​(C1​)=D1​。
f 3 ( C 2 ) = m i n { d ( C 2 , D 1 ) + f 4 ( D 1 ) d ( C 2 , D 2 ) + f 4 ( D 2 ) } = m i n { 3 + 3 5 + 2 } = 6 , f_3(C_2)=min\left\{ \begin{array}{lcl} d(C_2,D_1)+f_4(D_1)\\ d(C_2,D_2)+f_4(D_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 3+3\\ 5+2 \end{array} \right\}=6, f3​(C2​)=min{d(C2​,D1​)+f4​(D1​)d(C2​,D2​)+f4​(D2​)​}=min{3+35+2​}=6,
即从 C 2 C_2 C2​到终点 E E E的最短弧长为6,路径为 C 2 → D 1 → E C_2 \rightarrow D_1 \rightarrow E C2​→D1​→E,决策为 u 3 ( C 2 ) = D 1 u_3(C_2)=D_1 u3​(C2​)=D1​。
f 3 ( C 3 ) = m i n { d ( C 3 , D 2 ) + f 4 ( D 2 ) d ( C 3 , D 3 ) + f 4 ( D 3 ) } = m i n { 3 + 2 3 + 2 } = 5 , f_3(C_3)=min\left\{ \begin{array}{lcl} d(C_3,D_2)+f_4(D_2)\\ d(C_3,D_3)+f_4(D_3) \end{array} \right\} = min\left\{ \begin{array}{lcl} 3+2\\ 3+2 \end{array} \right\}=5, f3​(C3​)=min{d(C3​,D2​)+f4​(D2​)d(C3​,D3​)+f4​(D3​)​}=min{3+23+2​}=5,
即从 C 3 C_3 C3​到终点 E E E的最短弧长为5,路径为 C 3 → D 2 ( 或 D 3 ) → E C_3 \rightarrow D_2(或D_3) \rightarrow E C3​→D2​(或D3​)→E,决策为 u 3 ( C 3 ) = D 2 ( 或 D 3 ) u_3(C_3)=D_2(或D_3) u3​(C3​)=D2​(或D3​)。
f 3 ( C 4 ) = m i n { d ( C 4 , D 2 ) + f 4 ( D 2 ) d ( C 4 , D 3 ) + f 4 ( D 3 ) } = m i n { 8 + 2 4 + 2 } = 6 , f_3(C_4)=min\left\{ \begin{array}{lcl} d(C_4,D_2)+f_4(D_2)\\ d(C_4,D_3)+f_4(D_3) \end{array} \right\} = min\left\{ \begin{array}{lcl} 8+2\\ 4+2 \end{array} \right\}=6, f3​(C4​)=min{d(C4​,D2​)+f4​(D2​)d(C4​,D3​)+f4​(D3​)​}=min{8+24+2​}=6,
即从 C 4 C_4 C4​到终点 E E E的最短弧长为6,路径为 C 4 → D 3 → E C_4 \rightarrow D_3 \rightarrow E C4​→D3​→E,决策为 u 3 ( C 4 ) = D 3 u_3(C_4)=D_3 u3​(C4​)=D3​。

  (3)当 k = 2 k=2 k=2时,由于第2阶段有2个状态,每个状态又有3个决策可选,故有
f 2 ( B 1 ) = m i n { d ( B 1 , C 1 ) + f 4 ( C 1 ) d ( B 1 , C 2 ) + f 4 ( C 2 ) d ( B 1 , C 3 ) + f 4 ( C 3 ) } = m i n { 1 + 9 3 + 6 6 + 5 } = 9 , f_2(B_1)=min\left\{ \begin{array}{lcl} d(B_1,C_1)+f_4(C_1) \\ d(B_1,C_2)+f_4(C_2) \\ d(B_1,C_3)+f_4(C_3) \end{array} \right\} = min\left\{ \begin{array}{lcl} 1+9 \\ 3+6 \\ 6+5 \end{array} \right\}=9, f2​(B1​)=min⎩⎨⎧​d(B1​,C1​)+f4​(C1​)d(B1​,C2​)+f4​(C2​)d(B1​,C3​)+f4​(C3​)​⎭⎬⎫​=min⎩⎨⎧​1+93+66+5​⎭⎬⎫​=9,
即从 B 1 B_1 B1​到终点 E E E的最短弧长为9,路径为 B 1 → C 2 → D 1 → E B_1 \rightarrow C_2 \rightarrow D_1 \rightarrow E B1​→C2​→D1​→E,决策为 u 2 ( B 1 ) = C 2 u_2(B_1)=C_2 u2​(B1​)=C2​, u 3 ( C 2 ) = D 1 u_3(C_2)=D_1 u3​(C2​)=D1​, u 4 ( D 1 ) = E u_4(D_1)=E u4​(D1​)=E。
f 2 ( B 2 ) = m i n { d ( B 2 , C 2 ) + f 4 ( C 2 ) d ( B 2 , C 3 ) + f 4 ( C 3 ) d ( B 2 , C 4 ) + f 4 ( C 4 ) } = m i n { 8 + 6 7 + 5 6 + 6 } = 12 , f_2(B_2)=min\left\{ \begin{array}{lcl} d(B_2,C_2)+f_4(C_2) \\ d(B_2,C_3)+f_4(C_3) \\ d(B_2,C_4)+f_4(C_4) \end{array} \right\} = min\left\{ \begin{array}{lcl} 8+6 \\ 7+5 \\ 6+6 \end{array} \right\}=12, f2​(B2​)=min⎩⎨⎧​d(B2​,C2​)+f4​(C2​)d(B2​,C3​)+f4​(C3​)d(B2​,C4​)+f4​(C4​)​⎭⎬⎫​=min⎩⎨⎧​8+67+56+6​⎭⎬⎫​=12,
即从 B 2 B_2 B2​到终点 E E E的最短弧长为12,路径为 B 2 → C 3 → D 2 ( 或 D 3 ) → E B_2 \rightarrow C_3 \rightarrow D_2(或D_3) \rightarrow E B2​→C3​→D2​(或D3​)→E,或 B 2 → C 4 → D 3 → E B_2 \rightarrow C_4 \rightarrow D_3 \rightarrow E B2​→C4​→D3​→E,决策为 u 2 ( B 2 ) = C 3 ) u_2(B_2)=C_3) u2​(B2​)=C3​), u 3 ( C 3 ) = D 2 ( 或 D 3 ) u_3(C_3)=D_2(或D_3) u3​(C3​)=D2​(或D3​), u 4 ( D 2 ) = E u_4(D_2)=E u4​(D2​)=E;或 u 2 ( B 2 ) = C 4 u_2(B_2)=C_4 u2​(B2​)=C4​, u 3 ( C 4 ) = D 3 u_3(C_4)=D_3 u3​(C4​)=D3​, u 4 ( D 3 ) = E u_4(D_3)=E u4​(D3​)=E。

  (4)当 k = 1 k=1 k=1时,有
f 1 ( A ) = m i n { d ( A , B 1 ) + f 4 ( B 1 ) d ( A , B 2 ) + f 4 ( B 2 ) } = m i n { 5 + 9 3 + 12 } = 14 , f_1(A)=min\left\{ \begin{array}{lcl} d(A,B_1)+f_4(B_1) \\ d(A,B_2)+f_4(B_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 5+9 \\ 3+12 \end{array} \right\}=14, f1​(A)=min{d(A,B1​)+f4​(B1​)d(A,B2​)+f4​(B2​)​}=min{5+93+12​}=14,
即从 A A A到终点 E E E的最短弧长为14,路径为 A → B 1 → C 2 → D 1 → E A \rightarrow B_1 \rightarrow C_2 \rightarrow D_1 \rightarrow E A→B1​→C2​→D1​→E,决策为 u 1 ( A ) = B 1 u_1(A)=B_1 u1​(A)=B1​, u 2 ( B 1 ) = C 2 u_2(B_1)=C_2 u2​(B1​)=C2​, u 3 ( C 2 ) = D 1 u_3(C_2)=D_1 u3​(C2​)=D1​, u 4 ( D 1 ) = E u_4(D_1)=E u4​(D1​)=E。

  上述解法的四个步骤可归纳为下述递推公式:
{ f k ( x k ) = min ⁡ u k ∈ D k { d ( x k , x k + 1 ) + f k + 1 ( x k + 1 ) } ; f 5 ( x 5 ) = 0 , k = 4 , 3 , 2 , 1 \left\{ \begin{array}{lcl} f_k(x_k) = \min \limits_{u_k \in D_k} \{ d(x_k,x_{k+1}) + f_{k+1}(x_{k+1})\} ;\\ f_5(x_5)=0, k=4,3,2,1 \end{array} \right. {fk​(xk​)=uk​∈Dk​min​{d(xk​,xk+1​)+fk+1​(xk+1​)};f5​(x5​)=0,k=4,3,2,1​
其中 x k + 1 = u k ( x k ) x_{k+1}=u_k(x_k) xk+1​=uk​(xk​),即从状态 x k x_k xk​出发,采取决策 u k u_k uk​到达下一状态 x k + 1 x_{k+1} xk+1​; D k D_k Dk​表示从状态 x k x_k xk​出发的所有可能选取的决策的集合;而 f 5 ( x 5 ) = 0 f_5(x_5)=0 f5​(x5​)=0称为边界条件,因为状态 x 5 = E x_5=E x5​=E已是终点。

  这个递推公式就是最短路问题的数学模型,也叫动态规划方程。

  由于这种算法的寻优方向与过程的行进方向刚好相反,故称逆序解法。

1.1.3 顺序解法

  用 f k ( x k ) f_k(x_k) fk​(xk​)表示从起点 A A A出发到第 k k k阶段的状态 x k x_k xk​的最短弧长,从前向后逐步求出起点 A A A到达各阶段起点的最短弧长,最后也可求出从起点 A A A到终点 E E E的最短弧长及其对应的路径。计算步骤如下:
  按定义显然有 f x ( x 1 ) = f 1 ( A ) = 0 fx_(x_1)=f_1(A) = 0 fx(​x1​)=f1​(A)=0,称它为边界条件。以下从第二阶段 k = 2 k=2 k=2开始计算。
  (1)当 k = 2 k=2 k=2时,按 f 2 f_2 f2​的定义有
f 2 ( B 1 ) = 5 , f 2 ( B 2 ) = 3 。 f_2(B_1)=5,f_2(B_2)=3。 f2​(B1​)=5,f2​(B2​)=3。

  (2)当 k = 3 k=3 k=3时,按 f 3 f_3 f3​的定义有
f 3 ( C 1 ) = d ( B 1 , C 1 ) + f 2 ( B 1 ) = 1 + 5 = 6 , f_3(C_1)=d(B_1,C_1)+f_2(B_1)=1+5=6, f3​(C1​)=d(B1​,C1​)+f2​(B1​)=1+5=6,

f 3 ( C 2 ) = m i n { d ( B 1 , C 2 ) + f 2 ( B 1 ) d ( B 2 , C 2 ) + f 2 ( B 2 ) } = m i n { 3 + 5 8 + 3 } = 8 , f_3(C_2)=min\left\{ \begin{array}{lcl} d(B_1,C_2)+f_2(B_1)\\ d(B_2,C_2)+f_2(B_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 3+5\\ 8+3 \end{array} \right\}=8, f3​(C2​)=min{d(B1​,C2​)+f2​(B1​)d(B2​,C2​)+f2​(B2​)​}=min{3+58+3​}=8,

f 3 ( C 3 ) = m i n { d ( B 1 , C 3 ) + f 4 ( B 1 ) d ( B 2 , C 3 ) + f 4 ( B 2 ) } = m i n { 6 + 5 7 + 3 } = 10 , f_3(C_3)=min\left\{ \begin{array}{lcl} d(B_1,C_3)+f_4(B_1)\\ d(B_2,C_3)+f_4(B_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 6+5\\ 7+3 \end{array} \right\}=10, f3​(C3​)=min{d(B1​,C3​)+f4​(B1​)d(B2​,C3​)+f4​(B2​)​}=min{6+57+3​}=10,

f 3 ( C 4 ) = d ( B 2 , C 4 ) + f 2 ( B 2 ) = 6 + 3 = 9. f_3(C_4)=d(B_2,C_4)+f_2(B_2)=6+3=9. f3​(C4​)=d(B2​,C4​)+f2​(B2​)=6+3=9.

  (3)当 k = 4 k=4 k=4时,按 f 4 f_4 f4​的定义分别有
f 4 ( D 1 ) = m i n { d ( C 1 , D 1 ) + f 3 ( C 1 ) d ( C 2 , D 1 ) + f 3 ( C 2 ) } = m i n { 6 + 6 3 + 8 } = 11 , f_4(D_1)=min\left\{ \begin{array}{lcl} d(C_1,D_1)+f_3(C_1) \\ d(C_2,D_1)+f_3(C_2) \end{array} \right\} = min\left\{ \begin{array}{lcl} 6+6 \\ 3+8 \end{array} \right\}=11, f4​(D1​)=min{d(C1​,D1​)+f3​(C1​)d(C2​,D1​)+f3​(C2​)​}=min{6+63+8​}=11,

f 4 ( D 2 ) = m i n { d ( C 1 , D 2 ) + f 3 ( C 1 ) d ( C 2 , D 2 ) + f 3 ( C 2 ) d ( C 3 , D 2 ) + f 3 ( C 3 ) d ( C 4 , D 2 ) + f 3 ( C 4 ) } = m i n { 8 + 6 5 + 8 3 + 10 8 + 9 } = 13 , f_4(D_2)=min\left\{ \begin{array}{lcl} d(C_1,D_2)+f_3(C_1) \\ d(C_2,D_2)+f_3(C_2) \\ d(C_3,D_2)+f_3(C_3) \\ d(C_4,D_2)+f_3(C_4) \end{array} \right\} = min\left\{ \begin{array}{lcl} 8+6 \\ 5+8 \\ 3+10 \\ 8+9 \end{array} \right\}=13, f4​(D2​)=min⎩⎪⎪⎨⎪⎪⎧​d(C1​,D2​)+f3​(C1​)d(C2​,D2​)+f3​(C2​)d(C3​,D2​)+f3​(C3​)d(C4​,D2​)+f3​(C4​)​⎭⎪⎪⎬⎪⎪⎫​=min⎩⎪⎪⎨⎪⎪⎧​8+65+83+108+9​⎭⎪⎪⎬⎪⎪⎫​=13,

f 4 ( D 3 ) = m i n { d ( C 3 , D 3 ) + f 3 ( C 3 d ( C 4 , D 3 ) + f 3 ( C 4 ) } = m i n { 3 + 10 4 + 9 } = 13 , f_4(D_3)=min\left\{ \begin{array}{lcl} d(C_3,D_3)+f_3(C_3 \\ d(C_4,D_3)+f_3(C_4) \end{array} \right\} = min\left\{ \begin{array}{lcl} 3+10 \\ 4+9 \end{array} \right\}=13, f4​(D3​)=min{d(C3​,D3​)+f3​(C3​d(C4​,D3​)+f3​(C4​)​}=min{3+104+9​}=13,

  (4)当 k = 5 k=5 k=5时,按 f 5 f_5 f5​的定义有
f 5 ( E ) = m i n { d ( D 1 , E ) + f 4 ( D 1 ) d ( D 2 , E ) + f 4 ( D 2 ) d ( D 3 , E ) + f 4 ( D 3 ) } = m i n { 3 + 11 2 + 13 2 + 13 } = 14 , f_5(E)=min\left\{ \begin{array}{lcl} d(D_1,E)+f_4(D_1) \\ d(D_2,E)+f_4(D_2) \\ d(D_3,E)+f_4(D_3) \end{array} \right\} = min\left\{ \begin{array}{lcl} 3+11 \\ 2+13 \\ 2+13 \end{array} \right\}=14, f5​(E)=min⎩⎨⎧​d(D1​,E)+f4​(D1​)d(D2​,E)+f4​(D2​)d(D3​,E)+f4​(D3​)​⎭⎬⎫​=min⎩⎨⎧​3+112+132+13​⎭⎬⎫​=14,
f 5 ( E ) = 14 f_5(E)=14 f5​(E)=14为所求的最短弧长,路径为 A → B 1 → C 2 → D 1 → E A \rightarrow B_1 \rightarrow C_2 \rightarrow D_1 \rightarrow E A→B1​→C2​→D1​→E,决策为 u 1 ( A ) = B 1 u_1(A)=B_1 u1​(A)=B1​, u 2 ( B 1 ) = C 2 u_2(B_1)=C_2 u2​(B1​)=C2​, u 3 ( C 2 ) = D 1 u_3(C_2)=D_1 u3​(C2​)=D1​, u 4 ( D 1 ) = E u_4(D_1)=E u4​(D1​)=E,与逆序解法的结果完全一样。

  上述解法也可写成统一的递推公式形式:
{ f k ( x k ) = min ⁡ u k − 1 ∈ D k − 1 { d ( u k − 1 , x k ) + f k − 1 ( x k − 1 ) } ; f 1 ( x 1 ) = 0 , k = 2 , 3 , 4 , 5. \left\{ \begin{array}{lcl} f_k(x_k) = \min \limits_{u_{k-1} \in D_{k-1}} \{ d(u_{k-1},x_k) + f_{k-1}(x_{k-1})\} ;\\ f_1(x_1)=0, k=2,3,4,5. \end{array} \right. {fk​(xk​)=uk−1​∈Dk−1​min​{d(uk−1​,xk​)+fk−1​(xk−1​)};f1​(x1​)=0,k=2,3,4,5.​
其中 x k − 1 = u k − 1 ( x k ) x_{k-1}=u_{k-1}(x_k) xk−1​=uk−1​(xk​),即从第 k k k阶段的起点状态 x k x_k xk​通过 u k − 1 u_{k-1} uk−1​去寻找第 k − 1 k-1 k−1阶段的起点 x k − 1 x_{k-1} xk−1​, f 1 ( x 1 ) = 0 f_1(x_1)=0 f1​(x1​)=0称为边界条件。

  由于这种算法的寻优方向与过程的行进方向相同,故称顺序解法。


  1. 后部最优指标函数 ↩︎

  2. 前部最优指标函数 ↩︎

  3. 最优化原理 ↩︎

动态规划求解最短路径问题 现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如下图所示,请找出从起点A到终点E的最短距离。 二、算法描述 利用动态规划的思想,求解最短路径问题,算法过程如下: 1.节点标号。 将节点A到节点E进行标号,A节点序号0,B1节点序号1......以此类型,节点E序号10。 2.描述最优解方程。 令f(i)表示从起点0到节点i的最短距离,节点j为与节点i相连接的节点,d[j][i]表示节点j与节点i之间的距离,则: f(i) = mi.. 阅读详情

相关推荐

动态规划之最优化原理与动态规划方程

目录动态规划引言1 动态规划原理1.1 最短路问题及其解法1.2 动态规划的基本概念和术语1.3 最优化原理与动态规划方程1.3.1 最优化原理1.3.2 逆序动态规划方程1.3.3 顺序动态规划方程1.4 动态规划基本定理 动态规划 引言   1951年,美国数学家贝尔曼(R.Bellman)等根据一类所谓多阶段决策问题的特性,提出了解决这类问题的“最优化原理”,并研究了许多实际问题,从而创立了最优化的一个新分支----动态规划。   动态规划没有统一的数学模型,对不同的问题要采用不同的方法去建立它们的模

6553

最短路与动态规划(一)

运筹学有时候面临的一种场景是求最短路(shortest path)问题:比如城市交通的网络设计,芯片的表面设计等。解决这类问题常用离散动态规划(discrete dynamic)方法。今天我们就来学习这种场景以及解决的算法。1抽象为模型我们用三个与现实场景十分相似的例子来介绍模型以及相关术语。利特尔维尔交通规划假设你是利特尔维尔城市的交通工程师,下图是该城市的市区街道规划图,图中标注了道路是单行道...

咔咔响 992

动态最短路_动态最短路算法程序_

利用线形规划实现最短路路径找到相对最优解

C++算法篇 动态规划----最短路

只有五行的Floyd最短路算法 此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法。Robert W.Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气公...

流年的博客 3554

等保: Postgresql配置ssl链接

等保: postgresql配置ssl链接完整方案和避坑指南

weixin_43557605的博客 4382

计量经济学tempdisagg的python库:年度时序变月度

计量经济学tempdisagg的python库:年度时序变月度

素质云笔记 1528

【算法】用动态规划求解最短路径问题

1. 问题描述 给定先把图 G(V,E),用动态规划的算法求一条从起点到终点的路径,使这条路径上经过的所 有边的权重之和最小。 2. 算法描述 2.1 动态规划描述 动态规划是一种用来解决一类最优化问题的算法思想,将一个复杂的问题分解成若干个子问 题,通过综合子问题的最优解来得到原问题的最优解。动态规划会将每个求解过的子问题的 解记录下来,这样下一次碰到同样的子问题时,就可以直接使用之前记录的结果。 在动态规划中,我们通常使用两种办法来求解:递推的自底向上办法(Bottom-up) 和递归的 自顶向下办法

zjutkarma的博客 1万+

ANSYS Help USER300

USER 300概述单元描述输入数据假设与限制条件 概述 单元描述 Mechanical APDL提供了一种方便的方法来创建自定义的单元,命名为USER300,可以创建几乎任何单元类型。 UserElem子程序为Mechanical APDL在单元类型创建上提供了一个接口,可传递用户自定义单元创建时所需的所有数据,然后从自定义单元返回所有数据和结果,以更新数据库和文件。因为通过接口可以访问数据库和文件信息,所以很少需要了解Mechanical APDL数据库程序和文件结构。该接口还提供了获取Mechanic

weixin_47019765的博客 2235

图与网络02—最短路问题

图与网络02—最短路问题 上一篇blog主要是基础内容,接下来就是来解决实际问题了,“亿点点慢慢来”,争取敲一篇就搞懂一篇! 图与网络分析图与网络02—最短路问题前言一、固定起点的最短路1.Dijkstra(迪杰斯特拉)标号算法二、所有顶点对之间最短路的Floyd算法1.引入库2.读入数据三、最短路应用范例四、最短路问题的0-1整数规划模型 前言 咕咕~~ 一、固定起点的最短路 [定义2.1] 设图GGG是赋权图,ΓΓΓ为GGG中的一条路。则称ΓΓΓ的各边权之和为路ΓΓΓ的长度。 对于连通的赋权图GGG

weixin_51128278的博客 2699

OpenClaw智能体应用第一集--飞书多智能体配置

本文介绍了智能体(Agent)的核心概念与配置实践。Agent作为独立作用域的"大脑",包含模型(认知引擎)、记忆系统(短期/长期记忆)、人设(角色定义)、工具(外部能力调用)、规划执行(任务拆解)、运行环境等核心要素。每个Agent拥有唯一agentId标识,通过accountId区分渠道账号,Binding机制实现消息路由。实践部分展示了通过命令行配置多个智能体(如writer)的过程,包括插件注册和工具加载。系统支持多Agent架构,可根据不同场景需求灵活配置专属智能体。

weixin_44626085的博客 1747

STM32CubeMX——循迹传感器TCRT5000的使用

前言 人生如逆旅,我亦是行人。 ————苏轼《临江仙·送钱穆父》 一、介绍 TCRT5000描述:(带有晶体管输出的反射光学传感器) TCRT5000是一种反射式光学传感器,它包括一个红外发射器和一个3.5mm引线封装的光电晶体管,可阻挡可见光。还具有1mA 典型被测输出电流,2.5mm峰值工作距离,可应用传感与仪表,工业等行业。 TCRT5000具有紧凑的结构,其中发射光源和探测器布置在同一方向,通过使用来自物体的反射红外光束来感知物体的存在。工作波长为950毫米,探测器由光电晶体管组成

W_Oilpicture的博客 1万+

最短跳跃步数问题(C++实现)(奇怪的电梯)

对于这个问题(最短跳跃步数问题),BFS是最优的解决方案,因为它能保证在O(n)时间内找到最短路径。DFS虽然可行,但在最坏情况下性能较差。动态规划的实现相对复杂,且时间复杂度较高。在实际编程竞赛中,推荐使用BFS来解决这类最短路径问题。对于"奇怪的电梯"这类最短路径问题,BFS是最佳选择,因为它能保证找到最短路径且时间复杂度较低。DFS虽然实现简单,但在最坏情况下性能较差。在实际应用中,建议优先使用BFS解法。🐍🐍🐍。

wsys_yysn的博客 1244

使用Gitlab 搭建私有镜像仓库(外置Nginx)

为了让团队尽快使用Gitlab的CI进行工作,必须做好Gitlab的初始化工作,大家都知道拉取镜像由于某些原因,会比较慢,因此构建自己的私有镜像仓库就成为了关键的一步。当然私有镜像仓库的搭建有很多种方式,这里直接使用Gitlab提供的镜像仓库功能。一揽子解决方案比较香。gitlab真的越来越好用了,有了这个镜像仓,也没必要再使用三方的镜像仓库了。Devops 真好用!

网尘的技术专栏 1829

跳跃游戏全系列解析:贪心、动态规划与BFS的思维模型

算法面试中,贪心算法与动态规划是高频考察点,而“跳跃游戏”系列正是将两者与图论BFS巧妙结合的经典题型。从判断可达性的覆盖区间维护,到求解最少步数的区间扩展,再到双向跳跃时的图遍历建模,这一系列题目帮助开发者建立从线性推导到状态转移的完整思维链路。无论是LeetCode 55的贪心经典,1345的BFS最短路,还是1340的记忆化DP,都体现了同一问题在不同约束下的算法选型逻辑。理解这些模型不仅能提升刷题效率,更能应用于路径规划、资源调度等真实工程场景。本文以跳跃游戏家族为主线,拆解每道题的题眼与解法,助你

weixin_34008805的博客 409

AMBA-CHI协议详解(一)

CHI体系结构是一种可扩展、一致性的集线器接口和片上互联,可由多个组件使用。CHI体系结构允许根据性能、功耗和面积系统要求灵活地进行组件连接拓扑。硬件一致性使系统组件能够共享内存,而无需维护软件缓存以保持一致性。如果两个组件对同一存储器位置的写入可被所有组件以相同的顺序观察到,则存储器区域是一致的。

Crazzy_M的博客 1万+

使用 MATLAB/Simulink 搭建一个步进电机细分控制系统的仿真模型

步进电机(Stepper Motor)是一种将电脉冲信号转换为角位移或线位移的执行元件,广泛应用于数控机床、3D打印、机器人、精密仪器等领域。其特点是开环控制、定位精度高、响应快、无累积误差。然而,传统步进电机在整步或半步运行时存在振动大、噪音高、转矩波动明显等问题。为了解决这些问题,细分控制技术被广泛采用。细分控制通过对绕组电流进行精确控制,使转子在两个整步之间实现平滑移动,从而提升电机的运行平稳性和位置精度。本教程将带你使用搭建一个步进电机细分控制系统的仿真模型,并通过仿真分析其。

amy_mhd的博客 427

图论 24. Floyd算法(多源最短路问题)

​。

m0_49844155的博客 1281

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

动态规划解最短路:状态建模与逆序/顺序解法本质

最短路径问题本质上是带约束的最优决策过程,其核心在于将现实场景建模为可计算的状态空间。动态规划并非固定公式套用,而是通过合理定义状态(如节点+时间模、步数、电量等多维组合)来捕获决策依赖性;逆序解法利用目标导向实现无后效性,适合资源约束与反向推理场景;顺序解法依托DAG结构与局部可预测性,支持增量更新与实时响应。技术价值体现在状态压缩、边界控制与工程鲁棒性上,广泛应用于物流调度、交通导航、芯片布线等系统。本文聚焦‘状态定义’与‘逆序解法’两大关键认知突破点,揭示最短路DP的建模本质。

weixin_34152820的博客 354

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

经典解法(动态规划-最短路线问题)

在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。三角形的行数大于1小于等于100,数字为 0 – 99。从num(i, j)出发,下一步只能走num(i+1,j)或者num(i+1, j+1)。我们这里使用num[i][j]来储存数据;cnt[i][j]来储存求和之后的数据(后面会讲到)写程序过程中我们不难发现,求和cnt[i][j]可以改成一维数组cnt[i]来节省空间;利用行列去标记每两个索引标记的数据(这里我们使用i,j来表示行和列)ans来储存最后的最大值;

2301_80489334的博客 3448

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

动态规划算法(四):最短路径问题

最短路径问题通常是指在一个图中,找到从一个节点到另一个节点的最短路径。图可以是有向图或无向图,边的权重可以是正数、负数或零。本文介绍了动态规划在最短路径问题中的应用,重点讲解了通过 Dijkstra 算法来求解单源最短路径问题。通过 Java 代码示例,展示了如何实现最短路径计算,并与其他经典算法进行了比较。希望这篇文章能够帮助你深入理解最短路径问题及其动态规划解法。

一碗黄焖鸡三碗米饭的博客 1591

求解带权有向图的最短路径【动态规划】

问题说明 一个图G=(V,E)是多段图,是指顶点集V划分成k个互不相交的子集Vi,使得E中任意一条边(u,v)必有u,v属于两个不同的子集。A是源点,E是终点。 1 动态规划 1.1 动态规划逆序解法 从后向前,E->A。next数组储存路径上一个顶点的后继节点。 #include<bits/stdc++.h> using namespace std; #define MAX 21 #define INF 0x3f3f3f3f //int型整数的无穷大 //问题表示 int n; //顶

一亿少女的梦 2810

最短路问题(动态规划解法)

题目描述 下图表示城市之间的交通路网,线段上的数字表示费用,单向通行由A->E。试用动态规划的最优化原理求出A->E的最省费用 输入 输入整数n表示有n个城市 然后是n行n列数据,第i行n个数据表示城市i到各个城市之间的距离,如果没有路径到达该城市,则数据为0 输出 输出最短路径值及经过的城市,格式见样例 样例输入Copy 10 0 2 5 1 0 0 0 0 0 0 0 0 0 0 12 14 0 0 0 0 0 0 0 0 6..

Syclus的博客 1895

动态规划

1 引言 1.1 动态规划的发展及研究内容 例 1 最短路线问题 例 2 生产计划问题 2 基本概念、基本方程和计算方法 2.1 动态规划的基本概念和基本方程 2.1.1 阶段 2.1.2 状态 2.1.3 决策 ...

冷月无声的博客 7714

约会怎么走到目的地最近呢?一文讲清所有最短路算法问题

约会怎么走到目的地最近呢?一文讲清所有最短路算法问题

congfen214的博客 2640

动态规划求解带权有向图最短路径问题

求带权有向图的最短路径问题,最通用也是最容易想到的就是用Dijkstra算法求解,但是有一部分特定的带权有向图最短路径问题也可以用动态规划求解。 这道题看到第一眼很明显就可以生成一张图,然后用带权图的最短路径搜索来做,即Dijkstra算法,但是实际上也可以用动态规划来做,而且这种题还是非常典型的动态规划题目。 得出一个动态规划算法的要点就是想出状态转移方程,这道题的状态转移方程非常明...

o83290102o5的博客 4044

动态规划求解多段图问题

c++实现动态规划求解多段图问题(非递归)

yijiangzhao的博客 4180
上一篇: WebRTC噪声抑制算法:使用多特征建模分析语音/噪声似然性的噪声抑制方法
下一篇: 动态规划之基本概念和术语
Rain松
博客等级 码龄15年 361粉丝 111原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值