FuzzyNet - bulanık mantık ile çalışmak için bir kütüphane:
Yazar: MetaQuotes Software Corp.
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ı?
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
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 |
//+------------------------------------------------------------------+
#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!
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; } } //+------------------------------------------------------------------+
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

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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.
Yazar: MetaQuotes