欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

Fuzzy - 用于开发模糊模型的库 - MetaTrader 5 的库

author emer | 726 人阅读 | 0 人评论 |

Fuzzy - library for developing fuzzy models - library for MetaTrader 5

Fuzzy - library for developing fuzzy models - library for MetaTrader 5

Fuzzy - library for developing fuzzy models - library for MetaTrader 5

Fuzzy - library for developing fuzzy models - library for MetaTrader 5

德米特里·卡柳日内。 FuzzyNet 项目网站 -http://sourceforge.net/projects/fuzzynet/

将存档解压到 终端数据文件夹
库代码位于 \MQL5\Include\Math\FuzzyNet\
示例测试脚本可以在 \MQL5\Scripts\FuzzyNet\ 中找到

FuzzyNet 是用于创建模糊模型的最流行的数学库之一

Microsoft.Net 模糊逻辑库 (FuzzyNet) 是一个易于使用的组件,可实现 Mamdani 和 Sugeno 模糊推理系统。

模糊网络包括:

将库转换为 MQL5 时添加了以下内容:

使用图书馆

笔记:Mamdani型推理系统可以在创建后、调用系统计算函数之前的任何阶段进行配置。如果系统设置创建后未更改,则系统使用默认设置:

FuzzyNet 库(v.1.2.0)的转换如下所示。

要使用该库,请包含 MamdaniFuzzySystem.mqh 或 SugenoFuzzySystem.mqh 文件,具体取决于您要创建的系统。

该包还包含用于实现模糊规则的辅助类。

Sugeno 型模糊变量在为 Sugeno 型系统开发规则时使用。

在 MQL5 中使用 FuzzyNet 库

在编写模糊系统之前,您应该对其要素有一个清晰的认识,包括:

系统开发及计算:

对于 Mamdani 型系统:

MamdaniFuzzySystem *fuzzy_system=new MamdaniFuzzySystem();
对于 Sugeno 型系统:
SugenoFuzzySystem *fuzzy_system=new SugenoFuzzySystem();

  • 通过为所有变量分配名称和最大/最小值作为参数,独立于系统创建所有模糊输入变量:
    模糊变量 *fuzzy_variable=新的模糊变量(常量 细绳姓名,常量 双倍的分钟,常量 双倍的最大限度);
  • <li>创建模糊项的函数,创建模糊项本身并将适当的名称和隶属函数传递给它们。之后,将项添加到相应的变量中。为了减少程序代码,流程可以写成如下:<pre class="code">fuzzy_variable.Terms().Add(<span class="keyword">新的</span>模糊项(<span class="keyword">常量</span> <span class="built_in">细绳</span>姓名,<span class="keyword">新的</span>IMembershipFunction());</pre>

  • 输入系统的输入变量:
    fuzzy_system.Input().Add(FuzzyVariable fuzzy_variable);
  • <li>创建输入变量,注意您的系统类型。对于 Mamdani 型系统,创建类似于步骤 2 和 3。对于 Sugeno 型模型,创建仅接受变量名称作为参数的特殊模糊变量:<pre class="code">Sugeno变量 *sugeno_variable=<span class="keyword">新的</span>关野变量(<span class="keyword">常量</span> <span class="built_in">细绳</span>姓名);</pre>解释输入值的线性组合的线性函数被添加到 Sugeno 型模糊变量而不是模糊项。名称和系数数组用作线性函数参数。线性方程是基于该数组形成的,因此遵守数组中元素的顺序很重要。系数数组长度应等于输入值的数量或比输入值多一。如果长度相等,则方程的绝对项等于零。如果数组长度超过该数量,则绝对项等于最后一个元素值。从第一个数组元素开始的所有其他数组元素都按照它们输入系统的顺序分配给模糊输入变量。<pre class="code">sugeno_varriable.Functions().Add(fuzzy_sytem.CreateSugenoFunction(<span class="keyword">常量</span> <span class="built_in">细绳</span>姓名,<span class="keyword">常量</span> <span class="keyword">双倍的</span>&coeffs[]));</pre>

  • 与步骤4类似,输出变量也应该添加到系统中:

    对于 Mamdani 型系统:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);

    对于 Sugeno 型系统:

    fuzzy_system.Output().Add(FuzzyVariable fuzzy_variable);
  • <li>根据系统安排一套规则。规则被定义为公共字符串并根据关键字自动分析。关键字是“if”、“then”、“is”、“and”、“or”、“not”、“(”、“)”、“slightly”、“somewhat”、“very”和“extremely”,以及系统中可用的所有变量名称、术语和函数。<br /> <p>对于 Mamdani 型系统:</p>
    MamdaniFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string Rule_text);

    对于 Sugeno 型系统:

    SugenoFuzzyRule *fuzzy_rule = fuzzy_system.ParseRule(const string Rule_text);

  • 将所有规则输入系统:

    对于 Mamdani 型系统:

    fuzzy_system.Rules().Add(MamdaniFuzzyRule fuzzy_rule);

    对于 Sugeno 型系统:

    fuzzy_system.Rules().Add(SugenoFuzzyRule fuzzy_rule);
  • <li>将变量的输入值传递给系统进行计算。为此,应该对它们进行定义。在其输入处,系统接受包括 Dictionary_Obj_Double 类对象的值列表。该类在 Dictionary.mqh 文件中进行了描述。<pre class="code">Dictionary_Obj_Double *p_od_in=new Dictionary_Obj_Double;</pre>该类实现 SetAll(CObject *key, const double value) 方法,该方法接受两个参数 - 一个模糊变量和一个数值。该元素是系统的输入变量。<pre class="code">p_od_in.SetAll(FuzzyVariable fuzzy_variable,<span class="keyword">常量</span> <span class="keyword">双倍的</span> <span class="keyword">价值</span>);</pre>所有其他输入值都以相同的方式填充。创建列表并将所有值添加到其中:<pre class="code">目录 *<span class="keyword">在</span>=新的CList;<span class="keyword">在</span>。<span class="keyword">添加</span>(p_od_in);</pre>

  • 还应指定输出值:
    Dictionary_Obj_Double *p_od_out=新的Dictionary_Obj_Double;   
    目录 *出去=新的C列表;
  • <li>调用我们系统的Calculate(CList *&list)函数返回系统计算结果列表:<pre class="code">输出=fuzzy_system.Calculate(in);</pre>之后,<i>出去</i>list 按输入系统的顺序存储所有计算的输出值。我们只需要接收它们:<pre class="code">p_od_out=out.GetNodeAtIndex(int index);

    双结果=p_od_out.Value();现在,结果变量存储输入系统中指定数字的输出值​​的系统计算结果指数

    示例脚本

    提示示例 (Mamdani)

    Tips_Sample_Mamdani.mq5 根据服务和食物的质量计算您需要支付的小费百分比。

    输入输入参数:

    Fuzzy - library for developing fuzzy models - library for MetaTrader 5

    计算结果:

    Fuzzy - library for developing fuzzy models - library for MetaTrader 5

    巡航控制样本(Sugeno)

    Cruise_Control_Sample_Sugeno.mq5 示例脚本是模糊调节器的示例。它代表一种汽车巡航控制系统,该系统使用当前偏差和偏差变化率的数据来计算必要的加速度,以便汽车达到所需的速度。

    输入输入参数:

    Fuzzy - library for developing fuzzy models - library for MetaTrader 5

    计算结果:

    Fuzzy - library for developing fuzzy models - library for MetaTrader 5


    附件下载

    📎 dictionary.mqh (9.1 KB)

    📎 fuzzyrule.mqh (17.77 KB)

    📎 fuzzyterm.mqh (3.73 KB)

    📎 fuzzyvariable.mqh (5.47 KB)

    📎 genericfuzzysystem.mqh (11.88 KB)

    📎 helper.mqh (7.18 KB)

    📎 inferencemethod.mqh (7.06 KB)

    📎 mamdanifuzzysystem.mqh (20.39 KB)

    📎 membershipfunction.mqh (43.45 KB)

    📎 ruleparser.mqh (36.52 KB)

    📎 sugenofuzzysystem.mqh (12.69 KB)

    📎 sugenovariable.mqh (11 KB)

    📎 cruise_control_sample_sugeno.mq5 (7.65 KB)

    📎 TestFuzzy.mq5 (26.37 KB)

    📎 tips_sample_mamdani.mq5 (5.98 KB)

    Source: MQL5 #13697

    🔐
    请登录后参与评论
    注册满12小时后评论,即可解锁附件下载
    立即登录