📄 nnimport.m
字号:
warndlg('The fifth and sixth layers of the neural network plant must no have biases.',...
'Import Warning','modal');
return
end
if size(ud.ModelData.Plant.Object.inputConnect)~=[6 3] |...
sum(sum(ud.ModelData.Plant.Object.inputConnect))~=3 | ...
ud.ModelData.Plant.Object.inputConnect(1,1)~=1 | ...
ud.ModelData.Plant.Object.inputConnect(3,2)~=1 | ...
ud.ModelData.Plant.Object.inputConnect(5,3)~=1
warndlg('The neural network plant input must be connected to layers 1, 3 and 5.',...
'Import Warning','modal');
return
else
IW1_1=ud.ModelData.Plant.Object.IW{1,1};
IW3_2=ud.ModelData.Plant.Object.IW{3,2};
IW5_3=ud.ModelData.Plant.Object.IW{5,3};
Ni=max(ud.ModelData.Plant.Object.inputWeights{1,1}.delays)+1;
end
if size(ud.ModelData.Plant.Object.outputConnect)~=[1 6] | ...
sum(ud.ModelData.Plant.Object.outputConnect)~=1 | ...
ud.ModelData.Plant.Object.outputConnect(6)~=1
warndlg('The neural network plant output must be connected to layer 6.',...
'Import Warning','modal');
return
end
if size(ud.ModelData.Plant.Object.layerConnect)~=[6 6] | ...
sum(sum(ud.ModelData.Plant.Object.layerConnect))~=5 | ...
ud.ModelData.Plant.Object.layerConnect(2,1)~=1 | ...
ud.ModelData.Plant.Object.layerConnect(6,2)~=1 | ...
ud.ModelData.Plant.Object.layerConnect(4,3)~=1 | ...
ud.ModelData.Plant.Object.layerConnect(5,4)~=1 | ...
ud.ModelData.Plant.Object.layerConnect(6,5)~=1
warndlg('The neural network plant layers are not correctly connected.',...
'Import Warning','modal');
return
else
LW2_1=ud.ModelData.Plant.Object.LW{2,1};
LW4_3=ud.ModelData.Plant.Object.LW{4,3};
LW5_4=ud.ModelData.Plant.Object.LW{5,4};
LW6_5=ud.ModelData.Plant.Object.LW{6,5};
LW6_2=ud.ModelData.Plant.Object.LW{6,2};
Nj=max(ud.ModelData.Plant.Object.layerWeights{2,1}.delays);
end
else
if ud.ModelData.Plant.Object.numLayers~=2
warndlg('The neural network plant must have 2 layers.',...
'Import Warning','modal');
return
end
if ud.ModelData.Plant.Object.numInputs~=1
warndlg('The neural network plant must have 1 input.',...
'Import Warning','modal');
return
end
if ud.ModelData.Plant.Object.layers{2}.dimensions~=1
warndlg('The neural network plant must have one output.',...
'Import Warning','modal');
return
end
if ~strcmp(ud.ModelData.Plant.Object.layers{1}.transferFcn,'tansig')
warndlg('The transfer function of the first layer of the neural network plant must be TANSIG.',...
'Import Warning','modal');
return
end
if ~strcmp(ud.ModelData.Plant.Object.layers{2}.transferFcn,'purelin')
warndlg('The transfer function of the second layer of the neural network plant must be PURELIN.',...
'Import Warning','modal');
return
end
S1=ud.ModelData.Plant.Object.layers{1}.dimensions;
if ud.ModelData.Plant.Object.biasConnect(1)==0
B1=zeros(S1,1);
else
B1=ud.ModelData.Plant.Object.b{1};
end
if ud.ModelData.Plant.Object.biasConnect(2)==0
B2=0;
else
B2=ud.ModelData.Plant.Object.b{2};
end
if sum(ud.ModelData.Plant.Object.inputConnect==[1;0])~=2
warndlg('The neural network plant input must be connected to layer 1.',...
'Import Warning','modal');
return
else
IW=ud.ModelData.Plant.Object.IW{1,1};
Ni=max(ud.ModelData.Plant.Object.inputWeights{1,1}.delays)+1;
end
if sum(ud.ModelData.Plant.Object.outputConnect==[0 1])~=2
warndlg('The neural network plant output must be connected to layer 2.',...
'Import Warning','modal');
return
end
if sum(ud.ModelData.Plant.Object.layerConnect(:)==[0; 1; 1; 0])~=4
warndlg('The neural network plant layers are not correctly connected.',...
'Import Warning','modal');
return
else
LW1_2=ud.ModelData.Plant.Object.LW{1,2};
LW2_1=ud.ModelData.Plant.Object.LW{2,1};
Nj=max(ud.ModelData.Plant.Object.layerWeights{1,2}.delays);
end
end
PlantOK=1;
end
%---Controller
if strcmp(ud.Handles.type_net,'nnmodref')
udControllerEdit = get(ud.Handles.ControllerEdit,'UserData');
if udControllerEdit.ListIndex~=0,
ud.ModelData.Controller.Name = udControllerEdit.String;
ud.ModelData.Controller.Object = ...
ud.ListData.Objects{udControllerEdit.ListIndex};
if ud.ModelData.Controller.Object.numLayers~=2
warndlg('The neural network controller must have 2 layers.',...
'Import Warning','modal');
return
end
if ud.ModelData.Controller.Object.numInputs~=2
warndlg('The neural network controller must have 2 inputs.',...
'Import Warning','modal');
return
end
if ud.ModelData.Controller.Object.layers{2}.dimensions~=1
warndlg('The neural network controller must have one output.',...
'Import Warning','modal');
return
end
if ~strcmp(ud.ModelData.Controller.Object.layers{1}.transferFcn,'tansig')
warndlg('The transfer function of the first layer of the neural network controller must be TANSIG.',...
'Import Warning','modal');
return
end
if ~strcmp(ud.ModelData.Controller.Object.layers{2}.transferFcn,'purelin')
warndlg('The transfer function of the second layer of the neural network controller must be PURELIN.',...
'Import Warning','modal');
return
end
S1c=ud.ModelData.Controller.Object.layers{1}.dimensions;
if ud.ModelData.Controller.Object.biasConnect(1)==0
B1_c=zeros(S1,1);
else
B1_c=ud.ModelData.Controller.Object.b{1};
end
if ud.ModelData.Controller.Object.biasConnect(2)==0
B2_c=0;
else
B2_c=ud.ModelData.Controller.Object.b{2};
end
if sum(ud.ModelData.Controller.Object.inputConnect(:)==[1;0;1;0])~=4
warndlg('The neural network controller input must be connected to layer 1.',...
'Import Warning','modal');
return
else
IW_r=ud.ModelData.Controller.Object.IW{1,1};
IW_y=ud.ModelData.Controller.Object.IW{1,2};
Nrc=max(ud.ModelData.Controller.Object.inputWeights{1,1}.delays)+1;
Njc=max(ud.ModelData.Controller.Object.inputWeights{1,2}.delays)+1;
end
if sum(ud.ModelData.Controller.Object.outputConnect==[0 1])~=2
warndlg('The neural network controller output must be connected to layer 2.',...
'Import Warning','modal');
return
end
if sum(ud.ModelData.Controller.Object.layerConnect(:)==[0; 1; 1; 0])~=4
warndlg('The neural network controller layers are not correctly connected.',...
'Import Warning','modal');
return
else
IW_u=ud.ModelData.Controller.Object.LW{1,2};
LW_c=ud.ModelData.Controller.Object.LW{2,1};
Nic=max(ud.ModelData.Controller.Object.layerWeights{1,2}.delays);
end
ControllerOK=1;
end
end
figure_variables=get(ud.Handles.parent,'userdata');
parent_simulink=get(figure_variables.gcbh_ptr,'userdata');
if PlantOK
if strcmp(ud.Handles.type_net,'narma_l2')
set_param(parent_simulink,'IW1_1',mat2str(IW1_1,20));
set_param(parent_simulink,'IW3_2',mat2str(IW3_2,20));
set_param(parent_simulink,'IW5_3',mat2str(IW5_3,20));
set_param(parent_simulink,'LW2_1',mat2str(LW2_1,20));
set_param(parent_simulink,'LW4_3',mat2str(LW4_3,20));
set_param(parent_simulink,'LW5_4',mat2str(LW5_4,20));
set_param(parent_simulink,'LW6_5',mat2str(LW6_5,20));
set_param(parent_simulink,'LW6_2',mat2str(LW6_2,20));
set_param(parent_simulink,'B1',mat2str(B1,20));
set_param(parent_simulink,'B2',mat2str(B2,20));
set_param(parent_simulink,'B3',mat2str(B3,20));
set_param(parent_simulink,'B4',mat2str(B4,20));
set_param(parent_simulink,'S1',mat2str(S1,20));
% set_param(parent_simulink,'Ni',mat2str(Ni,20));
% set_param(parent_simulink,'Nj',mat2str(Nj,20));
else
set_param(parent_simulink,'IW',mat2str(IW,20));
set_param(parent_simulink,'LW1_2',mat2str(LW1_2,20));
set_param(parent_simulink,'LW2_1',mat2str(LW2_1,20));
set_param(parent_simulink,'B1',mat2str(B1,20));
set_param(parent_simulink,'B2',mat2str(B2,20));
set_param(parent_simulink,'S1',mat2str(S1,20));
set_param(parent_simulink,'Ni',mat2str(Ni,20));
set_param(parent_simulink,'Nj',mat2str(Nj,20));
end
end
if ControllerOK
set_param(parent_simulink,'IW_y',mat2str(IW_y,20));
set_param(parent_simulink,'IW_u',mat2str(IW_u,20));
set_param(parent_simulink,'IW_r',mat2str(IW_r,20));
set_param(parent_simulink,'LW_c',mat2str(LW_c,20));
set_param(parent_simulink,'B1_c',mat2str(B1_c,20));
set_param(parent_simulink,'B2_c',mat2str(B2_c,20));
set_param(parent_simulink,'S1c',mat2str(S1c,20));
set_param(parent_simulink,'Nic',mat2str(Nic,20));
set_param(parent_simulink,'Njc',mat2str(Njc,20));
set_param(parent_simulink,'Nrc',mat2str(Nrc,20));
end
if PlantOK | ControllerOK
H=get(ud.Handles.parent,'userdata');
arg1=get(H.gcbh_ptr,'userdata');
arg2=get(H.gcb_ptr,'userdata');
feval(ud.Handles.ret_func,'',arg1,arg2,'');
delete(fig)
return
end
warndlg('You must define a neural network to be imported.',...
'Import Warning','modal');
set(fig,'UserData',ud)
uiresume(fig)
end
%-----------------------------Internal Functions--------------------------
%%%%%%%%%%%%%%%%%%%%%%%
%%% LocalFinishLoad %%%
%%%%%%%%%%%%%%%%%%%%%%%
function LocalFinishLoad(ImportFig,ud,FileName,Data)
%---Update the FileNameEdit Userdata
[P,F]=fileparts(FileName);
udNames = get(ud.Handles.FileNameEdit,'UserData');
udNames.PathName=P;
udNames.FileName=F;
set(ud.Handles.FileNameEdit,'UserData',udNames)
%---Update the Import Figure Userdata
set(ud.Handles.ModelList,'String',Data.Names,'value',1)
ud.ListData=Data;
set(ImportFig,'UserData',ud);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -