DeepVisionary 每日深度学习前沿科技推送&顶会论文&数学建模与科技信息前沿资讯分享,与你一起了解前沿科技知识!
本次DeepVisionary带来的是五一杯的详细解读:
完整内容可以在文章末尾全文免费领取&阅读!
第一个问题是建立数学模型,给出各(起点,终点)对之间交通需求分配到对应路径上的交通量,使得网络中任意1条路段出现突发状况时,网络中所有交通需求的期望可达率最大。
首先,我们需要定义一些变量来表示问题中的数据:
D i j D_{ij} Dij:表示从起点i到终点j的交通需求量。
p i j p_{ij} pij:表示从起点i到终点j的交通需求分配到的路径数。
r i j r_{ij} rij:表示从起点i到终点j的交通需求可达率。
F i j F_{ij} Fij:表示从起点i到终点j的交通需求分配到的路径上的交通量。
E E E:表示网络中任意一条路段出现突发状况的概率。
根据题目中的要求,我们需要最大化网络中所有交通需求的期望可达率。因此,我们可以建立如下的目标函数:
m a x ∑ i = 1 n ∑ j = 1 n r i j D i j max \quad \sum_{i=1}^{n} \sum_{j=1}^{n} r_{ij} D_{ij} maxi=1∑nj=1∑nrijDij
接下来,我们需要考虑一些约束条件:
每个(起点,终点)对之间的交通需求量必须被分配到对应的路径上,即:
∑ k = 1 p i j F i j ( k ) = D i j ∀ i , j \sum_{k=1}^{p_{ij}} F_{ij}^{(k)} = D_{ij} \quad \forall i,j k=1∑pijFij(k)=Dij∀i,j
其中, F i j ( k ) F_{ij}^{(k)} Fij(k)表示从起点i到终点j的交通需求分配到的第k条路径上的交通量。
任意一条路段出现突发状况时,网络中所有交通需求的期望可达率必须大于等于一定的值,即:
∑ i = 1 n ∑ j = 1 n r i j F i j ( k ) ≥ E ∀ k \sum_{i=1}^{n} \sum_{j=1}^{n} r_{ij} F_{ij}^{(k)} \geq E \quad \forall k i=1∑nj=1∑nrijFij(k)≥E∀k
其中, F i j ( k ) F_{ij}^{(k)} Fij(k)表示从起点i到终点j的交通需求分配到的第k条路径上的交通量。
交通需求可达率必须在0到1之间:
0 ≤ r i j ≤ 1 ∀ i , j 0 \leq r_{ij} \leq 1 \quad \forall i,j 0≤rij≤1∀i,j
\end{itemize}
综上所述,第一个问题的数学模型可以表示为:
m a x ∑ i = 1 n ∑ j = 1 n r i j D i j max \quad \sum_{i=1}^{n} \sum_{j=1}^{n} r_{ij} D_{ij} maxi=1∑nj=1∑nrijDij
s . t . ∑ k = 1 p i j F i j ( k ) = D i j ∀ i , j s.t. \quad \sum_{k=1}^{p_{ij}} F_{ij}^{(k)} = D_{ij} \quad \forall i,j s.t.k=1∑pijFij(k)=Dij∀i,j
∑ i = 1 n ∑ j = 1 n r i j F i j ( k ) ≥ E ∀ k \sum_{i=1}^{n} \sum_{j=1}^{n} r_{ij} F_{ij}^{(k)} \geq E \quad \forall k i=1∑nj=1∑nrijFij(k)≥E∀k
0 ≤ r i j ≤ 1 ∀ i , j 0 \leq r_{ij} \leq 1 \quad \forall i,j 0≤rij≤1∀i,j
其中,n表示网络中的节点数, p i j p_{ij} pij表示从起点i到终点j的路径数。
假设交通网络中有N个节点,M条路段,每个(起点,终点)对之间的交通需求为D(i,j),其中i,j为节点编号,表示从节点i出发到节点j的交通需求量。假设网络中的所有路段都有容量限制,即每条路段的最大承载量为C(k),其中k为路段编号。
首先,定义决策变量x(i,j,t)表示从节点i到节点j的交通需求在时刻t分配到的路径,取值为0或1。即当x(i,j,t)=1时,表示交通需求从节点i出发到节点j的路径为t,当x(i,j,t)=0时,表示交通需求没有分配到路径t。同时,定义y(k,t)表示在时刻t,路段k的状态,取值为0或1。当y(k,t)=1时,表示路段k在时刻t发生了突发状况,当y(k,t)=0时,表示路段k在时刻t没有发生突发状况。
根据题目要求,可以得到目标函数为最大化网络中所有交通需求的期望可达率,即:
m a x Σ Σ Σ D ( i , j ) ∗ x ( i , j , t ) max ΣΣΣD(i,j) * x(i,j,t) maxΣΣΣD(i,j)∗x(i,j,t)
其中,i,j为节点编号,t为路径编号。
同时,需要满足以下约束条件:
- 每个交通需求只能分配到一条路径,即:
Σ x ( i , j , t ) = 1 Σx(i,j,t) = 1 Σx(i,j,t)=1,其中t为路径编号。
- 路段容量限制,即:
Σ Σ x ( i , j , t ) ≤ C ( k ) ΣΣx(i,j,t) ≤ C(k) ΣΣx(i,j,t)≤C(k),其中t为路径编号,i,j为节点编号,k为路段编号。
- 路段状态与路径分配的关系,即:
y ( k , t ) ≤ Σ x ( i , j , t ) y(k,t) ≤ Σx(i,j,t) y(k,t)≤Σx(i,j,t),其中t为路径编号,i,j为节点编号,k为路段编号。
- 路段状态与路段突发状况的关系,即:
y ( k , t ) ≤ y ( k , t − 1 ) + y ( k , t + 1 ) y(k,t) ≤ y(k,t-1) + y(k,t+1) y(k,t)≤y(k,t−1)+y(k,t+1),其中t为时刻,k为路段编号。
- 路段突发状况的概率相同,即:
P ( y ( k , t ) = 1 ) = P ( y ( k , t − 1 ) = 1 ) = P ( y ( k , t + 1 ) = 1 ) P(y(k,t)=1) = P(y(k,t-1)=1) = P(y(k,t+1)=1) P(y(k,t)=1)=P(y(k,t−1)=1)=P(y(k,t+1)=1),其中t为时刻,k为路段编号。
- 每个起点到终点的交通需求都必须满足可达率要求,即:
Σ x ( i , j , t ) ≥ D ( i , j ) ∗ R Σx(i,j,t) ≥ D(i,j) * R Σx(i,j,t)≥D(i,j)∗R,其中t为路径编号,i,j为起点和终点编号,R为可达率。
综上所述,可以建立如下数学模型:
m a x Σ Σ Σ D ( i , j ) ∗ x ( i , j , t ) max ΣΣΣD(i,j) * x(i,j,t) maxΣΣΣD(i,j)∗x(i,j,t)
s.t.
Σ x ( i , j , t ) = 1 Σx(i,j,t) = 1 Σx(i,j,t)=1,i,j为节点编号,t为路径编号。
Σ Σ x ( i , j , t ) ≤ C ( k ) ΣΣx(i,j,t) ≤ C(k) ΣΣx(i,j,t)≤C(k),t为路径编号,i,j为节点编号,k为路段编号。
y ( k , t ) ≤ Σ x ( i , j , t ) y(k,t) ≤ Σx(i,j,t) y(k,t)≤Σx(i,j,t),t为路径编号,i,j为节点编号,k为路段编号。
y ( k , t ) ≤ y ( k , t − 1 ) + y ( k , t + 1 ) y(k,t) ≤ y(k,t-1) + y(k,t+1) y(k,t)≤y(k,t−1)+y(k,t+1),t为时刻,k为路段编号。
P ( y ( k , t ) = 1 ) = P ( y ( k , t − 1 ) = 1 ) = P ( y ( k , t + 1 ) = 1 ) P(y(k,t)=1) = P(y(k,t-1)=1) = P(y(k,t+1)=1) P(y(k,t)=1)=P(y(k,t−1)=1)=P(y(k,t+1)=1),t为时刻,k为路段编号。
Σ x ( i , j , t ) ≥ D ( i , j ) ∗ R Σx(i,j,t) ≥ D(i,j) * R Σx(i,j,t)≥D(i,j)∗R,t为路径编号,i,j为起点和终点编号,R为可达率。
其中,目标函数为最大化所有交通需求的期望可达率,约束条件包括每个交通需求只能分配到一条路径、路段容量限制、路段状态与路径分配的关系、路段状态与路段突发状况的关系、路段突发状况的概率相同以及每个起点到终点的交通需求满足可达率要求。
该数学模型可以用来解决题目中的第一个问题,即给出各(起点,终点)对之间交通需求分配到对应路径上的交通量,使得网络中任意1条路段出现突发状况时,网络中所有交通需求的期望可达率最大。同时,该模型也可以用来解决其他类似的交通网络优化问题,只需将目标函数和约束条件进行相应的修改即可。
假设交通网络中共有n个节点,记为 V = 1 , 2 , . . . , n V={1,2,...,n} V=1,2,...,n。假设每个节点之间最多有m条可选路径,记为 E = e 1 , e 2 , . . . , e m E={e_1,e_2,...,e_m} E=e1,e2,...,em。每条路径都有一个对应的交通需求量d(e),其中e∈E。为了简化问题,假设交通需求量是实数,即d(e)∈R+。如果某个(起点,终点)对之间的交通需求量为0,则该对不需要分配路径。
每条路段都有一个对应的可达率c(e),表示在路段出现突发状况时,原本选择该路段的交通需求能够被满足的概率。可达率c(e)的计算公式为:
c ( e ) = 1 − ∑ p ( i , e ) × d ( i ) c(e)=1-∑p(i,e)×d(i) c(e)=1−∑p(i,e)×d(i)
其中,p(i,e)表示从起点i到终点e的所有可选路径中,选择路径e的概率。根据题目要求,每个路径被选择的概率相同,即p(i,e)=1/m。因此,可达率c(e)可以简化为:
c ( e ) = 1 − d ( e ) / m c(e)=1-d(e)/m c(e)=1−d(e)/m
此外,路段出现突发状况的概率为1/m,因此出现突发状况时,原本选择该路段的交通需求无法被满足的概率为1/m。
为了最大化网络中所有交通需求的期望可达率,需要最小化网络中所有交通需求无法被满足的概率。因此,可将问题转化为最小化网络中所有交通需求无法被满足的概率的和。该问题可以表示为以下的优化问题:
m i n ∑ p ( i , e ) × d ( i ) min ∑p(i,e)×d(i) min∑p(i,e)×d(i)
s . t . ∑ p ( i , e ) × d ( i ) = 1 / m s.t.∑p(i,e)×d(i)=1/m s.t.∑p(i,e)×d(i)=1/m
其中,p(i,e)表示从起点i到终点e的所有可选路径中,选择路径e的概率。约束条件(4)保证了所有交通需求无法被满足的概率的和为1/m。
根据拉格朗日乘子法,可以将问题(3)转化为以下的拉格朗日方程:
L ( p , λ ) = ∑ p ( i , e ) × d ( i ) + λ ( ∑ p ( i , e ) × d ( i ) − 1 / m ) L(p,λ)=∑p(i,e)×d(i)+λ(∑p(i,e)×d(i)-1/m) L(p,λ)=∑p(i,e)×d(i)+λ(∑p(i,e)×d(i)−1/m)
其中,λ为拉格朗日乘子。对拉格朗日方程求导,并令导数等于0,可得到以下的等式:
d ( i ) − λ = 0 d(i)-λ=0 d(i)−λ=0
因此,可得到最优的p(i,e)为:
p ( i , e ) = d ( i ) / λ p(i,e)=d(i)/λ p(i,e)=d(i)/λ
将p(i,e)代入约束条件(4),可得到:
∑ d ( i ) / λ = 1 / m ∑d(i)/λ=1/m ∑d(i)/λ=1/m
因此,可得到最优的λ为:
λ = ∑ d ( i ) / m λ=∑d(i)/m λ=∑d(i)/m
将λ代入公式(7),可得到最优的p(i,e)为:
p ( i , e ) = d ( i ) / ∑ d ( i ) p(i,e)=d(i)/∑d(i) p(i,e)=d(i)/∑d(i)
因此,最优的交通需求分配方案为,根据公式(10)计算出每个(起点,终点)对之间的交通需求量的比例,然后根据比例分配交通量到对应的路径上。具体的计算过程请见表1中的数据。
import pandas as pd #用于读取附件数据
import numpy as np #用于数学计算
from gurobipy import * #用于建立数学模型和求解
读取附件1中的数据:
req = pd.read_excel('附件1.xlsx', sheet_name='交通需求') #读取交通需求数据
req = req.set_index(['起点', '终点']) #将起点和终点设为dataframe的索引值
paths