无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码
?作者簡介:熱愛科研的Matlab仿真開發者,修心和技術同步精進,matlab項目合作可私信。
🍎個人主頁:Matlab科研工作室
🍊個人信條:格物致知。
更多Matlab仿真內容點擊👇
智能優化算法 ?神經網絡預測 雷達通信? 無線傳感器
信號處理 圖像處理 路徑規劃 元胞自動機 無人機? 電力系統
? 內容介紹
基于物聯網的服務受益于云,云提供了幾乎無限的功能,如存儲、處理和通信。然而,移動用戶在滿足服務質量(QoS)規定的情況下從云接收計算仍然面臨挑戰。在本文中,我們研究了使用邊緣計算的計算卸載,這是一種將計算傳遞到移動用戶附近的普及網絡邊緣的新范式。然而,如果沒有強有力的激勵措施,本地邊緣服務器可能不愿意幫助卸載計算。為了激勵云服務運營商和本地邊緣服務器所有者參與計算卸載,我們將云服務運營方和邊緣服務器所有者之間的交互表述為Stackelberg游戲,以通過獲得最佳支付和計算卸載策略,最大化云服務運營和邊緣服務器擁有者的效用。通過理論分析,我們證明了博弈保證達到唯一的納什均衡。然后,我們設計了兩種計算卸載算法,可以在低延遲和降低復雜性方面量化它們的效率。此外,我們通過考慮邊緣服務器所有者動態加入或離開計算卸載來擴展我們的工作。數值結果表明,我們提出的算法在計算卸載方面表現良好,并有效地激勵邊緣服務器所有者為計算卸載做出貢獻。
? 部分代碼
function [bs_income,uav_income,user_outcome] = stackelberg_price_determined(bs,uav,user,epoch)
global user_num uav_num bs_num D ...
? ? ? ?relay_ok selected_uav_relay ...%need_bs need_uav
? ? ? ?offload_bs offload_uav offload_relay selected_uav selected_bs
% global M_i M_j F_i m_i f_i
M_i = ones(bs_num,user_num);? ? % price to the user i @bs
M_j = ones(bs_num,uav_num);? ? ?% price to hire the uav j @bs
F_i = zeros(bs_num,user_num);? ?% the resource allocate to the user i @bs
m_i = ones(uav_num,user_num);? ?% price to the user i @uav
f_i = zeros(uav_num,user_num);? % reource allocate to the user i @uav
[bs_income,uav_income,user_outcome] = deal(zeros(epoch,bs_num),zeros(epoch,uav_num),zeros(epoch,user_num));
[local,offload_bs,offload_uav,offload_relay]=deal(0.25*ones(user_num,1),0.25*ones(user_num,1),0.25*ones(user_num,1),0.25*ones(user_num,1)); % 卸載比例初始化
[at_local,to_bs,to_uav,by_relay] = deal(zeros(user_num,1),zeros(user_num,1),zeros(user_num,1),zeros(user_num,1));
relay_ok = zeros(bs_num,uav_num); % whether the uav choose to be relay for base station g?
[selected_uav,selected_bs,selected_uav_relay] = deal(zeros(user_num,1),zeros(user_num,1),zeros(user_num,1));
[dis_user_uav,dis_uav_bs,dis_user_bs] = get_distance(uav,user,bs);
[Rate_i_g,Rate_i_j,Rate_j_g_i] = deal(ones(user_num,bs_num),ones(user_num,uav_num),ones(uav_num,bs_num));
[record_1,record_2,record_3,record_4] = deal(zeros(user_num,epoch),zeros(user_num,epoch),zeros(user_num,epoch),zeros(user_num,epoch));
%% The Data trans speed subject to the distance between the objects
for b = 1:bs_num
? ?for i = 1:user_num
? ? ? ?Rate_i_g(i,b) = 1000 / dis_user_bs(i,b);
? ?end
? ?for j = 1:uav_num
? ? ? ?Rate_j_g_i(j,b) = 1000 / dis_uav_bs(j,b);
? ?end
end
for i = 1:user_num
? ? for j = 1:uav_num
? ? ? ? Rate_i_j(i,j) = 1000 / dis_user_uav(i,j);
? ? end
end
%% The User associate to the bs & uav nearby
for u = 1:user_num
? ? [~,selected_bs(u)] = min(dis_user_bs(u,:));
? ? [~,selected_uav(u)] = min(dis_user_uav(u,:));
? ? selected_uav_relay(u) = selected_uav(u);
%? ? ?need_bs(selected_bs(u)) = 1;need_uav(selected_uav(u)) = 1;
end
%% Game Iteration
for episode = 1:epoch
? ? now = episode;
? ? %% Game of Leader layer: Base station
? ? for b = 1:bs_num
? ? ? ? % alter the price for user i: M_i && the suitable resource: F_i
? ? ? ? for i = 1:user_num
? ? ? ? ? ? F_i(b,i) = (offload_bs(i)+offload_relay(i)) * D(i);
? ? ? ? ? ? M_i(b,i) = 250;%D(i) / Rate_i_g(i,b);
? ? ? ? end
? ? ? ? % alter the price for uav j : M_j
? ? ? ? for j = 1:uav_num
? ? ? ? ? ? M_j(b,j) = 50 / Rate_j_g_i(j,b);
? ? ? ? end
? ? ? ? % compute the profit of the base station b
? ? ? ? bs_income(episode,b) = utility_base_station(M_i(b,:),M_j(b,:),F_i(b,:),b);
? ? end
? ? %% Game of Vice-leader Layer : UAVs? ?
? ? for u = 1:uav_num
? ? ? ? % alter the price for user i: m_i
? ? ? ? for i = 1:user_num
? ? ? ? ? ? f_i(u,i) = offload_uav(i) * D(i);
? ? ? ? ? ? m_i(u,i) = 70;% D(i) / Rate_i_j(i,u);
? ? ? ? end
? ? ? ? % compute the profit of the uav j
? ? ? ? uav_income(episode,u) = utility_uav(m_i(u,:),f_i(u,:),Rate_j_g_i(u,:),M_j(:,u),u);
? ? end
? ? %% Game of follower layer: Users
? ? for i = 1:user_num
? ? ? ? [at_local(i),to_bs(i),to_uav(i),by_relay(i)] = ...
? ? ? ? utility_user(M_i(:,i),m_i(:,i),F_i(:,i),f_i(:,i),Rate_i_g,Rate_i_j,Rate_j_g_i,i);
? ? ? ? % allocate the compute task
? ? ? ? [local(i),offload_bs(i),offload_uav(i),offload_relay(i)] ...
? ? ? ? ? ? = offload_allocate(at_local(i),to_bs(i),to_uav(i),by_relay(i),D,i);
? ? ? ? [record_1(i,now),record_2(i,now),record_3(i,now),record_4(i,now)]=...
? ? ? ? ? ? deal(local(i),offload_bs(i),offload_uav(i),offload_relay(i));
? ? ? ? if offload_relay(i) ~= 0
? ? ? ? ? ? relay_ok(selected_bs(i),selected_uav_relay(i)) = 1;
? ? ? ? else
? ? ? ? ? ? relay_ok(selected_bs(i),selected_uav_relay(i)) = 0;
? ? ? ? end
? ? ? ? user_outcome(episode,i) = ...
? ? ? ? local(i) * at_local(i) + offload_bs(i) * to_bs(i) + offload_uav(i) * to_uav(i) + offload_relay(i) * by_relay(i);
? ? end
save stackelberg_RL
end
end
? 運行結果
? 參考文獻
?[1] Yang L ,? Xu C ,? Zhan Y , et al. Incentive mechanism for computation offloading using edge computing: A Stackelberg game approach[J]. Computer Networks, 2017, 129(DEC.24):399-409.
? Matlab代碼關注
??部分理論引用網絡文獻,若有侵權聯系博主刪除
?? 關注我領取海量matlab電子書和數學建模資料
總結
以上是生活随笔為你收集整理的无人机边缘计算中的计算卸载——Stackelberg博弈方法论文复现附matlab代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家庭药品管理系统
- 下一篇: matlab人脸追踪,求大神帮助我这个菜