📄 ruleedit.m
字号:
function ruleedit(action);
%
% Purpose
% Rule editor and parser.
% Synopsis
% ruleedit('a')
% ruleedit(a)
% Description
%
% The Rule Editor, when invoked using ruleedit('a'), is used to modify the
% rules of a FIS structure stored in a file, a.fis. It can also be used to
% inspect the rules being used by a fuzzy inference system.
% To use this editor to create rules, you must first have all of the input
% and output variables you want to use defined with the FIS editor. You can
% create the rules using the listbox and check
% box choices for input and
% output variables, connections, and weights.
% The syntax ruleedit(a) is used when you want to operate on a workspace
% variable for a FIS structure called a.
%
% Menu Items
% On the Rule Editor, there is a menu bar that allows you to open related GUI
% tools, open and save systems, and so on. The File menu for the Rule Editor
% is the same as the one found on the FIS Editor. Refer to the Reference
% entry fuzzy for more information.
% Use the Edit menu items:
% Undo: to undo the most recent change.
% Use the View menu items:
% Edit FIS properties... to invoke the FIS Editor.
% Edit membership functions... to invoke the Membership Function Editor.
% View rules... to invoke the Rule Viewer.
% View surface... to invoke the Surface Viewer.
% Use the Options menu items:
% Language to select the language: English, Deutsch, and Francais
% Format: to select the format:
% verbose uses the words *if* and *then* and so on to create actual
% sentences.
% symbolic substitutes some symbols for the words used in the verbose mode.
% For example, *if A and B then C* becomes *A & B => C.*
% indexed mirrors how the rule is stored in the FIS matrix.
%
% See Also
% addrule, fuzzy, mfedit, parsrule, ruleview, showrule, surfview
% Ned Gulley, 3-30-94 Kelly Liu, 4-10-97
% Copyright (c) 1994-98 by The MathWorks, Inc.
% $Revision: 1.39 $ $Date: 1997/12/12 20:39:44 $
if nargin<1,
newFis=newfis('Untitled');
newFis=addvar(newFis,'input','input1',[0 1]);
newFis=addvar(newFis,'output','output1',[0 1]);
action=newFis;
end
if isstr(action),
if action(1)~='#',
% The string "action" is not a switch for this function,
% so it must be a disk file
fis=readfis(action);
action='#initialize';
end
else
% For initialization, the fis matrix is passed in as the parameter
fis=action;
action='#initialize';
end;
switch action,
case '#initialize',
fisName=fis.name;
fisType=fis.type;
if isfield(fis, 'input')
numInputs=length(fis.input);
else
numInputs=0;
end
if isfield(fis, 'output')
numOutputs=length(fis.output);
else
numOutputs=0;
end
if isfield(fis, 'rule')
numRules=length(fis.rule);
else
numRules=0;
end
%===================================
% Information for all objects
frmColor=192/255*[1 1 1];
btnColor=192/255*[1 1 1];
popupColor=192/255*[1 1 1];
editColor=255/255*[1 1 1];
axColor=128/255*[1 1 1];
border=.01;
spacing=.01;
figPos=get(0,'DefaultFigurePosition');
maxRight=1;
maxTop=1;
btnWid=.14;
btnHt=0.05;
%====================================
% The FIGURE
thisfis{1}=fis;
figNumber=figure( ...
'Name',['Rule Editor: ' fisName], ...
'NumberTitle','off', ...
'Color',frmColor, ...
'MenuBar','none', ...
'Visible','off', ...
'UserData',thisfis, ...
'Position',figPos, ...
'Tag','ruleedit', ...
'BackingStore','off');
figPos=get(figNumber,'position');
%====================================
% The MENUBAR items
% First create the menus standard to every GUI
fisgui #initialize
editHndl=findobj(figNumber,'Type','uimenu','Tag','editmenu');
uimenu(editHndl,'Label','Undo', ...
'Tag','undo', ...
'Enable','off', ...
'Callback','popundo(gcf)');
optHndl=uimenu(figNumber,'Label','Options','Tag','optionsmenu');
langHndl=uimenu(optHndl,'Label','Language','Tag','language');
callbackStr='ruleedit #langselect';
uimenu(langHndl,'Label','English', ...
'Tag','lang', ...
'Checked','on', ...
'Callback',callbackStr);
uimenu(langHndl,'Label','Deutsch', ...
'Tag','lang', ...
'Callback',callbackStr);
uimenu(langHndl,'Label','Francais', ...
'Tag','lang', ...
'Callback',callbackStr);
callbackStr='ruleedit #formatselect';
langHndl=uimenu(optHndl,'Label','Format','Tag','ruleformat');
callbackStr='ruleedit #langselect';
uimenu(langHndl,'Label','verbose', ...
'Tag','rulefrmt', ...
'Checked','on', ...
'Callback',callbackStr);
uimenu(langHndl,'Label','symbolic', ...
'Tag','rulefrmt', ...
'Callback',callbackStr);
uimenu(langHndl,'Label','indexed', ...
'Tag','rulefrmt', ...
'Callback',callbackStr);
%========================================================
% The MAIN frame
bottom=border;
top=maxTop-border;
right=maxRight-border;
left=border;
frmBorder=spacing;
frmPos=[left-frmBorder bottom-frmBorder ...
right-left+frmBorder*2 top-bottom+frmBorder*2];
mainFrmHndl=uicontrol( ...
'Units','normal', ...
'Style','frame', ...
'Position',frmPos, ...
'BackgroundColor',frmColor);
%====================================
bottom=border+4*spacing+btnHt;
% The RULES frame
top=maxTop-border-spacing;
right=maxRight-border-spacing;
left=border+spacing;
frmBorder=spacing;
frmPos=[left-frmBorder bottom-frmBorder ...
right-left+frmBorder*2 top-bottom+frmBorder*2];
ruleFrmHndl=uicontrol( ...
'Style','frame', ...
'Units','normal', ...
'Position',frmPos, ...
'BackgroundColor',frmColor);
%------------------------------------
% The RULES edit window
rulePos=[left top-(top-bottom)*2/5-border (right-left) (top-bottom)*2/5];
if numRules>0,
labelStr=' ';
else
labelStr=' ';
msgStr=['No rules for system "' fisName '"'];
statmsg(figNumber,msgStr);
end
name='rulewindow';
pos=[left bottom btnWid*2 btnHt];
ruleHndl=uicontrol( ...
'Style','listbox', ...
'Units','normal', ...
'Position',rulePos, ...
'BackgroundColor',editColor, ...
'HorizontalAlignment','left', ...
'Callback', 'ruleedit #getrule',...
'Max',1, ...
'Tag',name);
%========radio button for and, or=========
frmPos=[left bottom ...
btnWid+spacing btnHt*2.6];
clsFrmHndl=uicontrol( ...
'Style','frame', ...
'Units','normal', ...
'Position',frmPos, ...
'BackgroundColor',frmColor);
labelPos=[left+1*spacing bottom+btnHt*2 ...
btnWid*.9 btnHt];
clsFrmHndl=uicontrol( ...
'Style','text', ...
'Units','normal', ...
'Position',labelPos, ...
'String', 'Connection',...
'BackgroundColor',frmColor);
pos=[left+2*spacing bottom+1*spacing btnWid*.6 btnHt];
helpHndl=uicontrol( ...
'Style','radio', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'String','and', ...
'Tag', 'radio',...
'Max', 1,...
'Value', 1,...
'Callback','ruleedit #radio');
pos=[left+2*spacing bottom+btnHt+1*spacing btnWid*.6 btnHt];
helpHndl=uicontrol( ...
'Style','radio', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'String','or', ...
'Tag', 'radio',...
'Max', 1,...
'Callback','ruleedit #radio');
%=====weight text=================
pos=[left+(btnWid)+btnHt/2+spacing bottom+btnHt*2 btnWid*.7 btnHt];
helpHndl=uicontrol( ...
'Style','text', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',frmColor, ...
'String','Weight:');
pos=[left+btnWid+btnHt bottom btnWid/2 btnHt];
helpHndl=uicontrol( ...
'Style','edit', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor','white', ...
'String',num2str(1),...
'Callback', 'wStr=max(min(1, str2num(get(gcbo, ''String''))), 0); set(gcbo, ''string'', num2str(wStr))', ...
'Tag', 'weight');
%=========delete======================
boxDstn=btnWid+spacing;
boxWidth=(right-left)/6;
pos=[left+boxDstn*2 bottom btnWid btnHt];
helpHndl=uicontrol( ...
'Style','pushbutton', ...
'Units','normal', ...
'Position',pos, ...
'String','Delete rule',...
'Callback', 'ruleedit #delete',...
'Tag', 'delete');
%========button for add=========
pos=[left+boxDstn*3 bottom btnWid btnHt];
helpHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'String','Add rule', ...
'Callback','ruleedit #add');
%========button for apply=========
pos=[left+boxDstn*4 bottom btnWid btnHt];
helpHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'String','Change rule', ...
'Callback','ruleedit #add');
%=======buttons for shift=============
pos=[right-2*spacing-btnWid*2/3 bottom btnWid/3 btnHt];
helpHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'Tag', 'shiftleft',...
'String','<<', ...
'Callback','ruleedit #shiftleft');
pos=[right-spacing-btnWid/3 bottom btnWid/3 btnHt];
helpHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',pos, ...
'BackgroundColor',btnColor, ...
'Tag', 'shiftright',...
'String','>>', ...
'Callback','ruleedit #shiftright');
%====================================
% The CLOSE frame
bottom=border+4*spacing+btnHt;
top=bottom+btnHt;
right=maxRight-border-spacing;
% Left should be snug up against Rule Format frame
left=border+spacing;
frmBorder=spacing;
%====================================
% The STATUS frame
bottom=border+spacing;
top=bottom+btnHt;
right=maxRight-border-spacing;
left=border+spacing;
frmBorder=spacing;
frmPos=[left-frmBorder bottom-frmBorder ...
(right-left)*2/3+frmBorder*2 top-bottom+frmBorder*2];
mainFrmHndl=uicontrol( ...
'Style','frame', ...
'Units','normal', ...
'Position',frmPos, ...
'BackgroundColor',frmColor);
frmPos=[left-frmBorder+(right-left)*2/3+frmBorder*3 bottom-frmBorder ...
(right-left)*1/3-frmBorder top-bottom+frmBorder*2];
mainFrmHndl=uicontrol( ...
'Style','frame', ...
'Units','normal', ...
'Position',frmPos, ...
'BackgroundColor',frmColor);
%------------------------------------
% The STATUS text window
labelStr=['FIS Name: ' fisName];
name='status';
pos=[left bottom (right-left)/2 btnHt];
txtHndl=uicontrol( ...
'Style','text', ...
'BackgroundColor',frmColor, ...
'HorizontalAlignment','left', ...
'Units','normal', ...
'Position',pos, ...
'Tag',name, ...
'String',labelStr);
%------------------------------------
% The HELP button
% bottom=bottom+spacing;
labelStr='Help';
callbackStr='ruleedit #help';
helpHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',[right-2*btnWid-spacing bottom btnWid btnHt], ...
'BackgroundColor',btnColor, ...
'String',labelStr, ...
'Callback',callbackStr);
%------------------------------------
% The CLOSE button
labelStr='Close';
callbackStr='fisgui #close';
closeHndl=uicontrol( ...
'Style','push', ...
'Units','normal', ...
'Position',[right-btnWid bottom btnWid btnHt], ...
'BackgroundColor',btnColor, ...
'String',labelStr, ...
'Callback',callbackStr);
ruleedit #update
% Normalize all coordinates
hndlList=findobj(figNumber,'Units','pixels');
set(hndlList,'Units','normalized');
% Uncover the figure
thisfis{1}=fis;
set(figNumber, ...
'Visible','on', ...
'UserData',thisfis, ...
'HandleVisibility','callback');
%%init
index=1;
localgetrule(figNumber, index, fis)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -