粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)

一、优化模型介绍

移动边缘计算的任务卸载与资源调度优化原理是通过利用配备计算资源的移动无人机来为本地资源有限的移动用户提供计算卸载机会,以减轻用户设备的计算负担并提高计算性能。具体原理如下:

  1. 任务卸载:移动边缘计算系统将用户的计算任务分为两部分:一部分卸载到关联的无人机进行计算,剩余部分在本地进行计算。通过将部分计算任务卸载到无人机上,可以减轻用户设备的计算负担,提高计算效率。

  2. 资源调度:为了最小化所有用户间的最大总时延,需要联合优化无人机的轨迹和用户的调度。轨迹优化指的是确定无人机的飞行路径,使得无人机能够高效地服务所有用户。用户调度指的是确定每个用户的计算任务在何时卸载到无人机上进行计算,以及剩余部分在本地进行计算。

  3. 优化问题:任务卸载与资源调度优化问题是一个混合整数非凸优化问题,具有离散二进制变量和耦合约束。为了有效求解该问题,可以引入一些辅助变量将其转化为数学上易于处理的形式。然后,可以采用惩罚凹凸过程的算法来求解转化后的问题。

移动边缘计算的任务卸载与资源调度是指在移动设备和边缘服务器之间,将部分计算任务从移动设备卸载到边缘服务器,并合理分配资源以提高系统性能和降低能耗,通过移动边缘计算的任务卸载与资源调度优化,可以有效提高移动用户的计算性能,并减轻用户设备的计算负担。
在本文所研究的区块链网络中,优化的变量为:挖矿决策(即 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 =iNFiminer C1:mi{0,1},iNC2:pminpipmax,iNC3:fminfifmax,iNC4:iNfiftotal C5:FMSP0C6:Tit+Tim+TioTimax,iN
其中:
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(1Pio)c1Eitc2fi,iNRi=Blog2(1+σ2+jN\imjpjHjpiHi),iNTit=RiDi,iNTim=fiDiXi,iNEim=k1fi3Tim,iNPim=Timk2,iNFMSP=iN(c2fic3Eim)c3E0Pio=1eλ(Tio+Tis)=1eλ(zDi+Tit),iN

二、粒子群优化算法求解上述问题

粒子群优化算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,灵感来源于鸟群觅食行为。在粒子群算法中,每个个体被称为粒子,它们通过在解空间中搜索来寻找最优解。粒子的位置表示解空间中的一个解,速度表示粒子在解空间中的搜索方向和速度。

算法描述如下:

  1. 初始化粒子群的位置和速度,以及每个粒子的个体最优解和全局最优解。
  2. 对于每个粒子,根据其当前位置和速度更新其下一时刻的位置和速度。
  3. 更新每个粒子的个体最优解和全局最优解。
  4. 重复步骤2和步骤3,直到满足停止条件(例如达到最大迭代次数或找到满意的解)。
    粒子的位置和速度的更新公式如下:
    v i j = w ⋅ v i j + c 1 ⋅ r 1 ⋅ ( p b e s t i j − x i j ) + c 2 ⋅ r 2 ⋅ ( g b e s t j − x i j ) v_{ij} = w \cdot v_{ij} + c_1 \cdot r_1 \cdot (pbest_{ij} - x_{ij})+ c_2 \cdot r_2 \cdot (gbest_{j} - x_{ij}) vij=wvij+c1r1(pbestijxij)+c2r2(gbestjxij)
    x i j = x i j + v i j x_{ij} = x_{ij} + v_{ij} xij=xij+vij
    其中, v i j v_{ij} vij表示粒子 i i i在维度 j j j上的速度, x i j x_{ij} xij表示粒子 i i i在维度 j j j上的位置, w w w是惯性权重, c 1 c_1 c1 c 2 c_2 c2是加速因子, r 1 r_1 r1 r 2 r_2 r2是随机数, p b e s t i j pbest_{ij} pbestij是粒子 i i i的个体最优解, g b e s t j gbest_{j} gbestj是全局最优解。

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.99336847413542	0.263906421194274
1.99775186559795	0.200868009539170
1.99970002117621	0.0648879435841947
1.99329300750250	0.708182408691192
1.99167730621739	0.184448209112073
1.99307440825028	0.0219822928789003
1.99690287754159	0.431027655563034
1.99810379619714	0.321020523744654
1.99917843966375	0.303423831282229
1.99821040767272	0.168667481958628
1.98597988697170	0.0905104567390803
1.98597988697170	0.601810916845292
1.99751134702339	0.0772846974434056
1.99568705660856	0.0123961079170779
1.99568705660856	0.0219822928789003
1.99939846871027	0.140219957587819
1.99751134702339	0.0643466460987961
1.99106922984091	0.0744274764339868
1.99026780288433	0.323053852649518
1.99505374958257	0.391381227036939
1.99026780288433	0.0386190647662533
1.99434630983491	0.429606862856901
1.99656977746481	0.128509524908840
1.99306191995070	0.183351939597823
1.97120203302642	0.212539563416013
1.99775186559795	0.775693679569017
1.99445513254744	0.192745572626503
1.99810379619714	0.169565130152890
1.99821815723158	0.897463471823648
1.99967281380570	0.326738726430002
1.99917843966375	0.0772846974434056
1.99372726540238	0.282175086715631
1.99990898569500	0.770430114847907
1.99939846871027	0.393387022348710
1.99911410714039	0.628600190012630
1.99568705660856	0.476489184273998
1.99990898569500	0.169885270977169
1.99751134702339	0.282175086715631
1.99917843966375	0.996515848471701
1.98597988697170	0.105646136580459
1.98272218969017	0.341104490954763
1.99879887123098	0.0317520782551498
1.99911410714039	0.0648879435841947
1.99879887123098	0.708642673799754
1.99544983849978	0.110774653298577
1.99659514375944	0.436449874089022
1.99810379619714	0.284920542802571
1.99632883457053	0.0135240586325804
1.99189629561473	0.237758849313252
1.99422406461229	0.153419877925178
1.98098435432889	0.0245609422587171
1.99881527354847	0.131281213896720
1.99026780288433	0.520228057289928
1.99394052110531	0.973262555548315
1.99676423845605	0.733200939841676
1.99044028306887	0.0655466091538162
1.99220895638217	0.452664096011519
1.99967281380570	0.0246004351885689
1.98445329993034	0.0436886868372558
1.99561719532673	0.669438197662487
1.99106922984091	0.181170901188179
1.42677752275849	0.373040997600060
1.99985642534854	0.331705389653114
1.98892588960286	0.0905104567390803
1.99570956990523	0.137594166655745
1.99712756572684	0.0116613052442916
1.99761096308758	0.544497810583091
1.99917843966375	0.548902353524135
1.99604812483103	0.363959215054892
1.97370585223207	0.140439965394089
1.99822126426888	0.997589743470599
1.99981673555970	0.295499797026614
1.99810379619714	0.215172418098537
1.99385290784048	0.0967351355395940
1.98340346121394	0.295499797026614
1.98727071334110	0.0967351355395940
1.99583409111883	0.486648050904735
1.99881239804121	0.0123961079170779
1.99216872486481	0.0402198248179052
1.98363807201375	0.307091606206465
1.98955999082794	0.0700201382389803
1.96299723560445	0.0285183328499066
1.99827326844249	0.424637580117837
1.97739702698326	0.131281213896720
1.99947192096666	0.280461726485366
1.99985642534854	0.273611346819215
1.99434630983491	0.295161528856059
1.99822126426888	0.175643326680012
1.99106922984091	0.0842005107607819
1.99712756572684	0.0905104567390803
1.99916981021124	0.703533039399715
1.98780310050454	0.0860507779189620
1.99630429608324	0.0547851285698672
1.99246990243466	0.0905104567390803
1.99026780288433	0.736166803643234
1.98756768629791	0.102405574723945
1.99782015511902	0.219598860973970
1.99751134702339	0.184448209112073
1.97511833252200	0.0256491037386021
1.99026780288433	0.0126780548450636

三、完整MATLAB代码


http://www.niftyadmin.cn/n/5352185.html

相关文章

WebSocket设置私信在线离线

WebSocket设置在线离线以及优先展示最近聊天的人 1.设置在线状态 主要逻辑&#xff1a; 1.用户连接之后&#xff0c;首先后端执行onOpen,传入用户的id,然后写入到redis中 RedisConfig.java 中加入 Beanpublic RedisTemplate<String, String> redisTemplate() {RedisT…

Docker 安装与基本操作

目录 一、Docker 概述 1、Docker 简述 2、Docker 的优势 3、Docker与虚拟机的区别 4、Docker 的核心概念 1&#xff09;镜像 2&#xff09;容器 3&#xff09;仓库 二、Docker 安装 1、命令&#xff1a; 2、实操&#xff1a; 三、Docker 镜像操作 1、命令&#xff1…

linux 基于科大讯飞的文字转语音使用

官方文档地址&#xff1a;离线语音合成 Linux SDK 文档 | 讯飞开放平台文档中心 一、SDK下载 1、点击上面官方文档地址的链接&#xff0c;可以跳转到以下界面。 2、点击“普通版”&#xff0c;跳转到以下界面。 3、点击“下载”跳转到以下界面 4、最后&#xff0c;点击“SDK下…

(自用)learnOpenGL学习总结-高级OpenGL-立方体贴图

ok终于来到了立方体贴图了&#xff0c;在这里面我们可以加入好看的天空包围盒&#xff0c;这样的画我们的背景就不再是黑色的了&#xff01; 首先&#xff0c;立方体贴图和前面的sampler2D贴图一样&#xff0c;不过是6个2D组成的立方体而已。 那么为什么要把6个组合在一起呢&…

(七)for循环控制

文章目录 用法while的用法for的用法两者之间的联系可以相互等价用for改写while示例for和while的死循环怎么写for循环见怪不怪表达式1省略第一.三个表达式省略&#xff08;for 改 while&#xff09;全省略即死循环&#xff08;上面已介绍&#xff09; 用法 类比学习while语句 …

Springmvc-@RequestBody

SpringBoot-2.7.12 请求的body参数无法转换&#xff0c;服务端没有报错信息打印&#xff0c;而是响应的状态码是400 PostMapping("/static/user") public User userInfo(RequestBody(required false) User user){user.setAge(19);return user; }PostMapping("…

休息日的思考与额外题——链表

文章目录 前言链表知识点 一、 92. 反转链表 II二、21. 合并两个有序链表总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0c;于是参加了卡子哥的刷题班&#xff0c;训练…

综合类EI,最快11天录用!录用率高,仅5篇版面!

关注【SciencePub学术】公主号&#xff0c;发现期刊更多精彩~ 本期&#xff0c;小编给大家推荐的是一本录用率高且进展超顺的的EI期刊&#xff0c;我处真实录用案例最快仅11天录用&#xff01; 01 期刊基本信息 【期刊简介】最新EI期刊目录内源刊&#xff1b; 【版面情况】…