Optimizasyon Algoritmaları Şampiyonası. - sayfa 130

 
Andrey Dik :

İstediğiniz yerden iletişime geçin. Ama bu şampiyona daha önce de söylediğim gibi yapılacak. Bu kurallara göre benimle ve diğer katılımcılarla ve bensiz rekabet edebilirsiniz.

Diğer şampiyonalarda durum farklı olabilir, kendinizinkini ayarlayın ve uygun gördüğünüz gibi yapın. Özgür bir ülkemiz var.

Ah ah la!

En iyisi, sevgili teorisyen!

 
Реter Konow :

Ah ah la!

En iyisi, sevgili teorisyen!

Beni gösteriye götürmene gerek yok. Kuralları kendiniz değiştirmeye çalışmak yerine kurallara göre hazırlanın ve yarışın.

En iyisi, sevgili teorisyen!

 

Selamlar.

Kodumu dört yönlü düzenleyiciden beşe aktardım. Sadece bir hata! TRUE ile bir değiştirildi ve işe yaradı! Hoş sürpriz.

Bu benim ilk beşteki ilk kodum. Şampiyonaya bağlanmak için koduma ne girmem gerektiğini söyler misiniz?

 //+------------------------------------------------------------------+
//|                                                 Yuri skript.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"

//----------Блок глобальных переменных кода-----
Глобальные переменные кода не должны совпадать с 
именами глобальных переменных интерфейса?
//----------------------------------------------

//---------- Блок ввода начальных значений------
input double xmin= 0 ; //min диапазона поиска
input double xmax= 100 ; //max диапазона поиска
input double Xnz= 10 ; // начальные значения X[]
input int N= 3 ;     // число параметров
input double e= 0.01 ; // погрешность поиска
Будет ли известен диапазон поиска, число параметров ?
//----------------------------------------------
void OnStart ()
  {
OC();
}
//--------------ОСНОВНАЯ ФУНКЦИЯ---------------
void OC()
{
//---------
// ЗДЕСЬ РАСПОЛОЖЕН АЛГОРИТМ ПОИСКА.ИМЕЕТСЯ НЕСКОЛЬКО ПОДФУНКЦИЙ.
// ФУНКЦИЯ ФОРМИРУЕТ МАССИВ ЗНАЧЕНИЙ X[x1,x2...xn]. 
// ФУНКЦИЯ РАСЧЕТА F() ВЫСЧИТЫВАЕТ И ВОЗВРАЩАЕТ ЗНАЧЕНИЕ ЗАДАННОЙ ФУНКЦИИ И ДАЛЕЕ ПО АЛГОРИТМУ
F();
//----------
}
//------ФУНКЦИЯ РАСЧЕТА ЗАДАННОЙ ФУНКЦИИ НАПРИМЕР F=(exp(X[1]+X[2]+X[3]))/(X[1]*X[2]*X[2]*X[3]*X[3]*X[3]);
double F()
{
if (X[ 1 ]== 0 ||X[ 2 ]== 0 ||X[ 3 ]== 0 ){zn= 0 ; return (F);}
F=( exp (X[ 1 ]+X[ 2 ]+X[ 3 ]))/(X[ 1 ]*X[ 2 ]*X[ 2 ]*X[ 3 ]*X[ 3 ]*X[ 3 ]);
return (F);
}
 
Yuri Evseenkov :

Selamlar.

Kodumu dört yönlü düzenleyiciden beşe aktardım. Sadece bir hata! TRUE ile bir değiştirildi ve işe yaradı! Hoş sürpriz.

Bu benim ilk beşteki ilk kodum. Şampiyonaya bağlanmak için koduma ne girmem gerektiğini söyler misiniz?

Merhaba.

Hayır, bu yeterince iyi değil.

öyle lazım

Komut dosyası -> BiblaAO.ex5 -> ff.ex5

Daha önce şubede kod örnekleri vardı, lütfen bir göz atın. Şimdi zaman yok, biraz sonra örneklere bağlantılar göstereceğim.

 

Yürütülebilir Şampiyona komut dosyası:

 #property script_show_inputs
#property strict

//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "ao.ex5"
// инициализация АО
void    InitAO ( int paramCount, int maxFFruns);
// запуск АО 
void    StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "ff.ex5"
// запросить количество параметров ФФ 
int     GetParamCount (); 
// запуск ФФ, получеие значения соответствующее параметроам ФФ
double FF ( double &array []); 
// произведённое количество запусков ФФ
int     GetCountRunsFF (); 
#import
//+------------------------------------------------------------------+

//--- input parameters
input int MaxFFruns_P = 1000 ; 


//+------------------------------------------------------------------+
void OnStart () 
{ 
   // узнаем, сколько параметров нужно оптимизировать
   int     paramCount = GetParamCount (); 

   ulong   startTime = GetMicrosecondCount (); 
  
   //------------------------------------------------------------------
  InitAO (paramCount, MaxFFruns_P);
  StartAlgo ();
   //------------------------------------------------------------------
  
  startTime = GetMicrosecondCount () - startTime; 
  
   Print ( "Макс: " + DoubleToString (GetMaxFF (), 16 )); 
   Print ( "Запусков ФФ: " + ( string )GetCountRunsFF ()); 
   Print ( "Время: " + ( string )startTime + " мкс; " + DoubleToString (( double )startTime / 1000000.0 , 8 ) + " c" ); 
   Print ( "---------------------------------" );
}
//+------------------------------------------------------------------+
 

Şimdi FF kütüphanesinin bir örneğini (arayüz göstermek için) ve katılımcı optimizasyon algoritmasının bir örneğini (çalışıyor, her yerde kullanılabilir) hazırlayacağım.

Özellikle dikkat ediyorum: Katılımcılardan ne istendiğini anlamak için yukarıdaki komut dosyası zaten kendi kendine yeterlidir, algo'nuzu içe aktarılan işlevlerin arayüzlerini kullanarak bağlayın ve katılmaya hazır olun. Senaryo çok sayfalar önce verildi....

 

Bir FF şampiyona örneği (FF işlevinin içeriği ve buna bağlı olarak G_paramCount değişkeni dışında her şey aynı olacaktır - katılımcılar tarafından bilinmeyecek, hakem yapacaktır):

 #property library
#property strict

int G_countRuns  = 0 ; 
int G_paramCount = 3 ; 

//+------------------------------------------------------------------+
int GetParamCount () export
{ 
   return (G_paramCount);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void GetParamProperties ( double &min, double &max, double &step) export
{ 
  min  = 0 .1 ; 
  max  = 10 .0 ; 
  step = 0.1 ;
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{ 
   return (G_countRuns);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF ( double &param []) export
{ 
  G_countRuns++; 
  
   int sizeArray = ArraySize (param); 
   if (sizeArray != G_paramCount) 
     return (- DBL_MAX ); 
  
   double x1 = param [ 0 ];
   double x2 = param [ 1 ];
   double x3 = param [ 2 ];

   double ffVolue = (- exp (x1+x2+x3))/(x1*x2*x2*x3*x3*x3);
  
   return (ffVolue);
}
//+------------------------------------------------------------------+
 
Andrey Dik :

Bir FF şampiyona örneği (FF işlevinin içeriği ve buna bağlı olarak G_paramCount değişkeni dışında her şey aynı olacaktır - katılımcılar tarafından bilinmeyecek, hakem yapacaktır):

Muhteşem.

Bu örneği sorduğumda, vermemek için elinizden geleni yaptınız.

Şimdi gittim ve lütfen - FF örneği.

Bu ne anlama geliyor?

 
Реter Konow :

Muhteşem.

Bu örneği sorduğumda, vermemek için elinizden geleni yaptınız.

Şimdi gittim ve lütfen - FF örneği.

Bu ne anlama geliyor?

Bu sadece bir örnek, metindeki problemle aynı, size bunu bir kereden fazla anlattım. Daha yakından bakın - bağlantı arayüzü, iki damla kaçak içki gibi tamamen aynıdır.

Ama şampiyonluk FF kodunu soruyorsunuz, doğal olarak alamayacaksınız, kimse alamayacak ve şimdi örnekte yok ve ben bilemeyeceğim . İşlevlerin içe aktarılması yoluyla yalnızca FF bağlantı arabirimi bilinir ve bu örnekte gösterilmiştir. Bu temiz? Daha ne kadar anlatabilirim ki... Bilmiyorum.

Bu kodlar başlıkta zaten gösterildi, sadece kolaylık olması için her şeyi bir araya getiriyorum.

Öyleyse anlayın ve bunu tekrar ve aynı kişiye açıklamak zorunda kalmamam arzu edilir ....

Sonunda her şey netleştiyse, devam edin, bir algoritma yazın ve savaşa girin. Bunu uzun zaman önce yapmalıydınız, herkes algoritmalarını yazmayı neredeyse bitirdi (hazırlayanları saymazsak).

 
Andrey Dik :

Bu sadece bir örnek, metindeki problemle aynı, size bunu bir kereden fazla anlattım. Daha yakından bakın - bağlantı arayüzü, iki damla kaçak içki gibi tamamen aynıdır.

Ama şampiyonluk FF kodunu soruyorsunuz, doğal olarak alamayacaksınız, kimse alamayacak ve şimdi örnekte yok ve ben bilemeyeceğim . İşlevlerin içe aktarılması yoluyla yalnızca FF bağlantı arabirimi bilinir ve bu örnekte gösterilmiştir. Bu temiz? Daha ne kadar anlatabilirim ki... Bilmiyorum.

Bu kodlar başlıkta zaten gösterildi, sadece kolaylık olması için her şeyi bir araya getiriyorum.

Öyleyse anlayın ve bunu tekrar ve aynı kişiye açıklamak zorunda kalmamam arzu edilir ....

Sadece böyle bir FF örneğine ihtiyacım vardı.

Metindeki problemdeki problem bundan farklı.

Bir dizi vardı ve işte bir analitik fonksiyon.

O yüzden örnek istedim.