PL5. File CurrGen.m
function [Vc,uc,vc] = CurrGen(Vc_k_1,psi,h)
% CURRGEN generates values of current to input into simulation programs
%
% Inputs:
% Vc_k_1 current velocity at previuos time step (m/s)
% psi ship's heading (rad)
Có thể bạn quan tâm!
- Nghiên cứu điều khiển thích nghi cho robot lặn tự hành - 17
- Nghiên cứu điều khiển thích nghi cho robot lặn tự hành - 18
- Nghiên cứu điều khiển thích nghi cho robot lặn tự hành - 19
Xem toàn bộ 169 trang tài liệu này.
% h sampling time (sec)
%
% Outputs:
% Vc current velocity at present time step (m/s)
% uc longitudinal velocity caused by current (m/s)
% vc lateral velocity caused by current (m/s)
%
% Author: Phung-Hung Nguyen, Korea Maritime University
% Date: 2006/Jan/10th
%
%======================================================================
=
% Setup values
% alph = 0.25;
Vcmax = 1;%0.2572;%1; % Maximum current velocity (m/s) Vcmin = 0.25;%0.1028;%0.5; % Minimum current velocity (m/s) Hc = 110;%220; % Current direction (deg)
%------------------------------------------------
Vc_dot = (2*rand-1)*0.15;% - alph*Vc_k_1; Vc = Vc_k_1 + h*Vc_dot;
if Vc<Vcmin
Vc = Vcmin;%Vc_k_1 - h*Vc_dot; elseif Vc>Vcmax
Vc = Vcmax;%Vc_k_1 - h*Vc_dot; end
% Vc = 0; % This is to set zero current sslip = psi - Hc*pi/180;
if sslip<=-pi
sslip = sslip + 2*pi; elseif sslip<=pi
sslip = sslip; else % pi<sslip<=2*pi
sslip = sslip - 2*pi; end
uc = Vc*cos(sslip); vc = -Vc*sin(sslip);
%>>>>>>>>>>>END<<<<<<<<<<<
PL6. File mạng nơ-ron nhiều lớp truyền thẳng
function Oi = mlnnc(outputs,hiddens,inputs,net_in,W21,W32)
% MLNNC calculate outputs of multi-layer neural network controller. s
% This isingle hidden layer feedforward network
%
% Inputs:
% outputs = i number of neurons in output layer, integer
% hiddens = j number of neurons in hidden layer, integer
% inputs = p number of neurons in input layer, integer
% net_in input signal of neural network, (px1) column vector
% W21 hidden weights, (jxp) matrix
% W32 output weight, (ixj) matrix
%
% Outputs:
% Oi output signal of neural network, (ix1) column vector
%
% Author: Phung-Hung Nguyen (Vietnam Maritime University)
% Date: 2005/Dec/4th
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Check input dimension
if (length(net_in)~=inputs)
error('Length of input vector and number of inputs are not equal
!');
end
neti = 0;
for j=1:hiddens netj(j)=0;
for p=1:inputs
mod_inj(j,p) = net_in(p)*W21(j,p); % Calculated the modulated
input
input
netj(j) = mod_inj(j,p) + netj(j); % Calculated the accumulated
end % End of statement "for p=..." Oj(j) = 1/(1+exp(-netj(j)));
mod_ini(j) = Oj(j)*W32(j); % Calculated the modulated input
neti = neti + mod_ini(j); % Calculated the accumulated input
end % End of statement "if j=..."
Oi = tansig(neti); % This is the output of NN controller
%>>>>>>>>>>>END<<<<<<<<<<<
PL7. File huấn luyện mạng nơ-ron thích nghi
function [W21,W32] = annaiTrain(h,lr,N,outputs,hiddens,inputs,net_in,e,U,r,...
ro_w,lamda_w,beta_w)
% ANNAITRAIN calculate weights of multi-layer feedforward neural network
% using "ANNAI" algorithm
%
% Inputs:
% h sampling inteval
% lr learning rate
% N number of training iterations
% outputs number of neurons in output layer, integer
% hiddens number of neurons in hidden layer, integer
% inputs number of neurons in input layer, integer
% net_in input signal of neural network, column vector
% e controlled error
% U control input
% r additional controlled item
% ro_w constant
% lamda_w constant
% beta_w constant
%
% Outputs:
% W21 hidden weights, matrix
% W32 output weight, matrix
%
% Author: Phung-Hung Nguyen
% Date: 2005/Dec/4th
% Modified to apply to AUV by PHAM VIET ANH 2019/Jun/10th
%======================================================================
W21 = rand(hiddens,inputs)*0.0001; % Set random hidden layer weights W32 = rand(outputs,hiddens)*0.0001; % Set random output layer weights A = ro_w*e + lamda_w*U + beta_w*r;
itr = 0; % Iterations of training while itr<N
neti = 0;
for j=1:hiddens netj(j)=0;
for p=1:inputs
mod_inj(j,p) = net_in(p)*W21(j,p); % Calculated the modulated input
netj(j) = mod_inj(j,p) + netj(j); % Calculated the accumulated input
end % End of statement "for p=..." Oj(j) = 1/(1+exp(-netj(j)));
mod_ini(j) = Oj(j)*W32(j); % Calculated the modulated input neti = neti + mod_ini(j); % Calculated the accumulated input
end % End of statement "if j=..."
% calculate new weights: for j=1:hiddens
% W32_dot(j) = lr*Oj(j)*exp(-2*neti)/(1+exp(-2*neti))^2*A; W32_dot(j) = lr*Oj(j)*A;
W32(j) = W32(j) + h*W32_dot(j); for p=1:inputs
W21_dot(j,p) = net_in(p)*W32(j)*W32_dot(j)*(1/(1+exp(netj(j))));
end
end
W21(j,p) = W21(j,p) + h*W21_dot(j,p);
itr = itr+1;
end % End of "while itr<N"
%>>>>>>>>>>>END<<<<<<<<<<<