二、马尔可夫决策过程与贝尔曼方程

1 马尔可夫性质

马尔可夫性质(Markov property)是指一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态。即: P ( S t + 1 ∣ S t , S t − 1 , . . . , S 1 ) = P ( S t + 1 ∣ S t ) P(S_{t+1}|S_t,S_{t-1},...,S_1)=P(S_{t+1}|S_t) P(St+1St,St1,...,S1)=P(St+1St)

2 马尔可夫过程

马尔可夫链/过程是满足马尔可夫性质的随机过程,为一个两元组 < S , P > <S,P> <S,P>

  • S S S 是状态集合 s ∈ S s \in S sS
  • P P P是状态转移矩阵。用状态转移矩阵 P P P来描述在状态 s t s_t st到达其他状态的概率 p ( s t + 1 ∣ s t ) p(s_{t+1} \mid s_t) p(st+1st)
    P = ( p ( s 1 ∣ s 1 ) p ( s 2 ∣ s 1 ) … p ( s N ∣ s 1 ) p ( s 1 ∣ s 2 ) p ( s 2 ∣ s 2 ) … p ( s N ∣ s 2 ) ⋮ ⋮ ⋱ ⋮ p ( s 1 ∣ s N ) p ( s 2 ∣ s N ) … p ( s N ∣ s N ) ) \boldsymbol{P}=\left(\begin{array}{cccc} p\left(s_{1} \mid s_{1}\right) & p\left(s_{2} \mid s_{1}\right) & \ldots & p\left(s_{N} \mid s_{1}\right) \\ p\left(s_{1} \mid s_{2}\right) & p\left(s_{2} \mid s_{2}\right) & \ldots & p\left(s_{N} \mid s_{2}\right) \\ \vdots & \vdots & \ddots & \vdots \\ p\left(s_{1} \mid s_{N}\right) & p\left(s_{2} \mid s_{N}\right) & \ldots & p\left(s_{N} \mid s_{N}\right) \end{array}\right) P= p(s1s1)p(s1s2)p(s1sN)p(s2s1)p(s2s2)p(s2sN)p(sNs1)p(sNs2)p(sNsN)

3 马尔可夫奖励过程(Markov reward process, MRP)

马尔可夫奖励过程=马尔可夫链+奖励,为一个四元组 < S , P , R , γ > <S,P,R,\gamma> <S,P,R,γ>

  • S S S 是状态集合 s ∈ S s \in S sS
  • P P P是状态转移矩阵。用状态转移矩阵 P P P来描述在状态 s t s_t st到达其他状态的概率 p ( s t + 1 ∣ s t ) p(s_{t+1} \mid s_t) p(st+1st)
  • R R R是奖励函数, R ( s t = s ) = E [ r t ∣ s t = s ] R(s_t=s)=\mathbb{E} [r_t \mid s_t = s] R(st=s)=E[rtst=s]
  • γ \gamma γ是折扣率。

3.1 MRP的贝尔曼方程

MRP中引入了奖励的概念,因此对于任意状态 ∀ s ∈ S \forall s \in S sS可以计算该状态的回报 v ( s ) v(s) v(s),推导出MRP贝尔曼方程如下:
v π ( s ) = E [ G t ∣ S t = s ] = E [ R t + 1 + γ G t + 1 ∣ S t = s ] = E [ R t + 1 ∣ S t = s ] + γ E [ G t + 1 ∣ S t = s ] = R ( s ) + γ ∑ s ′ p ( s ′ ∣ s ) v ( s ′ ) \begin{align} v_\pi(s) &=\mathbb{E}[G_t|S_t=s] \\ &=\mathbb{E}[R_{t+1}+\gamma G_{t+1} |S_t=s]\\ &=\textcolor{red}{\mathbb{E} [R_{t+1}|S_t=s]}+ \gamma \textcolor{blue}{\mathbb{E}[G_{t+1} |S_t=s]} \\ &=R(s)+\gamma \sum_{s'} p(s' \mid s) v(s') \end{align} vπ(s)=E[GtSt=s]=E[Rt+1+γGt+1St=s]=E[Rt+1St=s]+γE[Gt+1St=s]=R(s)+γsp(ss)v(s)

除了一般形式,我们还需要矩阵形式:
v = r + γ P v \begin{align} \bold{v} = \bold{r}+ \gamma \bold{P} \bold{v}\end{align} v=r+γPv
我们可以把它展开(假设有4个状态)
[ v π ( s 1 ) v π ( s 2 ) v π ( s 3 ) v π ( s 4 ) ] ⏟ v π = [ r π ( s 1 ) r π ( s 2 ) r π ( s 3 ) r π ( s 4 ) ] ⏟ r π + γ [ p π ( s 1 ∣ s 1 ) p π ( s 2 ∣ s 1 ) p π ( s 3 ∣ s 1 ) p π ( s 4 ∣ s 1 ) p π ( s 1 ∣ s 2 ) p π ( s 2 ∣ s 2 ) p π ( s 3 ∣ s 2 ) p π ( s 4 ∣ s 2 ) p π ( s 1 ∣ s 3 ) p π ( s 2 ∣ s 3 ) p π ( s 3 ∣ s 3 ) p π ( s 4 ∣ s 3 ) p π ( s 1 ∣ s 4 ) p π ( s 2 ∣ s 4 ) p π ( s 3 ∣ s 4 ) p π ( s 4 ∣ s 4 ) ] ⏟ P π [ v π ( s 1 ) v π ( s 2 ) v π ( s 3 ) v π ( s 4 ) ] ⏟ v π . \underbrace{\left[\begin{array}{l} v_\pi\left(s_1\right) \\ v_\pi\left(s_2\right) \\ v_\pi\left(s_3\right) \\ v_\pi\left(s_4\right) \end{array}\right]}_{v_\pi}=\underbrace{\left[\begin{array}{l} r_\pi\left(s_1\right) \\ r_\pi\left(s_2\right) \\ r_\pi\left(s_3\right) \\ r_\pi\left(s_4\right) \end{array}\right]}_{r_\pi}+\gamma \underbrace{\left[\begin{array}{llll} p_\pi\left(s_1 \mid s_1\right) & p_\pi\left(s_2 \mid s_1\right) & p_\pi\left(s_3 \mid s_1\right) & p_\pi\left(s_4 \mid s_1\right) \\ p_\pi\left(s_1 \mid s_2\right) & p_\pi\left(s_2 \mid s_2\right) & p_\pi\left(s_3 \mid s_2\right) & p_\pi\left(s_4 \mid s_2\right) \\ p_\pi\left(s_1 \mid s_3\right) & p_\pi\left(s_2 \mid s_3\right) & p_\pi\left(s_3 \mid s_3\right) & p_\pi\left(s_4 \mid s_3\right) \\ p_\pi\left(s_1 \mid s_4\right) & p_\pi\left(s_2 \mid s_4\right) & p_\pi\left(s_3 \mid s_4\right) & p_\pi\left(s_4 \mid s_4\right) \end{array}\right]}_{P_\pi} \underbrace{\left[\begin{array}{l} v_\pi\left(s_1\right) \\ v_\pi\left(s_2\right) \\ v_\pi\left(s_3\right) \\ v_\pi\left(s_4\right) \end{array}\right]}_{v_\pi} . vπ vπ(s1)vπ(s2)vπ(s3)vπ(s4) =rπ rπ(s1)rπ(s2)rπ(s3)rπ(s4) +γPπ pπ(s1s1)pπ(s1s2)pπ(s1s3)pπ(s1s4)pπ(s2s1)pπ(s2s2)pπ(s2s3)pπ(s2s4)pπ(s3s1)pπ(s3s2)pπ(s3s3)pπ(s3s4)pπ(s4s1)pπ(s4s2)pπ(s4s3)pπ(s4s4) vπ vπ(s1)vπ(s2)vπ(s3)vπ(s4) .

3.2 MRP的贝尔曼方程求解方法

式(5)是一个线性方程组,因此可以直接得到解析解:

v = r + γ P v ( I − γ P ) v = r v = ( I − γ P ) − 1 r \begin{align} \bold{v}=\bold{r}+\gamma \bold{P}\bold{v}\\ ({\bold{I}}-\gamma \bold{P}) \bold{v}=\bold{r} \\ \bold{v}=(\bold{I}-\gamma \bold{P})^{-1} \bold{r} \end{align} v=r+γPv(IγP)v=rv=(IγP)1r
斜体样式
从上式可知,可以通过矩阵逆运算直接求解方程,但矩阵求逆的复杂度为O(n^3),n为状态数。因此,直接求解仅适用于状态空间规模小的MRP。状态空间规模大的MRP的求解通常使用迭代法。常用的迭代方法有:动态规划(Dynamic Programming)、蒙特卡洛评估(Monte-Carlo evaluation)、时序差分学(Temporal-Difference)等

3.3 总结

MRP贝尔曼方程

  • 一般形式:
  • 矩阵形式:

求解方法:

  • 解析法:适应于规模较小的问题
  • 迭代方法:适应于规模较大的问题,常用方法有动态规划、蒙特卡洛模拟、时序差分法

4 马尔可夫决策过程(Markov decision process, MDP)

马尔可夫决策过程=马尔可夫奖励过程+动作,MDP是一个五元组 < S , A , P , R , γ > <S,A,P,R,\gamma> <S,A,P,R,γ>

  • S S S 是状态空间 s ∈ S s \in S sS
  • A A A是动作空间 a ∈ A a \in A aA
  • P P P是状态转移矩阵。用状态转移矩阵 P P P来描述,在状态 s t s_t st,采取动作 a t a_t at,到达其他状态的概率 p ( s t + 1 ∣ s t = s , a t = a ) p(s_{t+1} \mid s_t=s, a_t=a) p(st+1st=s,at=a)
  • R R R是奖励函数, R ( s t = s , a t = a ) = E [ r t ∣ s t = s , a t = a ] R(s_t=s, a_t=a)=\mathbb{E} [r_t \mid s_t = s, a_t=a] R(st=s,at=a)=E[rtst=s,at=a]
  • γ \gamma γ是折扣率。

Markov decison process中,Markov代表的是马尔可夫性质(无后效性);decision代表的是策略(Policy),在某个状态s,采取动作a的概率是 π ( a ∣ s ) = P ( a t = a ∣ s t = s ) \pi(a|s)=P(a_t=a \mid s_t = s) π(as)=P(at=ast=s);process代表的是状态转移概率

4.1 MDP状态价值函数贝尔曼方程推导

MDP中因为有了策略 π \pi π,状态价值函数 v π ( s ) v_{\pi}(s) vπ(s)是从状态s开始,执行策略所获得的回报的期望。
v π ( s ) = E [ G t ∣ S t = s ] \begin{align} v_\pi(s)=\mathbb{E}[G_t|S_t=s] \end{align} vπ(s)=E[GtSt=s]

根据状态价值的定义,推导Bellman equation:
v π ( s ) = E [ G t ∣ S t = s ] = E [ R t + 1 + γ G t + 1 ∣ S t = s ] = E [ R t + 1 ∣ S t = s ] + γ E [ G t + 1 ∣ S t = s ] = ∑ a π ( a ∣ s ) E [ R t + 1 ∣ S t = s , A t = a ] + γ ∑ s ′ E [ G t + 1 ∣ S t = s , S t + 1 = s ′ ] p ( s ′ ∣ s ) = ∑ a π ( a ∣ s ) R s a + γ ∑ s ′ v π ( s ′ ) ∑ a P s s ′ a π ( s ∣ a ) = ∑ a π ( a ∣ s ) ( R s a + γ ∑ s ′ P s s ′ a v π ( s ′ ) ) \begin{align} v_\pi(s) &=\mathbb{E}[G_t|S_t=s] \\ &=\mathbb{E}[R_{t+1}+\gamma G_{t+1} |S_t=s]\\ &=\textcolor{red}{\mathbb{E} [R_{t+1}|S_t=s]}+ \gamma \textcolor{blue}{\mathbb{E}[G_{t+1} |S_t=s]} \\ &=\textcolor{red}{ \sum_{a}{\pi(a \mid s) \mathbb{E}[R_{t+1}|S_t=s,A_t=a]}}+\gamma \textcolor{blue}{ \sum_{s'}{ \mathbb{E}[G_{t+1} | S_t=s,S_{t+1}=s' ] p(s'|s)}}\\ &=\textcolor{red}{\sum_a \pi( a \mid s)R_s^a}+ \gamma \textcolor{blue}{\sum_{s'}{v_{\pi}(s') \sum_{a}{P_{ss'}^a \pi(s|a)}}}\\ &= \sum_{a}{\pi(a \mid s)} \left( R_s^a +\gamma \sum_{s'}{P_{ss'}^a}v_{\pi}(s') \right) \end{align} vπ(s)=E[GtSt=s]=E[Rt+1+γGt+1St=s]=E[Rt+1St=s]+γE[Gt+1St=s]=aπ(as)E[Rt+1St=s,At=a]+γsE[Gt+1St=s,St+1=s]p(ss)=aπ(as)Rsa+γsvπ(s)aPssaπ(sa)=aπ(as)(Rsa+γsPssavπ(s))

除了一般形式,我们还需要矩阵形式:
v π ( s ) = ∑ a π ( a ∣ s ) ( R s a + γ ∑ s ′ P s s ′ a v π ( s ′ ) ) = ∑ a π ( a ∣ s ) R s a + γ ∑ s ′ v π ( s ′ ) ∑ a P s s ′ a π ( s ∣ a ) = r π ( s ) + γ ∑ s ′ p π ( s ′ ∣ s ) v π ( s ′ ) \begin{align} v_\pi(s) &= \sum_{a}{\pi(a \mid s)} \left( R_s^a +\gamma \sum_{s'}{P_{ss'}^a}v_{\pi}(s') \right)\\ &=\textcolor{red}{ \sum_a{\pi(a \mid s)} R_s^a }+ \gamma \textcolor{blue}{\sum_{s'}{v_{\pi}(s') \sum_{a}{P_{ss'}^a \pi(s \mid a)}}}\\ &=r_\pi (s)+\gamma \sum_{s'}{p_\pi(s' \mid s)v_\pi(s')} \end{align} vπ(s)=aπ(as)(Rsa+γsPssavπ(s))=aπ(as)Rsa+γsvπ(s)aPssaπ(sa)=rπ(s)+γspπ(ss)vπ(s)
假设状态空间为 { s i } i = 1 n \{s_i\}_{i=1}^n {si}i=1n,对 s i s_i si,其Bellman equation为:
v π ( s i ) = r π ( s i ) + γ ∑ s j p π ( s j ∣ s i ) v π ( s j ) \begin{align} v_{\pi}\left(s_{i}\right)=r_{\pi}\left(s_{i}\right)+\gamma \sum_{s_{j}} p_{\pi}\left(s_{j} \mid s_{i}\right) v_{\pi}\left(s_{j}\right)\end{align} vπ(si)=rπ(si)+γsjpπ(sjsi)vπ(sj)
将矩阵向量形式表示所有状态的Bellman equation:
v π = r π + γ P π v π \begin{align} v_\pi=r_\pi+\gamma P_\pi v_\pi\end{align} vπ=rπ+γPπvπ
其中,

  • v π = [ v π ( s 1 ) , … , v π ( s n ) ] T ∈ R n v_{\pi}=\left[v_{\pi}\left(s_{1}\right), \ldots, v_{\pi}\left(s_{n}\right)\right]^{T} \in \mathbb{R}^{n} vπ=[vπ(s1),,vπ(sn)]TRn
  • r π = [ r π ( s 1 ) , … , r π ( s n ) ] T ∈ R n r_{\pi}=\left[r_{\pi}\left(s_{1}\right), \ldots, r_{\pi}\left(s_{n}\right)\right]^{T} \in \mathbb{R}^{n} rπ=[rπ(s1),,rπ(sn)]TRn
  • P π ∈ R n ∗ n P_\pi \in \mathbb{R}^{n*n} PπRnn,where [ P π ] i j = p π ( s j ∣ s i ) [P_\pi ]_{ij}= p_\pi(s_j|s_i) [Pπ]ij=pπ(sjsi),为状态转移矩阵

4.2 MDP动作价值函数

动作价值函数定义为:
q π ( s , a ) = E [ G t ∣ S t = s , A t = a ] = ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( s ′ ) \begin{align} q_\pi{(s,a)} &=\mathbb{E}[G_t|S_t=s,A_t=a] \\ &= \sum_r{p(r|s,a)r+\gamma \sum_{s'}{p(s'|s,a)v_\pi(s')}} \end{align} qπ(s,a)=E[GtSt=s,At=a]=rp(rs,a)r+γsp(ss,a)vπ(s)

4.3 动作价值函数&状态价值函数的关系

根据状态价值函数的定义:
E [ G t ∣ S t = s ] ⏟ v π ( s ) = ∑ a E [ G t ∣ S t = s , A t = a ] ⏟ q π ( s , a ) π ( a ∣ s ) \begin{align} \underbrace{\mathbb{E}\left[G_t \mid S_t=s\right]}_{v_\pi(s)}=\sum_a \underbrace{\mathbb{E}\left[G_t \mid S_t=s, A_t=a\right]}_{q_\pi(s, a)} \pi(a \mid s) \end{align} vπ(s) E[GtSt=s]=aqπ(s,a) E[GtSt=s,At=a]π(as)
因此状态价值函数和动作价值函数的关系为:
v π ( s ) = ∑ a π ( a ∣ s ) q π ( s , a ) \begin{align} \textcolor{red}{ v_\pi(s) } =\sum_{a}{\pi(a|s) \textcolor{red}{q_\pi(s,a)}} \end{align} vπ(s)=aπ(as)qπ(s,a)

backup diagram是算法的图形化表示,通过图形表示状态,动作,状态转移,奖励等。下图中,空心较大圆圈表示状态,黑色实心小圆表示的是动作,连接状态和动作的线条仅仅把该状态以及该状态下可以采取的动作关联起来,黑色小圆和后续状态之间的连线为即时奖励。

状态价值函数动作价值函数的关系:
在这里插入图片描述

动作价值函数状态价值函数的关系:
在这里插入图片描述

4.4 MDP寻找最优策略&贝尔曼最优公式

如果已有马尔可夫决策过程,如何寻找最优策略?贝尔曼公式中策略pi是给定。 若策略pi没有给出,则需要先确定最优策略pi,此时就变成了贝尔曼最优公式,记:

v ∗ ( s ) = max ⁡ π v π ( s ) = max ⁡ π ∑ a π ( a ∣ s ) ( ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( s ′ ) ) , ∀ s ∈ S = max ⁡ π ∑ a π ( a ∣ s ) q π ( s , a ) s ∈ S \begin{align} v_*(s) &= \max_\pi v_\pi (s) \\ & =\max _{\pi} \sum_{a} \pi(a \mid s) \left(\sum_{r} p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_\pi\left(s^{\prime}\right)\right), \quad \forall s \in \mathcal{S} \\ & =\max _{\pi} \sum_{a} \pi(a \mid s) q_\pi(s, a) \quad s \in \mathcal{S} \end{align} v(s)=πmaxvπ(s)=πmaxaπ(as)(rp(rs,a)r+γsp(ss,a)vπ(s)),sS=πmaxaπ(as)qπ(s,a)sS

注意:

  • p ( r ∣ s , a ) , p ( s ′ ∣ s , a ) p\left( r \mid s,a\right),p\left(s^{\prime} \mid s,a \right) p(rs,a),p(ss,a)为已知
  • v ( s ) , v ( s ′ ) v\left(s\right),v\left( s^{\prime}\right) v(s),v(s)是待求解的未知量
  • 策略 π ( a ∣ s ) \pi(a \mid s) π(as)为未知

最优策略是使得状态动作价值最大的 v π ( s ) v_\pi(s) vπ(s)策略:
π ∗ ( s ) = arg max ⁡ π v π ( s ) \begin{align} \pi_*(s)=\argmax_\pi v_\pi(s)\end{align} π(s)=πargmaxvπ(s)

π ∗ ( a ∣ s ) = { 1  if  a = arg ⁡ max ⁡ a ∈ A q ∗ ( s , a ) 0  else  \begin{align} \pi_{*}(a \mid s)=\left\{\begin{array}{ll} 1 & \text { if } a=\arg \max _{a \in A} q_{*}(s, a) \\ 0 & \text { else } \end{array}\right.\end{align} π(as)={10 if a=argmaxaAq(s,a) else 

除了一般形式:
v π ( s ) = max ⁡ π ∑ a π ( a ∣ s ) ( ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( s ′ ) ) ⏟ q ( s , a ) , ∀ s ∈ S \begin{align}v_\pi (s)=\max _{\pi} \sum_{a} \pi(a \mid s) \underbrace{\left(\sum_{r} p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_\pi\left(s^{\prime}\right)\right)}_{q(s, a)}, \quad \forall s \in \mathcal{S} \end{align} vπ(s)=πmaxaπ(as)q(s,a) (rp(rs,a)r+γsp(ss,a)vπ(s)),sS
我们还需要矩阵向量形式:
v = max ⁡ π ( r π + γ P π v ) \begin{align} \bold v=\max_{\pi}(\bold r_\pi+\gamma \bold{P_\pi} \bold v) \end{align} v=πmax(rπ+γPπv)
贝尔曼最优公式的解一定存在,且该解是唯一的,这里不做证明。

求解算法:解析解(不推荐);迭代方法

4.4 总结

  • 状态价值函数定义: v π ( s ) = E [ G t ∣ S t = s ] v_\pi(s)=\mathbb{E}[G_t|S_t=s] vπ(s)=E[GtSt=s]
  • 动作价值函数定义: q π ( s , a ) = E [ G t ∣ S t = s , A t = a ] q_\pi{(s,a)}=\mathbb{E}[G_t|S_t=s,A_t=a] qπ(s,a)=E[GtSt=s,At=a]
  • 贝尔曼方程一般形式: v π ( s ) = max ⁡ π ∑ a π ( a ∣ s ) ( ∑ r p ( r ∣ s , a ) r + γ ∑ s ′ p ( s ′ ∣ s , a ) v π ( s ′ ) ) ⏟ q ( s , a ) , ∀ s ∈ S v_\pi (s)=\max _{\pi} \sum_{a} \pi(a \mid s) \underbrace{\left(\sum_{r} p(r \mid s, a) r+\gamma \sum_{s^{\prime}} p\left(s^{\prime} \mid s, a\right) v_\pi\left(s^{\prime}\right)\right)}_{q(s, a)}, \quad \forall s \in \mathcal{S} vπ(s)=maxπaπ(as)q(s,a) (rp(rs,a)r+γsp(ss,a)vπ(s)),sS
  • 贝尔曼方程矩阵形式: v = max ⁡ π ( r π + γ P π v ) v=\max_{\pi}(r_\pi+\gamma P_\pi v) v=maxπ(rπ+γPπv),推导出解析解
  • 如何求解贝尔曼方程:解析解,迭代的方法

5 强化学习引入MDP的原因

环境的状态转化模型,它可以表示为一个概率模型,即在状态s下采取动作a,转到下一个状态s′的概率,表示为 P s s ′ a P_{ss'}^a Pssa
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值