一、优化模型介绍
移动边缘计算的任务卸载与资源调度优化原理是通过利用配备计算资源的移动无人机来为本地资源有限的移动用户提供计算卸载机会,以减轻用户设备的计算负担并提高计算性能。具体原理如下:
-
任务卸载:移动边缘计算系统将用户的计算任务分为两部分:一部分卸载到关联的无人机进行计算,剩余部分在本地进行计算。通过将部分计算任务卸载到无人机上,可以减轻用户设备的计算负担,提高计算效率。
-
资源调度:为了最小化所有用户间的最大总时延,需要联合优化无人机的轨迹和用户的调度。轨迹优化指的是确定无人机的飞行路径,使得无人机能够高效地服务所有用户。用户调度指的是确定每个用户的计算任务在何时卸载到无人机上进行计算,以及剩余部分在本地进行计算。
-
优化问题:任务卸载与资源调度优化问题是一个混合整数非凸优化问题,具有离散二进制变量和耦合约束。为了有效求解该问题,可以引入一些辅助变量将其转化为数学上易于处理的形式。然后,可以采用惩罚凹凸过程的算法来求解转化后的问题。
移动边缘计算的任务卸载与资源调度是指在移动设备和边缘服务器之间,将部分计算任务从移动设备卸载到边缘服务器,并合理分配资源以提高系统性能和降低能耗,通过移动边缘计算的任务卸载与资源调度优化,可以有效提高移动用户的计算性能,并减轻用户设备的计算负担。
在本文所研究的区块链网络中,优化的变量为:挖矿决策(即 m)和资源分配(即 p 和 f),目标函数是使所有矿工的总利润最大化。问题可以表述为:
max
m
,
p
,
f
F
miner
=
∑
i
∈
N
′
F
i
miner
s.t.
C
1
:
m
i
∈
{
0
,
1
}
,
∀
i
∈
N
C
2
:
p
min
≤
p
i
≤
p
max
,
∀
i
∈
N
′
C
3
:
f
min
≤
f
i
≤
f
max
,
∀
i
∈
N
′
C
4
:
∑
i
∈
N
′
f
i
≤
f
total
C
5
:
F
M
S
P
≥
0
C
6
:
T
i
t
+
T
i
m
+
T
i
o
≤
T
i
max
,
∀
i
∈
N
′
\begin{aligned} \max _{\mathbf{m}, \mathbf{p}, \mathbf{f}} & F^{\text {miner }}=\sum_{i \in \mathcal{N}^{\prime}} F_{i}^{\text {miner }} \\ \text { s.t. } & C 1: m_{i} \in\{0,1\}, \forall i \in \mathcal{N} \\ & C 2: p^{\min } \leq p_{i} \leq p^{\max }, \forall i \in \mathcal{N}^{\prime} \\ & C 3: f^{\min } \leq f_{i} \leq f^{\max }, \forall i \in \mathcal{N}^{\prime} \\ & C 4: \sum_{i \in \mathcal{N}^{\prime}} f_{i} \leq f^{\text {total }} \\ & C 5: F^{M S P} \geq 0 \\ & C 6: T_{i}^{t}+T_{i}^{m}+T_{i}^{o} \leq T_{i}^{\max }, \forall i \in \mathcal{N}^{\prime} \end{aligned}
m,p,fmax s.t. Fminer =i∈N′∑Fiminer C1:mi∈{0,1},∀i∈NC2:pmin≤pi≤pmax,∀i∈N′C3:fmin≤fi≤fmax,∀i∈N′C4:i∈N′∑fi≤ftotal C5:FMSP≥0C6:Tit+Tim+Tio≤Timax,∀i∈N′
其中:
C1表示每个矿工可以决定是否参与挖矿;
C2 指定分配给每个参与矿机的最小和最大传输功率;
C3 表示分配给每个参与矿工的最小和最大计算资源;
C4表示分配给参与矿机的总计算资源不能超过MEC服务器的总容量;
C5保证MSP的利润不小于0;
C6 规定卸载、挖掘和传播步骤的总时间不能超过最长时间约束。
在所研究的区块链网络中,我们假设 IoTD 是同质的,并且每个 IoTD 都具有相同的传输功率范围和相同的计算资源范围。
上式中:
F
i
m
i
n
e
r
=
(
w
+
α
D
i
)
P
i
m
(
1
−
P
i
o
)
−
c
1
E
i
t
−
c
2
f
i
,
∀
i
∈
N
′
R
i
=
B
log
2
(
1
+
p
i
H
i
σ
2
+
∑
j
∈
N
′
\
i
m
j
p
j
H
j
)
,
∀
i
∈
N
′
T
i
t
=
D
i
R
i
,
∀
i
∈
N
′
T
i
m
=
D
i
X
i
f
i
,
∀
i
∈
N
′
E
i
m
=
k
1
f
i
3
T
i
m
,
∀
i
∈
N
′
P
i
m
=
k
2
T
i
m
,
∀
i
∈
N
′
F
M
S
P
=
∑
i
∈
N
′
(
c
2
f
i
−
c
3
E
i
m
)
−
c
3
E
0
P
i
o
=
1
−
e
−
λ
(
T
i
o
+
T
i
s
)
=
1
−
e
−
λ
(
z
D
i
+
T
i
t
)
,
∀
i
∈
N
′
F_i^{miner}=(w+\alpha D_i)P_i^m(1-P_i^o)-c_1E_i^t-c_2f_i,\forall i\in\mathcal{N'}\\R_{i}=B \log _{2}\left(1+\frac{p_{i} H_{i}}{\sigma^{2}+\sum_{j \in \mathcal{N}^{\prime} \backslash i} m_{j} p_{j} H_{j}}\right), \forall i \in \mathcal{N}^{\prime}\\T_{i}^{t}=\frac{D_{i}}{R_{i}},\forall i\in\mathcal{N}^{\prime}\\T_{i}^{m}=\frac{D_{i}X_{i}}{f_{i}},\forall i\in\mathcal{N}'\\E_i^m=k_1f_i^3T_i^m,\forall i\in\mathcal{N}'\\P_i^m=\frac{k_2}{T_i^m},\forall i\in\mathcal{N}^{\prime}\\F^{MSP}=\sum_{i\in\mathcal{N}^{\prime}}\left(c_2f_i-c_3E_i^m\right)-c_3E_0\\\begin{aligned} P_{i}^{o}& =1-e^{-\lambda(T_{i}^{o}+T_{i}^{s})} \\ &=1-e^{-\lambda(zD_{i}+T_{i}^{t})},\forall i\in\mathcal{N}^{\prime} \end{aligned}
Fiminer=(w+αDi)Pim(1−Pio)−c1Eit−c2fi,∀i∈N′Ri=Blog2(1+σ2+∑j∈N′\imjpjHjpiHi),∀i∈N′Tit=RiDi,∀i∈N′Tim=fiDiXi,∀i∈N′Eim=k1fi3Tim,∀i∈N′Pim=Timk2,∀i∈N′FMSP=i∈N′∑(c2fi−c3Eim)−c3E0Pio=1−e−λ(Tio+Tis)=1−e−λ(zDi+Tit),∀i∈N′
二、遗传算法求解上述问题
遗传算法是一种模拟自然进化过程的优化算法,它通过模拟生物进化的过程来搜索最优解。遗传算法的基本原理是通过对候选解进行编码,然后使用选择、交叉和变异等操作来生成新的解,并通过适应度评价来确定解的质量。下面是遗传算法的基本描述:
-
编码:将问题的解表示为染色体,染色体由基因组成。基因可以是二进制、整数、浮点数等形式,根据问题的特点选择适当的编码方式。
-
初始化种群:随机生成一组初始解,称为种群。种群中的每个个体都是一个可能的解。
-
适应度评价:根据问题的目标函数,对种群中的每个个体进行适应度评价,评估个体的适应度值。
-
选择操作:根据个体的适应度值,选择一部分个体作为父代,用于产生下一代个体。常用的选择方法有轮盘赌选择、锦标赛选择等。
-
交叉操作:从父代个体中选择两个个体,通过交叉操作生成新的个体。交叉操作可以是单点交叉、多点交叉、均匀交叉等。
-
变异操作:对新生成的个体进行变异操作,以增加种群的多样性。变异操作可以是位变异、插入变异、交换变异等。
-
更新种群:将新生成的个体加入到种群中,替换掉原有的个体。
-
终止条件:根据问题的要求,设置终止条件,例如达到最大迭代次数、找到满足要求的解等。
通过不断迭代上述步骤,遗传算法能够逐渐优化种群,找到问题的最优解或近似最优解。
2.1部分MATLAB代码
close all
clear
clc
dbstop if all error
t=1;
for NP=100:50:400
para = parametersetting(NP);
para.MaxFEs =10000;%最大迭代次数
Result(t)=Compute(NP,para);
t=t+1;
end
QQ=100:50:400;
LenG={};
StrCor={'r-','g--','b-.','c-','m--','k-.','y-'};
figure
for i=1:t-1
plot(Result(i).FitCurve,StrCor{i},'linewidth',3)
hold on
LenG{i}=['N=' num2str(QQ(i))];
Data(i)=Result(i).FitCurve(end);
end
legend(LenG)
xlabel('FEs')
ylabel('Token')
figure
bar(Data)
hold on
plot(Data,'r-o','linewidth',3)
set(gca,'xtick',1:1:t-1);
set(gca,'XTickLabel',LenG)
ylabel('Token')
2.2部分结果
当矿工数量为 100 150 200 250 300 350 400时:所有矿工的利润随迭代次数的变化如下图所示
当矿工数量为100 时,差分进化算法得到的最优策略
1.98830309910329 0.0368744752605259
1.99789989805757 0.196030173248667
1.99556620546526 0.118054965148164
1.99848165728379 0.0465059356635910
1.99770228908093 0.133783839334423
1.99849225798018 0.0270667948088655
1.99854350706185 0.102400312526601
1.92567160465965 0.0663462612348080
1.98675469901800 0.301527372176780
1.99822084610072 0.254915947065578
1.99868238783581 0.203487079559107
1.99267775418748 0.0643311267134825
1.99885434076187 0.280207320985087
1.99590363364205 0.232709695225270
1.99874870993430 0.833491777560683
1.98894574265138 0.0774576740668982
1.99755839969063 0.0368744752605259
1.99935799364301 0.0874375415427740
1.99936767223698 0.157930690392893
1.99956357445451 0.0417828734987172
1.99301550442425 0.433746315052426
1.99534629090217 0.232539223270195
1.99644582286506 0.0544439603364655
1.99413523150339 0.335977761439005
1.99969510073345 0.0201835278734370
1.99656020403975 0.320308211995574
1.99413523150339 0.134361434538323
1.99934367655544 0.0201249110784999
1.99874870993430 0.270716146348502
1.99534629090217 0.102400312526601
1.97368896602713 0.371655055535514
1.99578188316381 0.0774940732798153
1.99969510073345 0.0468435295717144
1.99757976798587 0.0795357376799481
1.99874870993430 0.0270667948088655
1.99908254835188 0.0201249110784999
1.99901789285075 0.109377814355817
1.99822084610072 0.121755301131560
1.99714641902603 0.0503388571811252
1.99874870993430 0.588125414869038
1.99578970976323 0.0624028286868884
1.99453375151492 0.0502311649006714
1.99368403747621 0.144959248996597
1.99530505249736 0.142976390514748
1.99936767223698 0.688408236814422
1.99968759180720 0.682331893787363
1.99629997476397 0.257708833202925
1.95666226555343 0.0517226581461815
1.99885434076187 0.280343787849047
1.98696957422240 0.0795357376799481
1.99871160479981 0.0560083413675843
1.99413523150339 0.196030173248667
1.99936767223698 0.302287721251326
1.99821203517964 0.210471561895837
1.99673352778040 0.0270667948088655
1.99770228908093 0.534361278905725
1.99667496022971 0.0201835278734370
1.99994322640323 0.0214449423378752
1.99874870993430 0.571333070982819
1.99932180476190 0.474161729301239
1.99960149345994 0.558602790353225
1.98151005378595 0.106575961496704
1.99908987765549 0.0452462031097515
1.99934367655544 0.370835620674462
1.99964879692112 0.0795357376799481
1.99743954565661 0.0795357376799481
1.99646741013112 0.241095903277170
1.99714641902603 0.0617329473058759
1.99792458594989 0.370835620674462
1.99534629090217 0.265822895382043
1.99885434076187 0.0802479700917529
1.98709068293192 0.305054485652411
1.99667496022971 0.246917356548499
1.99936767223698 0.600930869273378
1.99868238783581 0.0874375415427740
1.99868238783581 0.435679032923550
1.99667496022971 0.0368744752605259
1.99874870993430 0.0634907391022695
1.99667496022971 0.458584335766774
1.99580757777432 0.114188412539821
1.99899193971503 0.0384694039832775
1.99822084610072 0.0675960127715352
1.99274414486599 0.232539223270195
1.99834287058174 0.0795357376799481
1.98993038279350 0.134361434538323
1.99268983346204 0.0617329473058759
1.99936089509187 0.134361434538323
1.99578632367924 0.296828570877277
1.99936767223698 0.383894175029782
1.99765898223133 0.127430521430784
1.99580757777432 0.242346762848598
1.99284871542524 0.0617329473058759
1.99628449628698 0.0368744752605259
1.99714641902603 0.0554002880030898
1.99906797861904 0.143256566118214
1.99792458594989 0.0366444533929836
1.99587283202319 0.460502940865315
1.99946842653564 0.0663462612348080
1.99196576356948 0.0163638412976285
1.93636065228286 0.0112915301178178