Hybrid Model of Platoon Formation

In course of a examination project for EECI course “Analysis and Design of Hybrid Control Systems”, this project has been conducted. The formation of platoons into a hybrid system is modelled as a hybrid system. You can find the full project report here:

Hybrid Model of Platoon Formation

Below, you can find the simulation code for the multi agent case.

function [value discrete] = C(x) 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matlab M-file                
%
% Description: Flow set
% Return 0 if outside of C, and 1 if inside C
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
K = round(length(x)/3);

d = x(1:K);
u = x(K+1:2*K);
p = x(2*K+1:3*K);

value = 0;
for i = 1:K-1
    if d(i+1) = d(i)
        if p(i+1) ~= p(i)
            inside = 1;
        end
    end
end

end

function inside = D(x) 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matlab M-file                
%
% Description: Jump set
% Return 0 if outside of D, and 1 if inside D
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
K = round(length(x)/3);

d = x(1:K);
u = x(K+1:2*K);
p = x(2*K+1:3*K);

inside = 0;

for i = 1:K-1
    if d(i+1) >= d(i)
        if p(i+1) ~= p(i)
            inside = 1;
        end
    end
end
end


function xdot = f(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matlab M-file              
%
% Description: Flow map
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
% state
K = round(length(x)/3);

d = x(1:K);
u = x(K+1:2*K);
p = x(2*K+1:3*K);

% differential equations
xdot = [u;zeros(2*K,1)];
end


function xplus = g(x)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Matlab M-file               
%
% Description: Jump map
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% state
K = round(length(x)/3);

d = x(1:K);
u = x(K+1:2*K);
p = x(2*K+1:3*K);

u_min = 10;
u_max = 20;

% decide whether u_min or u_max will be used in the set valued case
r = rand(1);
if r > 0.5
    bar_u = u_max;
else
    bar_u = u_min;
end

% search for the platoons that caused the jump
for i = 1:K-1
    if d(i+1) >= d(i)
        if p(i+1) ~= p(i)
            break;
        end
    end
end
% find all agents in these platoons
N = find(p == p(i+1) | p == p(i));
p(N) = p(i);
first_agent = sum(N == 1);
last_agent = sum(N == K);
if first_agent && last_agent || ~first_agent && ~last_agent % we're in the middel or one platoon
    u(N) = bar_u;
elseif first_agent && ~last_agent % that's the first platoon
    u(N) = u_min;
elseif ~first_agent && last_agent % that's the las tplatoon
    u(N) = u_max;
end
% the adjustment in order to end up in the flow set after the jump
d(N) = d(N(1));
xplus = [d;u;p];
end


clear all

% function run

u_min = 10;
u_max = 20;

K = 9;

% initial conditions
d = cumsum(rand(1,K))*5;
d = d(K:-1:1);
d = d.';
u(1) = u_min;
des = rand(1,K-2);
u(2:K-1) = u_min*(des > 0.5) + u_max*(des  priority for jumps
% rule = 2 -> priority for flows
rule = 1;

options = odeset('RelTol',1e-6,'MaxStep',.1);

maxStepCoefficient = .1;  % set the maximum step length. At each run of the
                   % integrator the option 'MaxStep' is set to 
                   % (time length of last integration)*maxStepCoefficient.
                   %  Default value = 0.1

% simulate
[t x j] = HyEQsolver( @f,@g,@C,@D,x0,TSPAN,JSPAN,rule,options,maxStepCoefficient);

% plot solution
figure;
subplot(2,1,1)
plot(t,x(:,1:K));
grid on;
% legend('d'interpreter','tex');
ylabel('$d_i$','interpreter','latex');
xlabel('time');
subplot(2,1,2);
plot(t,x(:,2*K+1:end));
xlabel('time');
ylabel('$p_i$','interpreter','latex');
ylim([0,K+1]);

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s