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

📄 anfisedit.m

📁 模糊控制工具箱,很好用的,有相应的说明文件,希望对大家有用!
💻 M
📖 第 1 页 / 共 3 页
字号:
        WatchFig=watchon;
        %===========updata fis for all the fis editors=======
        updtfis(figNumber,trnedfis,[2 3 4 5 6]);
        pushundo(gcbf, trnedfis);
        watchoff(WatchFig);
    end
    %========take training input data from commandline workspace
case '#trndatin',
    figNumber = gcbf;
    fis=get(figNumber, 'UserData');
    fis=fis(1);
    trndatinHndl=findobj(figNumber, 'Tag', 'trndatin');
    trndatinTxt=get(trndatinHndl, 'String');
    trnData=[];
    trnData=evalin('base', trndatinTxt, '[]');
    if isempty(trnData),
        msgbox('No such variable (or variable is empty)')
    else
        fis.trndata(:,1:length(fis.input))=trnData
    end   
    %========take training output data from commandline workspace
    
    
    
case '#genfis',
    figNumber=gcbf;
    genHndl=findobj(figNumber, 'Tag', 'genfis');
    n=get(genHndl, 'Value');
    indexStr='';
    for i=1:length(n)
        if n{i}~=0
            indexStr=get(genHndl(i), 'String');
            break;
        end
    end
    oldfis=get(figNumber,'UserData');
    fis=oldfis{1};
    if ~isfield(fis, 'trndata');
        trnData=[];
    else
        trnData=fis.trndata;
    end
    fismat=[];
    param=[];
    switch indexStr
    case 'Grid partition'
        %========use grid genfis===========
        if isempty(trnData)
            msgbox('Load training data in order to generate ANFIS');
            return
        end
        mfType=getfis(fis, 'inmftypes');   
        dlgFig=findobj('type', 'figure', 'Tag', 'genfis1dlg');
        
        if isempty(dlgFig)
            param=gfmfdlg('#init', fis);
        else
            figure(dlgFig);
        end
        if ~isempty(param)
            mfType=char(param(2));
            outType=char(param(3));
            
            inmflist=str2num(param{1});  % don't use STR2DOUBLE here (can be multi-valued)
            if ~isempty(inmflist)&length(inmflist)~=length(fis.input)
                inmflist(end+1:length(fis.input))=inmflist(end);
            end
            if isempty(inmflist)
                inmflist=[2];
            end
            if isempty(mfType)
                % for i=1:length(fis.input)
                %     mfType(i,:)='gbellmf';
                % end
                mfType='gbellmf';
            end
            
            fismat=genfis1(trnData, inmflist, mfType, outType);
            %in case user changed the following from mfedit or fiseditor
            fismat.type=fis.type;
            fismat.name=fis.name;
            fismat.andMethod = fis.andMethod;
            fismat.orMethod = fis.orMethod;
            fismat.defuzzMethod =fis.defuzzMethod;
            fismat.impMethod = fis.impMethod;
            fismat.aggMethod = fis.aggMethod;
        end
        
    case 'Sub. clustering'
        %========use cluster genfis=====================
        if isempty(trnData)
            msgbox('Load training data in order to generate ANFIS');
            return
        end
        param=inputdlg({'Range of influence:', 'Squash factor:','Accept ratio:','Reject ratio:'},...
            'Parameters for clustering genfis', 1,...
            {'.5', '1.25', '.5', '.15'});
        
        if ~isempty(param)
            watchon;
            fismat=genfis2(trnData(:,1:length(fis.input)), trnData(:,length(fis.input)+1), ...
                str2double(param{1}),[], [str2double(param(2:4));0]');
            fismat.name=fis.name;
            watchoff   
        end
    case 'Load from disk'
        [fname, fpath]=uigetfile('*.fis'); 
        if fname ~=0
            fismat=readfis([fpath fname]);
            %make sure loading a sugeno type fis structure
            if ~strcmp(fismat.type, 'sugeno')
                msgbox('Not a sugeno type, no fis structure is loaded');
                fismat=[];
            end
        end 
    case 'Load from worksp.'
        vname=[];
        vname=inputdlg('input variable name');
        
        if ~isempty(vname)
            fismat=evalin('base', char(vname), '[]');
        end
        if isempty(fismat),
            msgbox('No such variable (or variable is empty)')
        else
            if ~strcmp(fismat.type, 'sugeno')
                msgbox('Not a sugeno type, no fis structure is loaded');
                fismat=[];
            end
        end   
    end
    if ~isempty(fismat)
        if isfield(fis, 'tstdata')
            fismat.tstdata=fis.tstdata;
        end 
        if isfield(fis, 'chkdata')
            fismat.chkdata=fis.chkdata;
        end 
        set(figNumber, 'Name',['Anfis Editor: ' fismat.name]); 
        fismat.trndata=trnData;
        textHndl=findobj(gcbf, 'Tag', 'Comments');
        textstr={['# of input: ' num2str(length(fismat.input))], ['# of outputs: ' ...
                    num2str(length(fismat.output))],  ['# of input mfs: '], [num2str(getfis(fismat, 'inmfs'))]};
        set(textHndl, 'String', textstr);
        cmtHndl=findobj(gcbf, 'Tag', 'status');
        set(cmtHndl, 'String', 'a new fis generated');
        %      set(figNumber, 'Userdata', fismat);
        %========updata all the fis editors===============
        %       set(textHndl, 'String', 'New fis generated');
        pushundo(figNumber, fismat);
        updtfis(figNumber,fismat,[2 3 4 5]);
        LocalEnableBtns(fismat);  
    end   
    
    
    %========open training set file================                
case '#opentrn',
    
    % open an existing file
    oldfis=get(gcbf,'UserData'); 
    fis=oldfis{1};
    typeHndl=findobj(gcbf, 'Tag', 'dattype');
    fromHndl=findobj(gcbf, 'Tag', 'trndatin');
    for i=1:length(typeHndl)
        if get(typeHndl(i), 'Value')==1 
            thistype=get(typeHndl(i), 'String');
            switch thistype
            case 'Testing',
                type ='test';
            case 'Training',
                type='train';
            case 'Checking',
                type='check';
            otherwise,
                type='demo';
            end
            break
        end
    end
    inNum=length(fis.input);
    outNum=length(fis.output);
    varname=[];
    if get(fromHndl(2), 'value') ==0 & ~strcmp(type, 'demo')
        %from workspace
        vname=[];
        trndata=[];
        vname=inputdlg('input variable name');
        dtloaded=0;
        if ~isempty(vname)
            trndata=evalin('base', char(vname), '[]');
            if isempty(trndata),
                msgbox('No such variable (or variable is empty)')
            else
                dtloaded=1;
            end   
        end     
     elseif ~strcmp(type, 'demo')
        %from file
        [fname, fpath]=uigetfile('*.dat'); 
        dtloaded=0;
        trndata=[];
        if isstr(fname)&isstr(fpath)
           trndata=load([fpath fname]);
           dtloaded=1;
        end 
     else
        %demo data
        load('fuzex1trn.dat');
        load('fuzex1chk.dat');
        trndata=fuzex1trn;
        tstdata=fuzex1chk;
        chkdata=[];
        fis=genfis1(trndata, 4, 'gaussmf');
        fis.trndata=trndata;
        fis.tstdata=tstdata;
        fis.chkdata=chkdata;
        dtloaded=1;
        inNum = size(trndata,2)-1;
    end  
    if ~isempty(trndata) & ~strcmp(type, 'demo'),
        if size(trndata, 2)<=1
            msgbox('Data needs to be at least two columes! No data is loaded.')
            clear trndata;
            statueHndl=findobj(gcbf, 'Tag', 'status');
            set(statueHndl, 'String', [type ' data is not loaded']);
            return;
        end
        inNumNew=size(trndata,2)-1;
        if inNumNew~=inNum 
            if  ~strcmp(fis.input(1).name,'emptyinput1') | strcmp(type,'test')==1 | strcmp(type,'check')==1
                msgbox({['The number of inputs for ' type ' data is ' num2str(inNumNew)],...
                        ['The number of inputs for current fuzzy system is ' num2str(inNum)],...
                        ['No new ' type ' data is loaded']});
                qustout='No';
            else
                qustout='Yes';
            end
            if strcmp(qustout, 'Yes')==1
                if strcmp(fis.input(1).name,'emptyinput1'),
                    fis.input(1).name = 'input1';
                end
                dtloaded=1;
                if inNumNew>inNum
                    for i=inNum+1:inNumNew
                        fis=addvar(fis,'input',['input' num2str(i)],[0 1],'init');
                    end
                else
                    for i=inNum:-1:inNumNew+1
                        fis=rmvar(fis,'input', i, true);
                    end 
                end
                inNum=length(fis.input);
            else
                dtloaded=0;
                clear trndata;
                statueHndl=findobj(gcbf, 'Tag', 'status');
                
                set(statueHndl, 'String', 'Training data is not loaded');
            end
        end
    end
    if dtloaded==1
        lineMarker=['o', '.', '+'];
        colorIndex=1;
        titleStr='Demo Data';
        switch type
        case 'train'
            fis.trndata=trndata;
            titleStr='Training Data (ooo)';
        case 'test'
            fis.tstdata=trndata;
            titleStr='Testing Data (...)';
            colorIndex=2;
        case 'check'
            fis.chkdata=trndata;
            titleStr='Checking Data (+++)';
            colorIndex=3;
        end 
        updtfis(gcbf,fis,[6]);
        textHndl=findobj(gcbf, 'Tag', 'Comments');
        textstr={['# of inputs: ' num2str(length(fis.input))], ['# of outputs: ' ...
                    num2str(length(fis.output))],  ['# of input mfs: '], [ num2str(getfis(fis, 'inmfs'))],...
                ['# of ' type ' data pairs: ' num2str(size(trndata,1))]};
        targetlineHndl=line([1:size(trndata, 1)], trndata(:, inNum+outNum),...
            'lineStyle', 'none', ...
            'Marker', lineMarker(colorIndex), 'Tag', 'targetline'); 
        title(titleStr);
        xlabelHndl=get(gca, 'XLabel');
        
        set(xlabelHndl, 'String', 'data set index');
        ylabelHndl=get(gca, 'YLabel');
        set(ylabelHndl, 'String', 'Output');
        set(textHndl, 'String', textstr);
        cmtHndl=findobj(gcbf, 'Tag', 'status');
        set(cmtHndl, 'String', [type ' data loaded']);
        pushundo(gcbf, fis);
        %      set(gcbf, 'UserData', fis); 
    end
    
    LocalEnableBtns(fis);  
    
    %% end
    %=============test anfis==============
case '#test',
    fis=get(gcbf,'UserData');
    fis=fis{1};
    testHndl=findobj(gcbf, 'Tag', 'test');
    cla
    for i=1:length(testHndl)
        if get(testHndl(i), 'Value')==1 
            thistype=get(testHndl(i), 'String');
            testdata=[];
            markerStr='o';
            switch thistype
            case 'Testing data',
                if isfield(fis, 'tstdata')
                    testdata=fis.tstdata;
                    markerStr='.';
                else
                    msgbox([thistype ' does not exist']);         
                    return
                end
            case 'Training data',
                if isfield(fis, 'trndata')
                    testdata=fis.trndata;
                    markerStr='o';
                else
                    msgbox([thistype ' does not exist']);
                    return
                end
            case 'Checking data',
                if isfield(fis, 'chkdata')
                    testdata=fis.chkdata;
                    markerStr='+';
                else
                    msgbox([thistype ' does not exist']);
                    return
                end
            otherwise,
                msgbox([thistype ' does not exist']);
                return
            end
            break
        end
    end
    if ~isempty(testdata)
        xlabelHndl=get(gca, 'XLabel');
        ylabelHndl=get(gca, 'YLabel');
        set(xlabelHndl, 'String', 'Index');
        set(ylabelHndl, 'String', 'Output');
        datasize=size(testdata, 1);
        inputnum=size(testdata, 2)-1;
        targetdata=testdata(1:datasize, inputnum+1);
        testOut=evalfis(testdata(1:datasize, 1:inputnum), fis);
        %      errordata=sum(abs(targetdata-testOut))/length(targetdata);
        errordata=sqrt(sum((targetdata-testOut)'*(targetdata-testOut))/length(targetdata));
        targetlineHndl=line([1:datasize],targetdata,...
            'lineStyle', 'none', 'Marker', markerStr); 
        title( [thistype ' : ' markerStr '   FIS output : *']);
        testlineHndl=line([1:datasize],testOut, 'lineStyle', 'none', 'Marker', '*', 'Color', 'red'); 
        statueHndl=findobj(gcbf, 'Tag', 'status');
        set(statueHndl, 'String', ['Average testing error: ' num2str(errordata)]);
    else
        msgbox([thistype ' does not exist']);
    end
case '#cleardata'
    oldfis=get(gcbf,'UserData'); 
    fis=oldfis{1};
    typeHndl=findobj(gcbf, 'Tag', 'dattype');
    for i=1:length(typeHndl)
        if get(typeHndl(i), 'Value')==1 
            thistype=get(typeHndl(i), 'String');
            out=questdlg({['do you really want to clear ' thistype ' Data?']}, '', 'Yes', 'No', 'No'); 
            if strcmp(out, 'Yes')
                switch thistype
                case 'Testing',
                    fis.tstdata=[];
                case 'Training',
                    fis.trndata=[];
                case 'Checking',
                    fis.chkdata=[];
                end
                cla
                pushundo(gcbf, fis);
            end
            break
        end
    end
    
case '#radioloadfrom'
    curHndl=gcbo;
    radioHndl=findobj(gcbf, 'Tag', 'trndatin');
    if radioHndl(1)==curHndl
        set(radioHndl(2), 'Value', 0);
        set(radioHndl(1), 'Value', get(radioHndl(1), 'max'));
    else
        set(radioHndl(1), 'Value', 0);
        set(radioHndl(2), 'Value', get(radioHndl(2), 'max'));
    end
case '#radioloadtype'
    curHndl=gco;
    radioHndl=findobj(gcbf, 'Tag', 'dattype');
    set(radioHndl, 'Value', 0);
    set(curHndl, 'Value', 1);
case '#radiogenfis'
    curHndl=gco;
    set(curHndl, 'Value', get(curHndl, 'max'));
    thisstr=get(curHndl, 'String');
    genHndl=findobj(gcbf, 'Tag', 'genfisbtn');
    radioHndl=findobj(gcbf, 'Tag', 'genfis');
    for i=1:length(radioHndl)
        if radioHndl(i)~=curHndl
            set(radioHndl(i), 'Value', 0);
        end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -