📄 nnmodref.m
字号:
'ForegroundColor',[0 0 1], ...
'ListboxTop',0, ...
'Position',[156 3 188 20], ...
'Style','text', ...
'Tag','StaticText1');
else
f2=get(fig2,'userdata');
figure(fig2);
end
f2.accept_but = uicontrol('Parent',fig2, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'Callback','nncontrolutil(''nnmodref'',''data_ok'');', ...
'ListboxTop',0, ...
'Position',[2 2 68.75 15], ...
'String','Accept Data', ...
'Tag','Pushbutton1');
st=sprintf('The imported data has %d samples.\nPlease Accept or Reject Data to continue.',sam_training_c);
set(H.error_messages,'string',st);
set(f2.message,'string',st);
else %strcmp(cmd,'gen_data')
a1 = get(H.reference_model,'string');
udFileEdit = get(H.reference_model,'UserData');
LastPath = udFileEdit.PathName;
if isempty(LastPath),
a2 = which(cat(2,a1,'.mdl'));
else
a2 = which(cat(2,LastPath,cat(2,a1,'.mdl')));
end
if (length(a1) == 0 | length(a2) == 0),
Ref_file=get_param(arg1,'Ref_file');
present_error(fig,H,H.reference_model,a1,0, ...
'You must enter a valid filename for your reference model');
return
else
Ref_file=a1;
OpenFlag=1;
ErrorFlag=isempty(find_system(0,'flat','Name',Ref_file));
if ErrorFlag,
ErrorFlag=~(exist(Ref_file)==4);
if ~ErrorFlag,
OpenFlag=0;
load_system(Ref_file);
end
end
if ErrorFlag,
ErrMsg=[Ref_file ' must be the name of a Simulink model.'];
present_error(fig,H,H.reference_model,a1,0,ErrMsg);
return
end
blk=get_param(Ref_file,'blocks');
iblk=0;oblk=0;
for k=1:size(blk,1)
if strcmp(get_param(cat(2,cat(2,Ref_file,'/'),blk{k}),'blocktype'),'Inport')
iblk=iblk+1;
end
if strcmp(get_param(cat(2,cat(2,Ref_file,'/'),blk{k}),'blocktype'),'Outport')
oblk=oblk+1;
end
end
if ~OpenFlag,close_system(Ref_file,0);end
if iblk~=1 | oblk~=1
present_error(fig,H,H.reference_model,a1,0, ...
'The Simulink reference model must have one Inport and one Outport');
return
end
ref_path=a2(1:findstr(a2,a1)-1); set(H.Ref_file_ptr,'userdata',Ref_file);
end
if fig2==0
pos_fig2=get(fig,'Position');
fig2 = figure('Units', 'points',...
'Interruptible','off', ...
'BusyAction','cancel', ...
'HandleVis','Callback', ...
'Name', 'Input-Output Data for NN Model Reference Control',...
'Tag', 'ind_adap_data',...
'NumberTitle', 'off',...
'Position', pos_fig2, ...
'IntegerHandle', 'off',...
'Toolbar', 'none', ...
'WindowStyle','modal');
f2.h1=axes('Position',[0.13 0.60 0.74 0.32],'Parent',fig2);
f2.h2=axes('Position',[0.13 0.15 0.74 0.32],'Parent',fig2);
f2.message= uicontrol('Parent',fig2, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'FontWeight','bold', ...
'ForegroundColor',[0 0 1], ...
'ListboxTop',0, ...
'Position',[156 3 188 20], ...
'Style','text', ...
'Tag','StaticText1');
else
f2=get(fig2,'userdata');
figure(fig2);
end
f2.accept_but = uicontrol('Parent',fig2, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'Callback','nncontrolutil(''nnmodref'',''stop_sim'');', ...
'ListboxTop',0, ...
'Position',[2 2 68.75 15], ...
'String','Stop Simulation', ...
'Tag','Pushbutton1');
f2.stop=0;
set(fig2,'UserData',f2);
set(H.error_messages,'string','Simulating plant. Wait until sample data points are generated');
drawnow; % pause needed to refresh the message
options=simset('OutputPoints','all');
step_size=(max_r_int+min_r_int)/2;
k=1;
k1=1;
% We change cursor shape.
set(fig,'pointer','watch');
Actual_path=pwd;
if isempty(ref_path)
ref_path=Actual_path;
end
cd(ref_path);
tr_dat.Ts=Ts;
while k<=sam_training_c
if ceil((k1-1)/step_size)==(k1-1)/step_size
newsample=rand*(max_r-min_r)+min_r;
k1=1;
step_size=ceil(max([min([(rand*(max_r_int-min_r_int)+min_r_int) max_r_int]) min_r_int])/Ts);
end
k1=k1+1;
tr_dat.U(k,1)=newsample;
[time,xx0,yy] = sim(Ref_file,[(k-1)*Ts k*Ts],options,[[(k-1)*Ts k*Ts]' [tr_dat.U(k) tr_dat.U(k)]']);
options.InitialState=xx0(size(xx0,1),:);
tr_dat.Y(k+1,1)=yy(size(yy,1));
if ceil(k/100)==k/100
f2=get(fig2,'userdata');
if f2.stop~=0
st=sprintf('Simulation stopped by the user.\nPlease Accept or Reject Data to continue.');
set(H.error_messages,'string',st);
H.Data_Available=0;
set(fig,'UserData',H);
sam_training_c=k;
k=k+1;
break
end
st=sprintf('Processing sample # %d of %d total samples.',k,sam_training_c);
set(H.error_messages,'string',st);
set(f2.message,'string',st);
plot((0:k-1)*Ts,tr_dat.U(1:k),'Parent',f2.h1);
plot((0:k-1)*Ts,tr_dat.Y(2:k+1),'Parent',f2.h2);
set(get(f2.h1,'Title'),'string','Reference Model Input','fontweight','bold');
set(get(f2.h2,'Title'),'string','Reference Model Output','fontweight','bold');
set(get(f2.h1,'XLabel'),'string','time (s)');
set(get(f2.h2,'XLabel'),'string','time (s)');
set(fig2,'UserData',f2);
drawnow;
end
k=k+1;
end
if ~f2.stop
st=sprintf('Simulation concluded.\nPlease Accept or Reject Data to continue.');
set(H.error_messages,'string',st);
set(f2.message,'string',st);
end
set(fig,'pointer','arrow');
cd(Actual_path);
tr_dat.U(k,1)=newsample; % We require U and Y have the same size.
set(f2.message,'string',st);
set(f2.accept_but,'Callback','nncontrolutil(''nnmodref'',''data_ok'');', ...
'String','Accept Data');
end
set(H.max_r_edit,'enable','off')
set(H.max_r_text,'enable','off')
set(H.min_r_edit,'enable','off')
set(H.min_r_text,'enable','off')
set(H.max_r_int_edit,'enable','off')
set(H.max_r_int_text,'enable','off')
set(H.min_r_int_edit,'enable','off')
set(H.min_r_int_text,'enable','off')
set(H.sam_training_c_text,'enable','off')
set(H.sam_training_c_edit,'enable','off')
set(H.BrowseButton,'enable','off');
set(H.reference_model,'enable','off');
set(H.reference_model_text,'enable','off');
f2.refuse_but = uicontrol('Parent',fig2, ...
'Units','points', ...
'BackgroundColor',[0.752941176470588 0.752941176470588 0.752941176470588], ...
'Callback','nncontrolutil(''nnmodref'',''data_NO_ok'');', ...
'ListboxTop',0, ...
'Position',[75 2 68.75 15], ...
'String','Refuse Data', ...
'Tag','Pushbutton1');
plot((0:sam_training_c-1)*Ts,tr_dat.U(1:sam_training_c),'Parent',f2.h1);
plot((0:sam_training_c-1)*Ts,tr_dat.Y(2:sam_training_c+1),'Parent',f2.h2);
set(f2.h1,'xlim',[0 (sam_training_c-1)*Ts]);
set(f2.h2,'xlim',[0 (sam_training_c-1)*Ts]);
set(get(f2.h1,'Title'),'string','Reference Model Input','fontweight','bold');
set(get(f2.h2,'Title'),'string','Reference Model Output','fontweight','bold');
set(get(f2.h1,'XLabel'),'string','time (s)');
set(get(f2.h2,'XLabel'),'string','time (s)');
set(fig,'userdata',H)
set(fig2,'UserData',f2);
save(cat(2,tempdir,'ind_adap_data2.mat'));
return;
elseif strcmp(cmd,'data_ok')
load(cat(2,tempdir,'ind_adap_data2.mat'));
delete(cat(2,tempdir,'ind_adap_data2.mat'));
delete(fig2);
N2=length(tr_dat.U);
st=sprintf('Your training data set has %d samples.\nYou can now train the network.',N2-1);
set(H.error_messages,'string',st);
if H.Training_done==1
set(H.Apply_but,'enable','on');
set(H.OK_but,'enable','on');
set(H.Handles.Menus.File.Save_NN,'enable','on')
set(H.Handles.Menus.File.Save_Exit_NN,'enable','on')
end
set(H.Train_con,'enable','on')
set(H.Cancel_but,'enable','on');
H.Data_Available=1;
if H.Data_Imported
H.Data_Generated=0;
set(H.Gen_data_but,'String','Erase Imported Data', ...
'Callback','nncontrolutil(''nnmodref'',''erase_data'')', ...
'TooltipString','The imported data will be erased and the Training Data menu will be enabled.');
else
H.Data_Generated=1;
set(H.Gen_data_but,'String','Erase Generated Data', ...
'Callback','nncontrolutil(''nnmodref'',''erase_data'')', ...
'TooltipString','The generated data will be erased and the Training Data menu will be enabled.');
end
set(fig,'userdata',H)
save(cat(2,tempdir,'nnmodrefdata.mat'));
return
elseif strcmp(cmd,'training_con')
load(cat(2,tempdir,'nnmodrefdata.mat'));
HH=msgbox({['The Neural Network is being configured.'] ['Training will start shortly.'] },me,'warn');
delete(findobj(HH,'style','pushbutton'));
pause(1); % Pause works better here that drawnow.
a1 = str2num(get(H.epochs_c_edit,'string'));
if length(a1) == 0, a1=0; end
if a1<2 | ceil(a1)~=a1,
epochs_c=get_param(arg1,'epochs_c');
present_error(fig,H,H.epochs_c_edit,epochs_c,1, ...
'Please correct the number of controller training epochs per segment.');
delete(HH);
return
else epochs_c=a1; set(H.epochs_c_ptr,'userdata',a1); end
a1 = str2num(get(H.retraining_c_edit,'string'));
if length(a1) == 0, a1=0; end
if a1<1 | ceil(a1)~=a1,
retraining_c=get_param(arg1,'retraining_c');
present_error(fig,H,H.retraining_c_edit,retraining_c,1, ...
'Please, correct the controller training segments value');
delete(HH);
return
else retraining_c=a1; set(H.retraining_c_ptr,'userdata',a1); end
a1 = str2num(get(H.Hidden_layer_size,'string'));
if length(a1) == 0, a1=0; end
if a1<1 | ceil(a1)~=a1,
S1c=get_param(arg1,'S1c');
present_error(fig,H,H.Hidden_layer_size,S1c,1, ...
'You must initialize the size of the hidden layer before starting the simulation.');
delete(HH);
return
else S1c=a1; set(H.S1c_ptr,'userdata',S1c); end
a1 = str2num(get(H.Delayed_ref_input,'string'));
if (length(a1) == 0) | (a1 < 1) | (floor(a1)~=a1),
Nrc=get_param(arg1,'Nrc');
present_error(fig,H,H.Delayed_ref_input,Nrc,1, ...
'You must enter a valid number of delayed reference inputs');
delete(HH);
return
else Nrc=a1; set(H.Nrc_ptr,'userdata',Nrc); end
a1 = str2num(get(H.Delayed_contr_output,'string'));
if (length(a1) == 0) | (a1 < 1) | (floor(a1)~=a1),
Nic=get_param(arg1,'Nic');
present_error(fig,H,H.Delayed_contr_output,Nic,1, ...
'You must enter a valid number of delayed controller outputs');
delete(HH);
return
else Nic=a1; set(H.Nic_ptr,'userdata',Nic); end
a1 = str2num(get(H.Delayed_output,'string'));
if (length(a1) == 0) | (a1 < 1) | (floor(a1)~=a1),
Njc=get_param(arg1,'Njc');
present_error(fig,H,H.Delayed_output,Njc,1, ...
'You must enter a valid number of delayed plant outputs');
delete(HH);
return
else Njc=a1; set(H.Njc_ptr,'userdata',Njc); end
Use_Inc_training=get(H.Use_Inc_training_but,'value');
set(H.Use_Inc_training_ptr,'userdata',Use_Inc_training);
Use_Previous_Weights=get(H.Use_Previous_Weights_but,'value');
set(H.Use_Previous_Weights_ptr,'userdata',Use_Previous_Weights);
mint=str2num(get_param(arg1,'mint'));
maxt=str2num(get_param(arg1,'maxt'));
minp=str2num(get_param(arg1,'minp'));
maxp=str2num(get_param(arg1,'maxp'));
Nj=str2num(get_param(arg1,'Nj'));
Ni=str2num(get_param(arg1,'Ni'));
S1=str2num(get_param(arg1,'S1'));
IW=eval(strvcat(get_param(arg1,'IW')));
LW2_1=eval(strvcat(get_param(arg1,'LW2_1')));
LW1_2=eval(strvcat(get_param(arg1,'LW1_2')));
B1=eval(strvcat(get_param(arg1,'B1')));
B2=eval(strvcat(get_param(arg1,'B2')));
Normalize=str2num(get_param(arg1,'Normalize'));
set(H.Normalize_data,'value',Normalize);
S2=1;
f1 = 'tansig';
f2 = 'purelin';
mM=[mint maxt];
for k=2:Njc
mM=[mM;mint maxt];
end
for k=1:Nic
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -