Kitaplıklar: Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane

 

Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane:

Bulanık modeller geliştirmek için olan FuzzyNet kütüphanesi C# ile yazılmıştır. MQL5'e port edilirken, kütüphaneye Mamdani türü sistemler için 8 üyelik fonksiyonu ve 4 durulaştırma metodu eklenmiştir.

Fuzzy - Bulanık Modeller Geliştirmek İçin Kütüphane

Yazar: MetaQuotes

 

1. Bunun artık mt5'te mevcut olması harika. Matematiğin Afrika'da matematik olduğunu ve MT4'te çalışacağını doğru anlıyor muyum?

2. Fuzzi'yi ilk olarak Matlab'da denedim, ancak dürüst olmak gerekirse, uzun zaman önceydi ve bunu garantili karla forex ticaretine nasıl uygulayacağımı hiç anlamadım. Sonuç olarak, dalgacıklar, istatistikler ve benzeri yönlere gittim.

3. Fuzzi-logic'in pratikte nasıl uygulanacağına dair literatür önerebilir misiniz? Ticarette olmasa bile.

4. Konuyla ilgileniyorum, sitenin bu konuda bir makaleye ihtiyacı var mı?

 
Alexey Volchanskiy:

1. Bunun artık mt5'te mevcut olması harika. Matematiğin Afrika'da matematik olduğunu ve MT4'te çalışacağını doğru anlıyor muyum?

2. Fuzzi'yi ilk olarak Matlab'da denedim, ancak dürüst olmak gerekirse, uzun zaman önceydi ve bunu garantili karla forex ticaretine nasıl uygulayacağımı hiç anlamadım. Sonuç olarak, dalgacıklar, istatistikler ve benzeri yönlere gittim.

3. Fuzzi-logic'in pratikte nasıl uygulanacağına dair literatür önerebilir misiniz? Ticarette olmasa bile.

4. Konuyla ilgileniyorum, sitenin bu konuda bir makaleye ihtiyacı var mı?

Merhaba.

1. MT4 için uyarlama yapacağız (biraz sonra)

3. 4. Yakında FuzzyNet kullanımı hakkında bir makale yayınlayacağız. Bundan sonra konuyu daha somut bir şekilde tartışmak için Hizmet Masasına yazın.

 

Konu ilgiyi hak ediyor. Uygulamada konunun anlaşılmasını gerektirir. Ve bu açıdan bakıldığında, ipucu örnekleri ciddi değildir. Mamdani ve Sugeno sistemleri arasındaki fark en azından geçerken açıklanmalıdır. Ve bulanık mantığın temel kavramları, böyle bir kavramı ilk kez duyanlar için yararlı olacaktır.

Arşivde bir yerlerde bulanık mantık üzerine Rusça bir kitap var ( Fuzzy Logic System programının açıklaması). Yani arşivde bir vuruşla bulamayacaksınız. Daha sonra yayınlayacağım.

İyi şanslar

 
Konu hakkında temel bilgiye sahip birkaç kaynak.
Dosyalar:
FuzLog.zip  1062 kb
 

Merhaba,

Fuzzy, SVM, Neural gibi sistemleri seviyorum, bu yüzden etrafı izlerken bu kütüphaneyi buldum, denedim. İçerdiği betikler anlamak için yeterli, ancak derlemedeki birkaç hatayı fark etmek istiyorum - yani sugeno ile cruise_control_sample_sugeno.mq5 betiğinde :

//+------------------------------------------------------------------+
//|fuzzynet.mqh |
//| Telif Hakkı 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//| FuzzyNet kütüphanesinin MetaQuotes Language 5'te (MQL5) uygulanması
//||
//| FuzzyNet kütüphanesinin özellikleri şunları içerir: |
//| - Mamdani bulanık modeli oluşturun|
//| - Sugeno bulanık modeli oluşturun|
//| - Normal üyelik fonksiyonu|
//| - Üçgen üyelik fonksiyonu|
//| - Trapezoidal üyelik fonksiyonu|
//| - Sabit üyelik fonksiyonu|
//| - Ağırlık merkezinin (COG) bulanıklaştırma yöntemi |
//| - Alan açıortayının (BOA) bulanıklaştırma yöntemi |
//| - Maksimumların ortalamasının bulanıklaştırma yöntemi (MeOM) |
//||
//| MQL5 için FuzzyNet arasında herhangi bir işlevsel farklılık bulursanız |
//| ve orijinal FuzzyNet projesi için lütfen | geliştiricileri ile iletişime geçin.
//| www.mql5.com adresindeki Forumda MQL5 .|
//||
//| Hesaplama algoritmalarında bulunan hataları bildirebilirsiniz.
//| FuzzyNet proje koordinatörlerini bilgilendirerek FuzzyNet kütüphanesi |
//+------------------------------------------------------------------+
//| KAYNAK LISANSI|
//||
//| Bu program özgür bir yazılımdır; yeniden dağıtabilirsiniz ve/veya |
//| GNU Genel Kamu Lisansı koşulları altında şu şekilde değiştirin
//| Özgür Yazılım Vakfı tarafından yayınlanmıştır(www.fsf.org); ya |
//| Lisansın 2. sürümü veya (sizin tercihinize bağlı olarak) daha sonraki herhangi bir sürümü. |
//||
//| Bu program yararlı olacağı umuduyla dağıtılmaktadır, |
//| ancak HİÇBİR GARANTİ OLMAKSIZIN; zımni garanti bile olmaksızın |
//| SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK. Bakınız |
//| Daha fazla ayrıntı için GNU Genel Kamu Lisansı. |
//||
//| GNU Genel Kamu Lisansının bir kopyası şu adreste mevcuttur |
//| http://www.fsf.org/licensing/licenses                            |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| Kütüphaneleri bağlama|
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\SugenoFuzzySystem.mqh>
//--- giriş parametreleri
input double   Speed_Error;
input double   Speed_ErrorDot;
//+------------------------------------------------------------------+
//| Betik program başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Sugeno Bulanık Sistem
   CSugenoFuzzySystem *fsCruiseControl=new CSugenoFuzzySystem();
//--- Sistem için ilk giriş değişkenlerini oluşturun
   CFuzzyVariable *fvSpeedError=new CFuzzyVariable("SpeedError",-20.0,20.0);
   fvSpeedError.Terms().Add(new CFuzzyTerm("slower",new CTriangularMembershipFunction(-35.0,-20.0,-5.0)));
   fvSpeedError.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-15.0, -0.0, 15.0)));
   fvSpeedError.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(5.0, 20.0, 35.0)));
   fsCruiseControl.Input().Add(fvSpeedError);
//--- Sistem için ikinci giriş değişkenlerini oluşturun
   CFuzzyVariable *fvSpeedErrorDot=new CFuzzyVariable("SpeedErrorDot",-5.0,5.0);
   fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("slower", new CTriangularMembershipFunction(-9.0, -5.0, -1.0)));
   fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-4.0, -0.0, 4.0)));
   fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(1.0, 5.0, 9.0)));
   fsCruiseControl.Input().Add(fvSpeedErrorDot);
//--- Çıktı Oluştur
   CSugenoVariable *svAccelerate=new CSugenoVariable("Accelerate");
   double coeff1[3]={0.0,0.0,0.0};
   svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("zero",coeff1));
   double coeff2[3]={0.0,0.0,1.0};
   svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("faster",coeff2));
   double coeff3[3]={0.0,0.0,-1.0};
   svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("slower",coeff3));
   double coeff4[3]={-0.04,-0.1,0.0};
   svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("func",coeff4));
   fsCruiseControl.Output().Add(svAccelerate);
//--- Craete Sugeno bulanık kuralı
   CSugenoFuzzyRule *rule1 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is slower) then (Accelerate is faster)");
   CSugenoFuzzyRule *rule2 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is zero) then (Accelerate is faster)");
   CSugenoFuzzyRule *rule3 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is faster) then (Accelerate is zero)");
   CSugenoFuzzyRule *rule4 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is slower) then (Accelerate is faster)");
   CSugenoFuzzyRule *rule5 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is zero) then (Accelerate is func)");
   CSugenoFuzzyRule *rule6 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is faster) then (Accelerate is slower)");
   CSugenoFuzzyRule *rule7 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is slower) then (Accelerate is faster)");
   CSugenoFuzzyRule *rule8 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is zero) then (Accelerate is slower)");
   CSugenoFuzzyRule *rule9 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is faster) then (Accelerate is slower)");
//--- Sisteme Sugeno bulanık kuralı ekleyin
   fsCruiseControl.Rules().Add(rule1);
   fsCruiseControl.Rules().Add(rule2);
   fsCruiseControl.Rules().Add(rule3);
   fsCruiseControl.Rules().Add(rule4);
   fsCruiseControl.Rules().Add(rule5);
   fsCruiseControl.Rules().Add(rule6);
   fsCruiseControl.Rules().Add(rule7);
   fsCruiseControl.Rules().Add(rule8);
   fsCruiseControl.Rules().Add(rule9);
//--- Giriş değerini ayarla ve sonucu al
   CList *in=new CList;
   CDictionary_Obj_Double *p_od_Error=new CDictionary_Obj_Double;
   CDictionary_Obj_Double *p_od_ErrorDot=new CDictionary_Obj_Double;
   p_od_Error.SetAll(fvSpeedError,Speed_Error);
   p_od_ErrorDot.SetAll(fvSpeedErrorDot,Speed_ErrorDot);
   in.Add(p_od_Error);
   in.Add(p_od_ErrorDot);
//--- Sonuç alın
   CList *result;
   CDictionary_Obj_Double *p_od_Accelerate;
   result=fsCruiseControl.Calculate(in);
   p_od_Accelerate=result.GetNodeAtIndex(0);
   Alert("Accelerate, %: ",p_od_Accelerate.Value()*100);
   delete in;
   delete result;
   delete fsCruiseControl;
  }
//+------------------------------------------------------------------+

Ve mamdani ile komut dosyası :

//+------------------------------------------------------------------+
//|fuzzynet.mqh |
//| Telif Hakkı 2015, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//| FuzzyNet kütüphanesinin MetaQuotes Language 5'te (MQL5) uygulanması
//||
//| FuzzyNet kütüphanesinin özellikleri şunları içerir: |
//| - Mamdani bulanık modeli oluşturun|
//| - Sugeno bulanık modeli oluşturun|
//| - Normal üyelik fonksiyonu|
//| - Üçgen üyelik fonksiyonu|
//| - Trapezoidal üyelik fonksiyonu|
//| - Sabit üyelik fonksiyonu|
//| - Ağırlık merkezinin (COG) bulanıklaştırma yöntemi |
//| - Alan açıortayının (BOA) bulanıklaştırma yöntemi |
//| - Maksimumların ortalamasının bulanıklaştırma yöntemi (MeOM) |
//||
//| MQL5 için FuzzyNet arasında herhangi bir işlevsel farklılık bulursanız |
//| ve orijinal FuzzyNet projesi için lütfen | geliştiricileri ile iletişime geçin.
//| www.mql5.com adresindeki Forumda MQL5 .|
//||
//| Hesaplama algoritmalarında bulunan hataları bildirebilirsiniz.
//| FuzzyNet proje koordinatörlerini bilgilendirerek FuzzyNet kütüphanesi |
//+------------------------------------------------------------------+
//| KAYNAK LISANSI|
//||
//| Bu program özgür bir yazılımdır; yeniden dağıtabilirsiniz ve/veya |
//| GNU Genel Kamu Lisansı koşulları altında şu şekilde değiştirin
//| Özgür Yazılım Vakfı tarafından yayınlanmıştır(www.fsf.org); ya |
//| Lisansın 2. sürümü veya (sizin tercihinize bağlı olarak) daha sonraki herhangi bir sürümü. |
//||
//| Bu program yararlı olacağı umuduyla dağıtılmaktadır, |
//| ancak HİÇBİR GARANTİ OLMAKSIZIN; zımni garanti bile olmaksızın |
//| SATILABİLİRLİK veya BELİRLİ BİR AMACA UYGUNLUK. Bakınız |
//| Daha fazla ayrıntı için GNU Genel Kamu Lisansı. |
//||
//| GNU Genel Kamu Lisansının bir kopyası şu adreste mevcuttur |
//| http://www.fsf.org/licensing/licenses&nbsp;                           |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| Kütüphaneleri bağlama|
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\MamdaniFuzzySystem.mqh>
//--- giriş parametreleri
input double   Service;
input double   Food;
//+------------------------------------------------------------------+
//| Betik program başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Mamdani Bulanık Sistem
   CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem();
//--- Sistem için ilk giriş değişkenlerini oluşturun
   CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0);
   fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
   fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
   fsTips.Input().Add(fvService);
//--- Sistem için ikinci giriş değişkenlerini oluşturun
   CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0);
   fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
   fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
   fsTips.Input().Add(fvFood);
//--- Çıktı Oluştur
   CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0);
   fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
   fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
   fsTips.Output().Add(fvTips);
//--- Üç Mamdani bulanık kuralı oluşturun
   CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor )  or (food is rancid) then tips is cheap");
   CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
   CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");
//--- Sisteme üç Mamdani bulanık kuralı ekleyin
   fsTips.Rules().Add(rule1);
   fsTips.Rules().Add(rule2);
   fsTips.Rules().Add(rule3);
//--- Giriş değerini ayarla
   CList *in=new CList;
   CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double;
   CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double;
   p_od_Service.SetAll(fvService, Service);
   p_od_Food.SetAll(fvFood, Food);
   in.Add(p_od_Service);
   in.Add(p_od_Food);
//--- Sonuç alın
   CList *result;
   CDictionary_Obj_Double *p_od_Tips;
   result=fsTips.Calculate(in);
   p_od_Tips=result.GetNodeAtIndex(0);
   Alert("Tips, %: ",p_od_Tips.Value());
   delete in;
   delete result;
   delete fsTips;
  }
//+------------------------------------------------------------------+

Paylaşımınız için teşekkürler!

 
02'den fazla girdi değişkenine sahip bir mandani modeli oluşturmak mümkün mü? Üçüncü bir girdi değişkeni girdiğimde hata alıyorum.
 

Sevgili lib'i destekleyenler, iyi ya da sadece herhangi biri yardım plz.... :) Hesaplamaları hızlandırmak istiyorum. Ekteki örnekte bulanık mantık sınıflarının nesnelerini oluşturan, sonucu hesaplayan ve silen bir betik var. Nesnelerin 1 kez oluşturulabilmesini ve Calculate()'de yalnızca yeni değerleri geçmesini ve önceden yapılandırılmış bulanık mantıkla sonuçları almasını sağlamak istiyorum.

İşte doğru çalışan orijinal örnek:

//+------------------------------------------------------------------+
//|ipucu örneği.mq5 |
//| Telif Hakkı 2017, MetaQuotes Software Corp. | |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Math\Fuzzy\MamdaniFuzzySystem.mqh>
//--- giriş parametreleri
input double   Service;
input double   Food;

//+------------------------------------------------------------------+
//| Uzman başlatma işlevi|
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  //--- Mamdani Bulanık Sistem 
   CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem();
//--- Sistem için ilk giriş değişkenlerini oluşturun
   CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0);
   fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
   fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
   fsTips.Input().Add(fvService);
//--- Sistem için ikinci giriş değişkenlerini oluşturun
   CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0);
   fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
   fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
   fsTips.Input().Add(fvFood);
//--- Çıktı Oluştur
   CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0);
   fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
   fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
   fsTips.Output().Add(fvTips);
//--- Üç Mamdani bulanık kuralı oluşturun
   CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor )  or (food is rancid) then tips is cheap");
   CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
   CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");
//--- Sisteme üç Mamdani bulanık kuralı ekleyin
   fsTips.Rules().Add(rule1);
   fsTips.Rules().Add(rule2);
   fsTips.Rules().Add(rule3);
//--- Giriş değerini ayarla
   CList *in=new CList;
   CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double;
   CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double;
   p_od_Service.SetAll(fvService, Service);
   p_od_Food.SetAll(fvFood, Food);
   in.Add(p_od_Service);
   in.Add(p_od_Food);
//--- Sonuç alın
   CList *result;
   CDictionary_Obj_Double *p_od_Tips;
   result=fsTips.Calculate(in);
   p_od_Tips=result.GetNodeAtIndex(0);
   Print("Tips, %: ",p_od_Tips.Value());
   delete in;
   delete result;
   delete fsTips;
  }
//+------------------------------------------------------------------+

Ve işte benim hata veren örneğim:

2017.09.07 14:28:56.949 Core 1  2017.07.03 00:00:00   Input values count is incorrect.
2017.09.07 14:28:56.949 Core 1  2017.07.03 00:00:00   invalid pointer access in 'MamdaniFuzzySystem.mqh' (172,42)

Kodun kendisi:

//+------------------------------------------------------------------+
//|TipsSample.mq5 |
//| Telif Hakkı 2017, MetaQuotes Software Corp. | |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Math\Fuzzy\MamdaniFuzzySystem.mqh>

input double   Service;
input double   Food;
//+------------------------------------------------------------------+
//| Uzman başlatma işlevi|
//+------------------------------------------------------------------+
CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem();
CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0);
CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0);
CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0);
CMamdaniFuzzyRule *rule1, *rule2, *rule3;

CList *in=new CList;
CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double;
CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double;

CList *result;
CDictionary_Obj_Double *p_od_Tips;
   
int OnInit()
  {
//---
   
   fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
   fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
   fsTips.Input().Add(fvService);
//--- Sistem için ikinci giriş değişkenlerini oluşturun
   
   fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
   fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
   fsTips.Input().Add(fvFood);
//--- Çıktı Oluştur
  
   fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
   fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
   fsTips.Output().Add(fvTips);
//--- Üç Mamdani bulanık kuralı oluşturun
   rule1 = fsTips.ParseRule("if (service is poor )  or (food is rancid) then tips is cheap");
   rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
   rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");
   
   fsTips.Rules().Add(rule1);
   fsTips.Rules().Add(rule2);
   fsTips.Rules().Add(rule3);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
  { 
   int ir; 
   for(ir=1; ir<10; ir++)
   { 
   p_od_Service.SetAll(fvService, ir);
   p_od_Food.SetAll(fvFood, ir);
   Print(CheckPointer(in));
   in.Clear();
   in.Add(p_od_Service);
   in.Add(p_od_Food);
//--- Sonuç alın
   
   result=fsTips.Calculate(in);
   Print("Error");
   p_od_Tips=result.GetNodeAtIndex(0);
   Print("Tips, %: ",p_od_Tips.Value());
   }
  }
//+------------------------------------------------------------------+

Genel olarak, lib nesneleri oluşturabilecek ve daha sonra her yeni çubukta sonuçları alabilecek şekilde mi tasarlandı? Çünkü mantığı her seferinde yeniden oluşturmak yavaş ve ekonomik değil.

 

Düzeltmeler içeren kütüphane sürümü, artık fuzzie mantık nesneleri 1 kez oluşturulabilir ve ardından yalnızca Calculate() çağrılabilir

Örneği kontrol et:

//+------------------------------------------------------------------+
//|TipsSample.mq5 |
//| Telif Hakkı 2017, MetaQuotes Software Corp. | |
//|https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Math\Fuzzy\MamdaniFuzzySystem.mqh>

input double   Service;
input double   Food;
//+------------------------------------------------------------------+
//| Uzman başlatma işlevi|
//+------------------------------------------------------------------+
CMamdaniFuzzySystem *FSTips=new CMamdaniFuzzySystem();
CFuzzyVariable *FVService=new CFuzzyVariable("service",0.0,10.0);
CFuzzyVariable *FVFood=new CFuzzyVariable("food",0.0,10.0);
CFuzzyVariable *FVTips=new CFuzzyVariable("tips",0.0,30.0);
CMamdaniFuzzyRule *Rule1,*Rule2,*Rule3;

CList *In=new CList;
CDictionary_Obj_Double *Dic_Service=new CDictionary_Obj_Double;
CDictionary_Obj_Double *Dic_Food=new CDictionary_Obj_Double;
CDictionary_Obj_Double *Dic_Tips;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit()
  {
   In.FreeMode(false);
//--- Sistem için ilk giriş değişkenlerini oluşturun

   FVService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
   FVService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   FVService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
   FSTips.Input().Add(FVService);
//--- Sistem için ikinci giriş değişkenlerini oluşturun

   FVFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
   FVFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
   FSTips.Input().Add(FVFood);
//--- Çıktı Oluştur

   FVTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
   FVTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
   FVTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
   FSTips.Output().Add(FVTips);
//--- Üç Mamdani bulanık kuralı oluşturun
   Rule1 = FSTips.ParseRule("if (service is poor )  or (food is rancid) then tips is cheap");
   Rule2 = FSTips.ParseRule("if ((service is good)) then tips is average");
   Rule3 = FSTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");

   FSTips.Rules().Add(Rule1);
   FSTips.Rules().Add(Rule2);
   FSTips.Rules().Add(Rule3);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Uzman başlangıçtan kaldırma işlevi|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- bulanık sistemi sil
   In.FreeMode(true);  
   delete In;  
   delete FSTips;  
  }
//+------------------------------------------------------------------+
//| Uzman tik fonksiyonu|
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int ir=1; ir<10; ir++)
     {
      Dic_Service.SetAll(FVService,ir);
      Dic_Food.SetAll(FVFood,ir);
      In.Clear();
      In.Add(Dic_Service);
      In.Add(Dic_Food);
      //--- Sonuç alın
      CList *result=FSTips.Calculate(In);
      Dic_Tips=result.GetNodeAtIndex(0);
      Print("Tips, %: ",Dic_Tips.Value());
      delete result;
     }
  }
//+------------------------------------------------------------------+
Dosyalar:
Fuzzy.zip  33 kb
 

h

metatrader'ı yapı 2342'ye güncellediğimde

bulanık mantık kitaplığına sahip tüm örnekler

MQL5'te "işaretçilerin yanlış dökümü" hatasını döndürüyor \ Dahil et \ Matematik \ Fuzzy \ RuleParser.mqh Satır 712

lütfen hatayı düzeltmek için yardım edin

çok teşekkürler