网络交通流量调度优化问题求解
不会吧,这真有人看?
BY hllinyu
2023年5月11日
实验内容
考虑一个具有𝑀条道路(分别标记为:1, … , 𝑀)以及𝑁条路径(分别标记为:1, … , 𝑁) 的交通网络。每条路径由若干道路构成,令R∈R^(M×N) 表示道路-路径指示矩阵,若第𝑚条道路在第𝑛条路径上则R_mn=1,否则
R
m
n
=
1
R_{mn}=1
Rmn=1,
R
m
n
R_{mn}
Rmn为矩阵𝑅第𝑚行第𝑛列的元素。第𝑛条路 径上的交通流量记为
f
n
≥
0
f_n\geq0
fn≥0第𝑚条道路上的交通容量上限记为
c
=
[
c
1
,
⋯
,
c
m
]
T
c=\left[c_1,\cdots,c_m\right]^T
c=[c1,⋯,cm]T。 为了满足第𝑚条道路上的交通容量约束,有
∑
n
=
1
N
R
m
n
f
n
≤
c
m
\sum_{n=1}^{N}{R_{mn}f_n}\le c_m
n=1∑NRmnfn≤cm
当一条道路上的交通流量越多时,道路就会变得更加拥堵,通过该条道路的时延也就 越长,因此第𝑚条道路上的平均时延可以简单建模为
d
m
=
1
c
m
−
∑
n
=
1
N
,
R
m
n
f
n
d_m=\frac{1}{c_m-\sum_{n=1}^{N}{,R_{mn}f_n}}
dm=cm−∑n=1N,Rmnfn1
第𝑛条路径上的总时延是通过这一条路径上的所有道路的时延之和,即
l
n
=
∑
m
=
1
M
R
m
n
d
m
l_n=\sum_{m=1}^{M}{R_{mn}d_m}
ln=m=1∑MRmndm
一般来说,当一条路径上的交通流量越大时,其产生的经济效益就会越多,对于第𝑛 条路径,其效用函数可以简单建模为
U
n
=
l
o
g
(
1
+
f
n
)
U_n=log{\left(1+f_n\right)}
Un=log(1+fn),因此整个交通网络的效用函数为
U
s
u
m
(
f
)
=
∑
n
=
1
N
U
n
U_{sum}\left(f\right)=\sum_{n=1}^{N}U_n
Usum(f)=n=1∑NUn, 其中
f
=
[
f
1
,
⋯
,
f
N
]
T
f=\left[f_1,\cdots,f_N\right]^T
f=[f1,⋯,fN]T。
我们的目标是通过合理规划每条路径上的交通流量{𝑓𝑛},在满足每一条路径时延不超 过𝐿的情况下,最大化整个网络的效用函数
U
s
u
m
U_{sum}
Usum。
1)请将上述问题建模成一个凸优化问题;
2)从 exp4_2_data.m中加载𝑁、𝑀、 𝐑、𝐜等数据,令
f
=
[
0
,
⋯
,
0
]
T
f=\left[0,\cdots,0\right]^T
f=[0,⋯,0]T计算此时所有路径时延的最大值,记为
L
ˉ
\bar{L}
Lˉ;
3)从 exp4_2_data.m 中加载𝑁、𝑀、 𝐑、𝐜等数据,令𝐿的取值为
L
ˉ
×
(
1
:
1
:
10
)
\bar{L}\times\ (1:\ 1:\ 10)
Lˉ× (1: 1: 10),使用 Matlab 及 CVX 对 1)中建模出的问题进行求解,分别计算𝐿取不同值时对应的最大效用
U
s
u
m
U_{sum}
Usum,绘制最大效用
U
s
u
m
U_{sum}
Usum随网络最大时延𝐿变化的曲线(使用实线);(提示:反比例函数 不是凸函数,但是反比例函数的正半支是凸函数,CVX 中可以使用 inv_pos 函数)
4)从 exp4_2_data.m 中加载𝑁、𝑀、 𝐑、𝐜等数据,令
L
=
+
∞
L=+\infty
L=+∞,使用 Matlab 及 CVX 对 1)中建模出的问题进行求解,得到此时的网络最大效用
U
s
u
m
U_{sum}
Usum;将此时的最大效用
U
s
u
m
U_{sum}
Usum 绘制在 3)中的图上(使用虚线)。(提示:此时路径时延约束始终不起作用,使用 yline 函 数绘制水平横线)
实验过程及结果(需要包含完整程序代码及运行结果截图)
-
建模
在这个问题中,我们需要最大化整个网络的效用函数U_sum,同时满足每一条路径时延不超过L的情况下,通过合理规划每条路径上的交通流量{𝑓𝑛}。
公式
max p ∑ i = 1 K r i s.t. r i = log 2 ( 1 + p i h i ) , i = 1 , 2 , ⋯ , K ∑ i = 1 K p i ≤ P s u m , p i ≤ P m a x , i = 1 , 2 , ⋯ , K . \begin{aligned}&\max_{p} \sum_{i=1}^K r_i \\&\text{s.t.} \\& r_i=\log_2(1+p_ih_i), i=1,2,\cdots,K \\& \sum_{i=1}^K p_i \leq P_{\mathrm{sum}}, \\& p_i \leq P_{\mathrm{max}}, i=1,2,\cdots,K.\end{aligned} pmaxi=1∑Kris.t.ri=log2(1+pihi),i=1,2,⋯,Ki=1∑Kpi≤Psum,pi≤Pmax,i=1,2,⋯,K. -
MATLAB 代码及运行结果截图
% 计算所有路径时延的最大值
f = zeros(N, 1);
d = 1 ./ (c - R * f);
L_max = max(R' * d);
disp(['所有路径时延的最大值:',num2str(L_max)])
% 计算𝐿取不同值时对应的最大效用 U_sum
L_values = L_max * (1:10);
U_sum_values = zeros(size(L_values));
for i = 1:length(L_values)
L = L_values(i);
cvx_begin
variable f(N)
d = inv_pos(c - R * f);
U_sum = sum(log(1 + f));
maximize(U_sum)
subject to
R' * d <= L
f >= 0
cvx_end
U_sum_values(i) = cvx_optval;
end
% 令 L=+∞,计算网络最大效用U_sum
L_inf = inf;
cvx_begin
variable f(N)
d = inv_pos(c - R * f);
U_sum_inf = sum(log(1 + f));
maximize(U_sum_inf)
subject to
f >= 0
cvx_end
% 打印图片
plot(L_values, U_sum_values, 'b-', 'LineWidth', 1.5);
hold on;
yline(U_sum_inf, 'r--', 'LineWidth', 1.5);
xlabel('Maximum Path Delay (L)');
ylabel('Maximum Utility (U_{sum})');
legend('U_{sum} vs. L', 'U_{sum} at L = +\infty', 'Location', 'Northwest');
运行截图