⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nnmodref.m

📁 RBF网络逼近、RBF-建模、RBF网络训练与测试程序
💻 M
📖 第 1 页 / 共 5 页
字号:
                                 '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 + -