[2] | 1 | #ifndef _NEUROIMPLFUZZY_H_
|
---|
| 2 | #define _NEUROIMPLFUZZY_H_
|
---|
| 3 |
|
---|
| 4 | #include <stdlib.h>
|
---|
| 5 | #include <math.h>
|
---|
| 6 |
|
---|
| 7 | #include "neuroimpl.h"
|
---|
| 8 | #include "sstring.h"
|
---|
| 9 |
|
---|
| 10 | extern ParamEntry NI_FuzzyNeuro_tab[];
|
---|
| 11 |
|
---|
| 12 | /** Does the fuzzyfication process (of inputs) and defuzzyfication proces (of outpurs) - represents fuzzy rules
|
---|
| 13 | */
|
---|
| 14 | class NI_FuzzyNeuro : public NeuroImpl
|
---|
| 15 | {
|
---|
| 16 | private:
|
---|
| 17 |
|
---|
| 18 | double *fuzzySets; /// list of four digits which represents fuzzy sets: [0]-l, [1]-m, [2]-n, [3]-r, ... fuzzySet[4*i] = left, fuzzySet[4*i + 1] = midleft, fuzzySet[4*i + 2] = midright, fuzzySet[4*i + 3] = right
|
---|
| 19 |
|
---|
| 20 | /** Determines, which fuzzy set is connected with each input of neuron. For instance third rule:
|
---|
| 21 | * 'IF input3 = fuzzy set #3 AND input5 = fuzzy set #1 then output2 = fuzzy set #6 AND output7 = fuzzy set #5'
|
---|
| 22 | * the variables shoul have values as shown below:
|
---|
| 23 | * RulesDef[4]=2; RulesDef[5]=2; //rule 3: 2 inputs, 2 outputs
|
---|
| 24 | * Rules[2][0]=3, Rules[2][1]=3, Rules[2][2]=5, Rules[2][3]=1, Rules[2][4]=2, Rules[2][5]=6, Rules[2][6]=7, Rules[2][3]=5
|
---|
| 25 | */
|
---|
| 26 | int *rulesDef; ///list of rules definitions: nr of inputs in rule 1, nr of outputs in rule 1, ... and so on for each rule
|
---|
| 27 | int **rules; ///list of rules body: input nr, fuzzy set nr, ... , output nr, fuzzy set nr, ... and so on for each rule
|
---|
| 28 |
|
---|
| 29 | /**
|
---|
| 30 | * Sets defuzzyfication parameters: determines - for each rule - cut level <0;1> (minimum membership function of current rule).
|
---|
| 31 | * In fact, defuzzParam remembers the values from 'first layer' - fuzzyfication layer (see neuron at documentation)
|
---|
| 32 | * i.e. rule 1: defuzzParam[0] = 0.3522
|
---|
| 33 | */
|
---|
| 34 | double *defuzzParam; /// i.e.: defuzParam[5] = 0.455 means that rule #6 has got a minimum membership function (of given inputs set for this rule) at value 0.455 (it's cut level)
|
---|
| 35 |
|
---|
| 36 | protected:
|
---|
| 37 |
|
---|
| 38 | ///Fuzzy functions
|
---|
| 39 | double TrapeziumFuzz(int which_fuzzy_set, double input_val);
|
---|
| 40 | int Fuzzyfication();
|
---|
| 41 | int Defuzzyfication();
|
---|
| 42 | int GetFuzzySetParam(int set_nr, double &left, double &midleft, double &midright, double &right);
|
---|
| 43 |
|
---|
| 44 | public:
|
---|
| 45 |
|
---|
| 46 | int fuzzySetsNr; /// number of fuzzy sets
|
---|
| 47 | int rulesNr; ///number of rules
|
---|
| 48 | SString fuzzySetString; /// strings containing all fuzzy sets given in f0
|
---|
| 49 | SString fuzzyRulesString; /// strings containing all fuzzy rules given in f0
|
---|
| 50 |
|
---|
| 51 | NI_FuzzyNeuro() {paramentries=NI_FuzzyNeuro_tab; fuzzySets=defuzzParam=NULL; rulesDef=NULL; rules=NULL;}
|
---|
| 52 | ~NI_FuzzyNeuro();
|
---|
| 53 | NeuroImpl* makeNew() { return new NI_FuzzyNeuro(); };
|
---|
| 54 | void go();
|
---|
| 55 | int lateinit();
|
---|
| 56 | /** Function build model based on given genotype and conts number of neurons connected with fuzzy neuro,
|
---|
| 57 | also checks number of fuzzy neuron inputs.
|
---|
| 58 | \param genotype genotype to be scanned
|
---|
| 59 | \param inputs number of fuzzy neuron inputs
|
---|
| 60 | \param output number of fuzzy neuron outputs (= number of neurons connected to fuzzy neuron)
|
---|
| 61 | @return success or failure
|
---|
| 62 | **/
|
---|
| 63 | static int countOuts(const Model *m, const Neuro *fuzzy);
|
---|
| 64 |
|
---|
| 65 | };
|
---|
| 66 |
|
---|
| 67 | #endif
|
---|