アルゴリズム最適化選手権。 - ページ 130

 
Andrey Dik:

好きなところに行けばいいんです。しかし、このチャンピオンシップは、先ほど申し上げたように行われます。このルールに従えば、私と一緒に競技することも、他の競技者と一緒に競技することも、私抜きで競技することも可能です。

他の選手権は違うかもしれない、自分でアレンジして、好きなようにやってください。自由の国ですから。

Voilà!

理論家の皆さん、よろしくお願いします。

 
Реter Konow:

Voilà!

さようなら、尊敬するセオリスト

バカにしないでよ自分の都合のいいようにルールを変えようとするのではなく、ルールに従って準備し、競争する...。そして、ただおしゃべりをするだけでなく、最適化に関する関連文献を読み始めるとよいでしょう。

理論家の皆さん、よろしくお願いします。

 

ごあいさつ

4エディタから5エディタにコードを転送しました。エラーは1つだけ!TRUEと交換したら、すべてうまくいきました。嬉しい驚き

Fで初めてのコードです。チャンピオンシップに接続するために、私のコードに何を入れる必要があるか教えていただけませんか?

//+------------------------------------------------------------------+
//|                                                 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:

ごあいさつ

4エディタから5エディタにコードを転送しました。エラーは1つだけ!TRUEと交換したら、すべてうまくいきました。嬉しい驚き

Fで初めてのコードです。チャンピオンシップに接続するために、私のコードに何を挿入する必要があるか教えていただけませんか?

こんにちは。

いや、それはまずい。

このようにする必要があります。

スクリプト→BiblAO.ex5→ff.ex5

先ほどのブランチにコードの例がありましたので、ご覧ください。今は時間がないので、後日、例のリンクを紹介します。

 

実行可能なチャンピオンシップのスクリプトです。

#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 ("---------------------------------");
}
//+------------------------------------------------------------------+
 

これから、FFライブラリのサンプル(インターフェイスのデモ)と、参加者の最適化アルゴリズムの例(動作中、どこでも適用可能)を用意します。

注意:上記のスクリプトはすでに自己完結しています。参加者に何が求められているかを理解するために、インターフェイスや非推奨関数によってあなたのアルゴを接続し、参加する準備を整えてください。台本は何ページも前に渡されたものですが...。

 

FF選手権の例(FF関数と変数G_paramCountの 内容以外はすべて同じになります。)

#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:

FF選手権の例(FF関数の内容、それに伴う変数G_paramCount 以外はすべて同じになります。)

驚きです。

私がこの事例を求めたとき、あなたはそれを提供しないことに全力を尽くしました。

今、私が行って、お願いします - FFの例。

これはどういうことなのでしょうか。

 
Реter Konow:

驚きです。

私がこの事例を求めたとき、あなたはそれを提供しないことに全力を尽くしました。

さて、行ってきましたよ、FFの例です。

どういうことですか?

あくまで例です、文章題と同じです、何度も言いますが。よく見てください。接続インターフェースは、月見草の2滴のようにまったく同じです。

しかし、あなたはFFチャンピオンシップのコードを求めている、もちろんあなたはそれを得ることはありません、誰もが、そして今、それは例の中にありませんし、私はそれを知ることはないでしょう。知っているのは、関数importによる FFの接続インターフェースだけで、これは例で示したものです。クリアですか?さて、もうどこまで説明したらいいのやら...。どうだろう。

これらのコードは、すでにブランチで示されているので、便宜上まとめているだけです。

だから理解して、できればもう一度、しかも同じ人に説明しなくてもいいように...。

最終的に全部理解できたら、アルゴリズムを書き込んで戦いに行ってください。もっと前にやっておくべきでしたね。みんなほとんどアルゴリズムを書き終えています(既成のものを使っている人は除いて)。

 
Andrey Dik:

これはあくまで一例で、文章問題と同じで、何度も言っていることです。よく見てください。接続インターフェースは、月見草の2滴のようにまったく同じです。

しかし、あなたはFFチャンピオンシップのコードを求めている、もちろんあなたはそれを得ることはありません、誰もが、そして今、それは例の中にありませんし、私はそれを知ることはないでしょう。知っているのは、関数importによる FFの接続インターフェースだけで、これは例で示したものです。クリアですか?さて、もうどこまで説明したらいいのやら...。どうだろう。

これらのコードは、すでにブランチで示されているので、便宜上まとめているだけです。

だから理解して、できればもう一度、しかも同じ人に説明しなくてもいいように......。

そんな事例が欲しかったんです。

本文の問題のものは、これとは別物です。

文字列があり、ここに解析機能があった。

だから、例を挙げてもらったんです。