Обсуждение статьи "Генетические алгоритмы - это просто!" - страница 17

 
Michael Dolgushin:

Здравствуйте. Что-то случилось? Обновление MT5? Старый откомпилированный работает. 'UGA_The_alternative_ZigZag.mq5'. Где править?не пойму.

Отпадает вопрос. ArtificialMutation есть такая переменная. Переименовал void ArtificialMutation (double  &child[],double  ReplicationOffset)




 

В настоящее время у меня есть проблема оптимизации, и я экспериментирую с этой библиотекой, чтобы увидеть, сможет ли она мне помочь. К сожалению, мне не совсем понятно, как правильно настроить библиотеку.

Для моего примера я хочу рассчитать наилучший (максимальный) состав размеров лотов, чтобы иметь наименьший риск для себя.

Для этого я просто взял 6 символов для теста, и для этих символов должны быть найдены наилучшие размеры лотов. В функции фитнеса я затем рассчитываю ожидаемый ROI для этих активов и ожидаемый риск при предложенных UGA размерах лотов...

Если риск меньше моего порога, я сохраняю ожидаемый ROI для максимизации в Colony[0][chromos]…..

Вот мой код:

void CPortfolioRiskMan::GetOptimalWeights()
  {

   double ReplicationPortion_P  = 100.0;
   double NMutationPortion_P    = 10.0;
   double ArtificialMutation_P  = 10.0;
   double GenoMergingPortion_P  = 20.0;
   double CrossingOverPortion_P = 20.0;
   double ReplicationOffset_P   = 0.5;
   double NMutationProbability_P= 5.0;
//-----------------------Variables-------------------------------------
//Preparation of global variables for UGA
   ChromosomeCount=6; //Number of chromosomes in colony
   GeneCount      =6;       //Number of genes
   RangeMinimum   =0.01;    //Minimum of the search range
   RangeMaximum   =1;    //Maximum of the search range
   Precision      =0.01;       //Search step
   OptimizeMethod =2;  //1-minimum, any other-maximum

   ArrayResize(Chromosome,GeneCount+1);
   ArrayInitialize(Chromosome,0);
   Epoch=50;                     //Number of epochs without improvement




//Start of main function of UGA
   UGA
   (
      ReplicationPortion_P, //Portion of replication.
      NMutationPortion_P,   //Portion of natural mutation.
      ArtificialMutation_P, //Portion of artificial mutation.
      GenoMergingPortion_P, //Portion of adoption of genes.
      CrossingOverPortion_P,//Portion of crossing over.
      ReplicationOffset_P,  //Rate of shifting the interval borders
      NMutationProbability_P//Probability of mutation of each gene in %
   );



  }



void FitnessFunction(int chromos)
  {
//-----------------------Variables-------------------------------------

   double weight=0.0;
   double ClosePrices[]= {1.21,0.98,1.31,1.22,0.99,0.86};
   string symbols[]= {"EURUSD","GBPUSD","AUDNZD","EURAUD","NZDJPY","GBPJPY"};
   double tickvalues[]= {0.94,0.78,0.56,0.76,0.45,0.94};
   double tickstep=0.00001;
   double Lotsizes[6];
   double av_return=0;

//----------------------------------------------------------------------


   for(int u=1; u<=GeneCount; u++)
     {
      Lotsizes[u-1]=Colony[u][chromos];
      av_return+=Lotsizes[u-1]*tickvalues[u-1]*tickstep*ClosePrices[u-1];
     }

   double risk=CalculateVaR(symbols, Lotsizes);

   if(risk>50)
      Colony[0][chromos]=-10000000.0;
   else
      Colony[0][chromos]=NormalizeDouble(av_return,2);


   AmountStartsFF++;
  }
 
Filip #:

В настоящее время у меня есть проблема оптимизации, и я экспериментирую с этой библиотекой, чтобы увидеть, сможет ли она мне помочь. К сожалению, мне не совсем понятно, как правильно настроить библиотеку.

Для моего примера я хочу рассчитать наилучший (максимальный) состав размеров лотов, чтобы иметь наименьший риск для себя.

Для этого я просто взял 6 символов для теста, и для этих символов должны быть найдены наилучшие размеры лотов. В функции фитнеса я затем рассчитываю ожидаемый ROI для этих активов и ожидаемый риск при предложенных UGA размерах лотов...

Если риск меньше моего порога, я сохраняю ожидаемый ROI для максимизации в Colony[0][chromos]…..

Вот мой код:

Я не понял суть вопроса, поясните подробнее.

Вообще, это очень старая версия алгоритма, она (версия) не придерживается более удобной для применения схемы работы алгоритмов в текущих статьях "Популяционные алгоритмы оптимизации".

Могу порекомендовать использовать алгоритм SDS или другой из таблицы, либо дождаться обновлённой версии UGA (не знаю, целесообразно ли опубликовать новый взгляд в статье на этот старый но очень мощный алгоритм).

Я бы вообще переписал эту статью по новой, с включением UGA в рейтинговую таблицу, не знаю - можно ли и нужно ли это делать.

ЗЫ. Думаю, переписать существующую статью не получиться, она уже переведена на множество языков.

Причина обращения: