0
点赞
收藏
分享

微信扫一扫

【无人机】基于粒子群的无人机车载网络优化UAV-VANET附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

​​智能优化算法​​​       ​​神经网络预测​​​       ​​雷达通信 ​​​      ​​无线传感器​​​        ​​电力系统​​

​​信号处理​​​              ​​图像处理​​​               ​​路径规划​​​       ​​元胞自动机​​​        ​​无人机 ​​

⛄ 内容介绍

It is a challenging task to develop an efficient routing solution for a reliable data delivery in urban vehicular environments. Indeed, it is difficult to find a shortest end-to-end connected path especially in urban city given the mobility attern of the vehicles and the various obstructions to a clear transmission such as buildings. To overcome these difficulties, we investigate how unmanned aerial vehicles (UAVs) can assist vehicles on the ground in relaying in urban areas. In this paper, we propose UVAR (UAV-Assisted VANET Routing Protocol), a new routing technique for Vehicular Ad hoc Networks (VANets). This protocol is based on the use of the traffic density and the knowledge of vehicular connectivity in the streets. With this approach UAVs collect information about the traffic density on the ground and the state of vehicles connectivity, and exchange them with vehicles through Hello messages. These information allow UAV to place themselves so as to allow relaying data when connectivity between sole vehicles on the ground is not possible. Through vehicleto-UAV (V2U) communication, the overall connectivity between vehicles is improved and therefore the routing process is efficiently improved. The performance of the proposed protocol is evaluated and the results to different scenarios are discussed.

【无人机】基于粒子群的无人机车载网络优化UAV-VANET附matlab代码_lua

⛄ 部分代码

function out = PSOSearch(param, position)


    % Import trace file(SUMO)

    filename = param.filename;

    filename_obj = param.filename_obj;

    filename_connec = param.filename_connec;


    % Number of vehicles available in the dataset(SUMO)

    nVehicle = param.nVehicle; % Have to change according to the trace file

    niter =param.niter;


    % Infrastructure Position

    pos = position; % Have to change according to the trace file

    infRadius = 500;


    % Reading table

    T = readtable(filename);

    T_obj = readtable(filename_obj);

    T_connec = readtable(filename_connec);

    % Number of rows in the table

    n_rows_obj = height(T_obj);


    % Finding minimum and maximum of Position X and Y

    minPosX = min(T{:,4});

    minPosY = min(T{:,5});

    maxPosX = max(T{:,4});

    maxPosY = max(T{:,5});


    % Vehicle template

    empty_vehicle.id = [];

    empty_vehicle.Position = [];

    empty_vehicle.angle = [];


    % Creating templates for storing Previous connectivity history of vehicles

    empty_pre_conection.id = [];

    empty_pre_conection.id1 = [];

    empty_pre_conection.t1 = 0;

    empty_pre_conection.id2 = [];

    empty_pre_conection.t2 = 0;

    empty_pre_conection.id3 = [];

    empty_pre_conection.t3 = 0;

    empty_pre_conection.id4 = [];

    empty_pre_conection.t4 = 0;

    empty_pre_conection.id5 = [];

    empty_pre_conection.t5 = 0;


    % Create vehicles connections history array

    pre_conection = repmat(empty_pre_conection, nVehicle, 1);


    % Create vehicles array

    object_vehicle = repmat(empty_vehicle, nVehicle, 1);

    for i=1:n_rows_obj

        for j=1:nVehicle

            if strcmp(T_obj{i,1},['veh' num2str((j-1),'%d')])

                object_vehicle(j).id = T_obj{i,1};

                object_vehicle(j).angle = T_obj{i,2};

                object_vehicle(j).Position = [T_obj{i,3}, T_obj{i,4}];

            end

        end

    end


    % Creating vehicles id for 'connection history' data structure

    for i=1:nVehicle

        pre_conection(i).id = ['veh' num2str((i-1), '%d')];

        pre_conection(i).id1 = T_connec{i,1};

        pre_conection(i).t1 = T_connec{i,2};

        pre_conection(i).id2 = T_connec{i,3};

        pre_conection(i).t2 = T_connec{i,4};

        pre_conection(i).id3 = T_connec{i,5};

        pre_conection(i).t3 = T_connec{i,6};

        pre_conection(i).id4 = T_connec{i,7};

        pre_conection(i).t4 = T_connec{i,8};

        pre_conection(i).id5 = T_connec{i,9};

        pre_conection(i).t5 = T_connec{i,10};

    end


    % Storing available vehicle's position in this time-slot (For scatter

    % ploting only)

    counter = 1;

    for i=1:nVehicle

        if ~isempty(object_vehicle(i).id)

            x(counter) = object_vehicle(i).Position(1);

            y(counter) = object_vehicle(i).Position(2);

            all_vehicle(counter).id = object_vehicle(i).id;

            all_vehicle(counter).angle = object_vehicle(i).angle;

            all_vehicle(counter).Position = object_vehicle(i).Position;

            all_vehicle(counter).x = object_vehicle(i).Position(1);

            all_vehicle(counter).y = object_vehicle(i).Position(2);

            all_vehicle(counter).connec_sum = pre_conection(i).t1 + pre_conection(i).t2 + pre_conection(i).t3 ...

                + pre_conection(i).t4 + pre_conection(i).t5;

            counter = counter + 1;

        end

    end


    % Number of vehicles both covered and uncovered

    uncovered_vehicle = all_vehicle;

    nall_vehicle = size(uncovered_vehicle, 2);

    counter1 = 1;


    % Finding all the uncovered vehicles

    for j = 1:niter

        for i = 1:nall_vehicle

            dist(j).inf = sqrt(sum((pos(j).inf - uncovered_vehicle(i).Position) .^2));

            if dist(j).inf > infRadius

                uncovered_vehicle(counter1).id = uncovered_vehicle(i).id;

                uncovered_vehicle(counter1).angle = uncovered_vehicle(i).angle;

                uncovered_vehicle(counter1).Position = uncovered_vehicle(i).Position;

                uncovered_vehicle(counter1).connec_sum = uncovered_vehicle(i).connec_sum;

                counter1 = counter1 + 1;

            end

        end

        uncovered_vehicle = uncovered_vehicle(1:counter1-1);

        nall_vehicle = size(uncovered_vehicle, 2);

        counter1 = 1;

    end


    % Number of uncovered vehicles

    nuncovered_vehicle = size(uncovered_vehicle, 2);


    % Problem Definition

    nVar = 2;   % Decision Variable

    VarSize = [1 nVar]; % Matrix Size of Decision Variables

    VarMin = min(minPosX, minPosY);   % Lower Bound of Decision Variables

    VarMax = max(maxPosX, maxPosY);    % Upper Bound of Decision Variables


    % Parameters of PSO

    MaxIt = param.MaxIt;    % Maximum Number of Iterations

    nPop = param.nPop;  % Population Size

    w = 1;      % Intertia Coefficient

    wdamp = 0.99; % Damping Ratio of Intertia Coefficient

    c1 = 2;     % Personal Acceleration Coefficient

    c2 = 2;     % Social Acceleration Coefficient

    MaxVelocity = 0.15*(VarMax-VarMin);

    MinVelocity = -MaxVelocity;


    % Initialization

    % The particle template

    empty_particle.Position = [];

    empty_particle.Velocity = [];

    empty_particle.Cost = [];

    empty_particle.Best.Position = [];

    empty_particle.Best.Cost = [];


    % create population array

    particle = repmat(empty_particle, nPop, 1);


    % Initialize Global Best

    GlobalBest.Cost = -inf;

    GlobalBest.Position = [0,0];


    % Initialize population members

    for i=1:nPop

        % Generate Random Solution

        particle(i).Position = unifrnd(VarMin, VarMax, VarSize);


        % Initialize Velociy

        particle(i).Velocity = zeros(VarSize);


        % Evaluation

        evaluation = objfuntest(particle(i).Position, nuncovered_vehicle, uncovered_vehicle, pos, niter);

        particle(i).Cost = evaluation.Fitness;

        nMi = evaluation.M;

        nNi = evaluation.N;


        % Update the Personal Best

        particle(i).Best.Position = particle(i).Position;

        particle(i).Best.Cost = particle(i).Cost;


        % Update Global Best

        if particle(i).Best.Cost > GlobalBest.Cost

            GlobalBest = particle(i).Best;

        end


    end

    % Array to Hold Best Cost Value on Each Iteration

    BestCosts = zeros(MaxIt, 1);

    

    nM = 0;

    nN = 0;


    %  Main Loop of PSO

    for it=1:MaxIt

        for i=1:nPop

            % Update Velocity

            particle(i).Velocity = w*particle(i).Velocity ...

                + c1*rand(VarSize).*(particle(i).Best.Position - particle(i).Position) ...

                + c2*rand(VarSize).*(GlobalBest.Position -particle(i).Position);


            % Apply Velocity Limits

            particle(i).Velocity = max(particle(i).Velocity, MinVelocity);

            particle(i).Velocity = min(particle(i).Velocity, MaxVelocity);


            % Update Position

            particle(i).Position = particle(i).Position + particle(i).Velocity;


            % Apply Lower and Upper Bound Limits

            particle(i).Position = max(particle(i).Position, VarMin);

            particle(i).Position = min(particle(i).Position, VarMax);


            % Evaluation

            evaluation = objfuntest(particle(i).Position, nuncovered_vehicle, uncovered_vehicle, pos, niter);

            particle(i).Cost = evaluation.Fitness;


            % Update Personal Best

            if particle(i).Cost > particle(i).Best.Cost


                particle(i).Best.Position = particle(i).Position;

                particle(i).Best.Cost = particle(i).Cost;


                % Update Global Best

                if particle(i).Best.Cost > GlobalBest.Cost

                    GlobalBest = particle(i).Best;

                    nM = evaluation.M;

                    nN = evaluation.N;

                end

            end

        end

        % Store the Best Cost Value

        BestCosts(it) = GlobalBest.Cost;


        % Damping Intertia Coefficient

        w = w * wdamp;

    end

    out.Fitness = GlobalBest.Cost;

    out.Position = GlobalBest.Position;

    out.Uncov_veh = evaluation.V;

    out.nM = nM;

    out.nN = nN;

    out.x = x;

    out.y = y;

    out.VarMin = VarMin;

    out.VarMax = VarMax;

    out.Total_vehicle = size(all_vehicle, 2);

    out.Best_cost = BestCosts;

end

⛄ 运行结果

【无人机】基于粒子群的无人机车载网络优化UAV-VANET附matlab代码_lua_02

【无人机】基于粒子群的无人机车载网络优化UAV-VANET附matlab代码_sed_03

⛄ 参考文献

[1] Oubbati O S ,  Lakas A ,  Lagraa N , et al. UVAR: An intersection UAV-assisted VANET routing protocol[C]// 2016 IEEE Wireless Communications and Networking Conference (WCNC). IEEE, 2016.

[2] Wang X ,  Fu L ,  Zhang Y , et al. VDNet: an infrastructure‐less UAV‐assisted sparse VANET system with vehicle location prediction[J]. Wireless Communications & Mobile Computing, 2016.

[3]Gan, Xiaoying, Wang,等. VDNet: an infrastructure-less UAV-assisted sparse VANET system with vehicle location prediction[J]. Wireless Communications & Mobile Computing, 2016.

⛳️ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



举报

相关推荐

0 条评论