120 else
121 {
122 fuzzy_out=DEFAULT_VALUE; // 没有规则被触发
123 }
124 }
125 }
126 /*******************************************************************************
127 Function: fuzzy_engine
128 Description: 实施规则基中的规则
129 Parameters: 无
130 Returns: 无.
131 Side Effects: 无
132 ********************************************************************************/
133 unsigned char bdata clause_val; // 保存当前的分支进行快速访问
134 sbit clause_type = clause_val^7; // 表示分支是否是条件分支或者是结果分支
135 void fuzzy_engine(uchar input)
136 {
137 bit then; // 当正在分析结果时置位
138 unsigned char if_val, // 保存当前规则中条件分支中的值
139 clause, // 规则基中当前的分支
140 mu, // 保存当前分支中的值
141 label=0; // 被条件使用的成员函数
142 then=0; // 设第一个分支是条件分支
143 if_val=MU_MAX; // max out mu for the first rule
144 for (clause=0; clause145 { // 遍历每条规则
146 clause_val=rules[clause]; // 读入当前的分支
147 if (!clause_type)
148 { // 当前的分支是不是条件分支
149 if (then)
150 { // 是否正在分析结果...
151 then=0;
152 if_val=MU_MAX; // 复位mu
153 }
154 mu=compute_memval(input, label); // 得到条件分支的值
155 if_val=mu;
156 label++;
157 }
158 else
159 { // 当前分支是结果
160 then=1; // 置位标志位,如果当前规则的mu比参考的值要大,保存这个值作为新的模糊输出
161 if (outputs[clause_val&0x07] < if_val)
162 {
163 outputs[clause_val&0x07]=if_val;
164 }
165 }
166 }
167 defuzzify(); // 用COG方法计算模糊输出和反模糊输出
168 }
[1] [2]
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。