Fuzzysystem Model
Overview
First of all we had to design a data-model describing a Fuzzy-System. We decided to do this with XML, because of the advantages of XML. These definition is encapsulated in the Data-Model.
Every plugin can access this model by a set of standardized interfaces, so the developers don't have to deal with XML. There are still possibilities to extend this model. Up to now we just defined the data structure for the rulebase and the variablebase of a Fuzzy-System.
XML-Schema(XSD)

Fuzzysystem
a Fuzzysystem has:
- name (name of the Fuzzysystem)
- variablebase (holds all the variables)
- rulebase (holds all the rules)

InferenceStrategy
see: NRC FuzzyJ API
- LarsenProductMaxMin
- MamdaniMinMax
FuzzyValue
- NameOfVariable --> "temperature"
- LinguisticExpression --> "slightly hot" ('very', 'not', 'slightly', 'extremly', 'moreorless', 'above', 'norm'...)
Modifiers
'very', 'not', 'slightly', 'extremly', 'moreorless', 'above', 'norm'...
See the Documentation of the core or NRC FuzzyJ API for further information.
Implementation
The plugin programmer has to use the Interfaces and Methods made available by the "de.htwdd.robotic.fuzzyide.xmlmodel" package.

Every Plugin can get the FuzzyModelController-Instance from the Framework. The Plugin just has to implement the Interface "Datamodelaccessable"... See also the Documentation of the core and the NRC FuzzyJ API.
Example
// inherited from DataModelAccessable /** * called when a datamodel is created gives the plugin the reference to the * datamodel inside this method the plugin should register his observation * *@param fm the FuzzyModel */ public void dataModelCreated(FuzzyModel fm) { // now you can use the DataModel and manipulate it --> see FuzzyModel.java API Vector vars = fm.getVariableBase().getAllVariables(); //get all Variables saved in the XML-Model }
Technology - How it works

We used the Observer- and Observable-Mechanism of the JDK1.4 to stay informed about any changes and update all objects and properties.
The Plugin can register themselves for observing the FuzzyModel by implementing the "ModelObserver" interface. The Plugin will be informed about any changes on the Model by calling the "public void update(Observable obs, Object obj)"-Method.
The whole Implementation itself works with this mechanism... For example: The rulebase observs all rules and will receive a message as soon sth. has changed on any rule... the FuzzyModelControler will also get this message cause it observs the rulebase and if any rule has changed the rulebase has changed to..
Download
classdiagram (gif) | de.htwdd.robotic.fuzzyide.xmlmodel |
XSD - Documentation (zip) | documentation to the XML-Schema of the FuzzyModel |