Чемпионат Алгоритмов Оптимизации. - страница 130

 
Andrey Dik:

Обращайтесь куда хотите. Но этот чемпионат пройдет так, как сказал ранее я. По этим правилам можете соревноваться и со мной, и с другими участниками и без меня.

В других чемпионатах может быть по другому, устраивайте свои, и делайте как сочтете нужным. У нас свободная страна.

Ву а ля!

Всего хорошего, уважаемый теоретик!

 
Реter Konow:

Ву а ля!

Всего хорошего, уважаемый теоретик!

Меня на понт брать не надо. Готовьтесь и соревнуйтесь по правилам, вместо попыток изменить правила под себя.. И не болтайте попросту, лучше начните читать профильную литературу по оптимизации.

Всего хорошего, уважаемый теоретик!

 

Приветствую.

Перенес свой код из четверошного редактора на пятерку. Всего одна ошибка! Заменил TRUE на единицу и всё заработало ! Приятно удивлен.

Это мой первый код на пятёрке. Не могли бы Вы подсказать , что мне нужно вставить в свой код чтобы подключится к чемпионату?

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

Приветствую.

Перенес свой код из четверошного редактора на пятерку. Всего одна ошибка! Заменил TRUE на единицу и всё заработало ! Приятно удивлен.

Это мой первый код на пятёрке. Не могли бы Вы подсказать , что мне нужно вставить в свой код чтобы подключится к чемпионату?

Привет.

Нет, так не годится.

Нужно так

Скрипт -> БиблаАО.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 и соответственно переменной 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 и соответственно переменной G_paramCount  - они будут неизвестны участникам, составит рефери):

Удивительно.

Когда я просил этот пример, Вы все делали чтобы его не предоставить.

Теперь я ушел, и пожалуйста - пример ФФ.

Как это понимать?

 
Реter Konow:

Удивительно.

Когда я просил этот пример, Вы все делали чтобы его не предоставить.

Теперь я ушел, и пожалуйста - пример ФФ.

Как это понимать?

Это всего лишь пример, такой же, как и в задаче с текстом, я Вам говорил об этом неоднократно. Присмотритесь внимательно - интерфейс подключения совершенно одинаковый, как две капли самогона.

Но Вы просите код ФФ чемпионата, естественно его не получите, никто не получит, и сейчас его нет в примере, и я его знать не буду. Известен только интерфейс подключения ФФ через импорт функций, это и показано в примере. Это понятно? Ну сколько ещё можно уже объяснять... я не знаю.

Эти коды уже были показаны в ветке, я привожу лишь для того, что бы собрать всё вместе для удобства.

Так и понимайте, и желательно, что бы мне не пришлось это объяснять ещё раз, при чем одному и тому же человеку....

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

 
Andrey Dik:

Это всего лишь пример, такой же, как и в задаче с текстом, я Вам говорил об этом неоднократно. Присмотритесь внимательно - интерфейс подключения совершенно одинаковый, как две капли самогона.

Но Вы просите код ФФ чемпионата, естественно его не получите, никто не получит, и сейчас его нет в примере, и я его знать не буду. Известен только интерфейс подключения ФФ через импорт функций, это и показано в примере. Это понятно? Ну сколько ещё можно уже объяснять... я не знаю.

Эти коды уже были показаны в ветке, я привожу лишь для того, что бы собрать всё вместе для удобства.

Так и понимайте, и желательно, что бы мне не приходилось это объяснять ещё раз, при чем одному и тому же человеку.... 

Мне то всего-навсего такой пример ФФ и был нужен.

Тот, что в задаче с тектом отличается от этого.

Там была строка, а тут - аналитическая функция.

Поэтому я и просил пример.