?? anfisedit.m
字號:
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -