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

 
Dmitry Fedoseev:
Посмотрите, выше разложил универсальный метод. А если разовый вызов через посредника, это потребует очень серьезной адаптации функции поиска, вот это точно никто не будет делать. 
Не преувеличивай. Решение есть. Подумай, как можно избавится от внутреннего вызова ФФ из библиотеки твоего алгоритма.
 
Andrey Dik:
Не преувеличивай. Решение есть. Подумай, как можно избавится от внутреннего вызова ФФ из библиотеки твоего алгоритма.
Об этом и думать не следует, незачем на это тратить усилия.
 
Dmitry Fedoseev:

...

Других вариантов не существует. Разве что передавать указатель на функцию, если это возможно (но пока никт не подсказал, где смотреть в справке). У участника должна быть полноценная возможность вызывать функцию фф. 

Вот здесь об этом упоминалось с примером: Новая версия платформы MetaTrader 5 build 1325: Торговля с хеджированием и тестирование по реальным тикам >>>

Пример: 

MQL5: Для облегчения организации событийных моделей добавлена поддержка указателей на функции.

Чтобы объявить указатель на функцию, определите тип "указатель на функцию", например:

typedef int (*TFunc)(int,int);

Теперь TFunc является типом и можно объявить переменную-указатель на функцию:

TFunc func_ptr;

В переменную func_ptr можно сохранить адрес функции, чтобы в дальнейшем ее вызывать:

int sub(int x,int y) { return(x-y); }
int add(int x,int y) { return(x+y); }
int neg(int x)       { return(~x);  }

func_ptr=sub;
Print(func_ptr(10,5));

func_ptr=add;
Print(func_ptr(10,5));

func_ptr=neg;           // ошибка: neg не имеет тип  int (int,int)
Print(func_ptr(10));    // ошибка: должно быть два параметра

Указатели на функции можно хранить и передавать в качестве параметра. Нельзя получить указатель на нестатический метод класса.

 

Вот к примеру мой метод из класса:

      void Evolution(){ 
         

         for(int c=0;c<GenerationsCount;c++){
         
            f0(); // расчет значений фф для каждого индивида
            f1();         
            f2();
            f3();
            f4();
            
         }
         
         f5();
         f6();

      }

 Ну и как тут быть? А главное, зачем об этом думать, если в реальности это никогда ненужно. Чемпионат алгоритмов оптимизации превращается в чемпионат адаптации функции для работы через жо.

Функция может посчитать сколько раз ее вызвали. Если участник делает импорт, в файл можно писать количество, а перед запуском обнулять. 

Лучше всего класс использовать, тогда количество будет просто доступно. Мошенничество здесь исключено. 

 
Dmitry Fedoseev:
Об этом и думать не следует, незачем на это тратить усилия.

Ок. Проблем нет. Тогда нужно предусмотреть для чемпионата два варианта эксплуатации алгоритмов:

1. С вызовом ФФ изнутри алгоритма (в конце концов алгоритм не будет знать что за ФФ внутри закрытой библы с ФФ)

2. Без вызова ФФ из алгоритма, с простой передачей результата в алгоритм.

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

 

Спасибо.

Не проще чем с классом. Даже сказал бы, что с классом проще.

 
Andrey Dik:

Ок. Проблем нет. Тогда нужно предусмотреть для чемпионата два варианта эксплуатации алгоритмов:

1. С вызовом ФФ изнутри алгоритма (в конце концов алгоритм не будет знать что за ФФ внутри закрытой библы с ФФ)

2. Без вызова ФФ из алгоритма, с простой передачей результата в алгоритм.

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

Если время лишнее есть, то пожалуйста. Только в. 2 не будет востребован.
 
Dmitry Fedoseev:
Если время лишнее есть, то пожалуйста. Только в. 2 не будет востребован.
Ну, нам об этом судить нельзя. У тебя вариант 1, а у меня вариант 2. И как знать, как будет у других участников. Да и на что время то? - пример скрипта выше написал за 5 минут, уж придём в итоге к устаканенным 2-м вариантам, полагаю.
 
Andrey Dik:
Ну, нам об этом судить нельзя. У тебя вариант 1, а у меня вариант 2. И как знать, как будет у других участников. Да и на что время то? - пример скрипта выше написал за 5 минут, уж придём в итоге к устаканенным 2-м вариантам, полагаю.
Даже ничего не могу придумать, что бы догадаться, как так мог случиться вариант 2? Это не естественно.
 
Dmitry Fedoseev:
Даже ничего не могу придумать, что бы догадаться, как так мог случиться вариант 2? Это не естественно.

Простой пример. Алгоритм оптимизации висит где то на чарте. И запущена оптимизация советника в штатном тестере путем полного перебора. Так можно использовать свой алгоритм оптимизации вместо штатного.

Другой пример. Советник работает на чарте, торгует. Скидывает результаты торговли через какое то время в алгоритм (может быть внутри советника или снаружи. ризницы нет) вместе со своими параметрами а назад получает новые параметры и потом продолжает торговать (в твоём случае потребовалось бы запускать прогон по истории, а в моём - можно оптится "вживую").

И т.д. То есть в этих примерах алгоритм полностью отвязан от задачи.

Примеры привел умышленно применительно к трейдингу. Мыж трейдеры.