Description
The aim of this assignment is for you to implement a simple general purpose Fuzzy Rule Based
System, test it thoroughly, and analyse and explain the results from/ operation of the system.
NB: This assignment is about being able to build and fuzzy rule based system and critically evaluate its operation. It is not about building and fancy UI. You may build one, but that will not gain you any extra marks. I am only interested in your ability with respect to Computational Intelligence, not HCI!
You may perform the implementation in a language of your choice. The only restriction is that I must be able to run it . I am a Mac user with access to Unix/Linux (I do not use a pc). I have Java, Lisp, and Python installed on my machine, and can access C and C++ (there may be others but you would have to give adequate instructions on running your system).
You should use the example we went over in the lectures to test your system initially. Your solution should, however, be general purpose as I may try it with different scenarios.
The assignment is divided into the following tasks, perfect completion of which will earn you the associated mark.
- Examine the lecture notes and from those describe the structure of a fuzzy rule based system including how it is decomposed it into a suitable number of parts. For this part you should hand in a high level description of the problem, and how it may be decomposed. 25%
- Create a design document for your system identifying the main features and their functionality (e.g. what approach are you going to take for each part). This part should consist of a brief but fairly detailed design description. 20%
- Implement each of the components you designed in part 2 and test their operation. (You could use the intermediate calculations presented in the lectures/ tutorials for this purpose).
For this part you should hand in the code of your components, with a brief description of each part and some sample results from your testing of each component. 20%
- Provide a complete fuzzy rule-based system made up from the components you developed in part 3. This system should be able to read in a fuzzy rule base, a set of variables and their fuzzy values, and a set of measurements (see below for details of the format) and output the required defuzzified value for the relevant variable. You may use the example discussed in the lectures to test your system (though you are free to make up your own examples).
For this part you should hand in any additional code not already given in part 3, a description of your system and the results of your testing. 20%
- Do a more thorough testing of your system and analyse the results. You may wish to exhaus- tively check the response to all possible values of the inputs (for the example in the lectures these are the Current and Temperature). Discuss your findings.
For this part you should hand in a description of the additional examples you ran, a discussion of the results you obtained – including any improvements that might be made to your system or the specification of the rule base or fuzzy sets. 15%
Some points to take note of in doing this assignment.
- While there are a number of ways in which a fuzzy set can be represented, you must use the 4 tuple representation presented in the lecture.
- To keep your system simple you should use only one type of logical connective (AND or OR) in a rule (if you use any). You may use as many connectives in the rule as required, but do not mix them.
Precise submission instructions will follow nearer the time.
The format of the data to be input to your system must be as follows. (For testing the system I
will expect that these data can be read in from a text file.) For the rulebase:
<RuleBaseName>
Rule 1: if <variable1> is <value1> [and|or] [<variablen> is <valuen>]
then <variablei> is <valuej>
Rule 2: if <variable2> is <value2> [and|or] [<variablen> is <valuen>]
then <variablei> is <valuej>
…
For setting up the fuzzy sets for each variable:
<variableName1>
<valueName1> <4Tuple1>
…
<valueName1> <4Tuple1>
And for the measurements:
<variableName1> = <RealValue1>
…
<variableNamen> = <RealValuen>