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

 

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

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

Правила: 

1. К чемпионату допускаются алгоритмы оптимизации основанные на любых принципах и теориях поиска, абсолютно любые.

2. Каждый участник может представить от своего имени только один алгоритм в исходных кодах или в скомпилированном виде библиотеки *.ex5.

3. По итогам чемпионата участники будут ранжироваться согласно критериям: скорость работы алгоритма, количество запусков фитнес функции, точность нахождения решения.

Условия:

1. Организатор оставляет за собой право отказать в участии любому без объяснения причин.

2. Организатор имеет право участвовать в чемпионате.

3. Организатор отказывается от призов в пользу участников в случае наличия призового фонда от потенциальных спонсоров на момент объявления призовых мест.

Организатор Чемпионата Алгоритмов Оптимизации: Joo.

 

Смелее, участвуйте и побеждайте. Вполне может случится так, что ваш алгоритм в будущем будет использоваться в штатном оптимизаторе MT, почему бы и нет?

 

Регистрацию объявляю открытой.

Все, кто желает участвовать, отписывайтесь здесь. 20 июня 2016 года будут представлены коды примеров исполняемого скрипта с интерфейсами подключения алгоритмов. А ещё через 3 недели, 11 июля 2016 года, начнётся сам чемпионат.

 
В общем так. Обсуждайте, пожалуйста, только по теме "Алгоритмы Оптимизации". Шаг вправо, шаг влево - расстрел :)
 
Andrey Dik:

Регистрацию объявляю открытой.

Все, кто желает участвовать, отписывайтесь здесь. 20 июня 2016 года будут представлены коды примеров исполняемого скрипта с интерфейсами подключения алгоритмов. А ещё через 3 недели начнётся сам чемпионат.

А вообще идеи есть, или все в процессе обдумывания. Если что, могу поделиться мыслями.
 
 
Может отложить это дело на немного? Написать статейку. Положить в кодабазу шаблон класса. Как мне кажется у меня получился очень удачный шаблон:)
 
Достаточно ли семерых человек для проведения чемпионата? (с точки зрения MQ)
 
Dmitry Fedoseev:
А вообще идеи есть, или все в процессе обдумывания. Если что, могу поделиться мыслями.

Конечно идеи есть.

Статья - очень хорошо. В каком направлении хочешь написать статью?

Можно и отложить чемпионат, если есть в этом действительно необходимость. Но времени до начала ещё много, чемпионат стартует 11 июля 2016 года.  

 
Andrey Dik:

Конечно есть.

Выкладывай. Осудим.

Статья - очень хорошо. Но ждать уже нельзя. У людей короткая как правило память и быстро забывают с чего всё начинается.... 

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

class CFF1:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      for(int i=0;i<c;i++){
         s+=MathPow(x[i],2);
      }
      return(s);   
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

class CFF2:public CFF{
   public:
   double fun(double & x[]){
      int c=ArraySize(x);
      double s=0;
      double p=0;
      for(int i=0;i<c;i++){
         s+=MathAbs(x[i]);
         p*=MathAbs(x[i]);
      }
      return(s+p); 
   }
   virtual string type(){
      return("min");
   }
   virtual double value(){
      return(0);
   }
   virtual string note(){
      return("");
   }   
};

Такая вот конструкция для выбора исследуемой функции (фф). Базовый класс с виртуальными методами и дочерние классы с различными функциями. 

Вот так вот объявляю:

CFF * ff=new CFF1();

 или так, в зависимости от того какая функция нужна: 

CFF * ff=new CFF2();

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

***

Методы базового класса:

   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}   

fun - собственно функция, параметры передаются в массиве типа double.

type - тип функции: min или max - что искать у функции минимум или максимум.

Остальные не нужны, делал для себя? для памяти: value - значение на экстремуме, note - какое-нибудь описание. Для чемпионата они ненужны, особенно value. 

***

Сейчас у меня не функция, а класс и в нем метод для установки фф: 

   
      void SetFF(CFF * aff){
         this.ff=aff;
      }  
Потом везде использую this.ff.fun(...);
 

Для чемпионата класс надо будет поместить в библиотеку. Сделать одну функцию в библиотеке, которая будет вызываться из вне, в этой функции все дела: создание экземпляра класса, установка всех параметров переданных в функцию и т.д.

Имя функции стандартное для всех. Имена файла библиотеки у всех свои.

У проверяющего скрипт. Проверяющий меняет имя импортируемой библиотеки, компилирует, исполняет. 

Вот это вот:

CFF * ff=new CFF1();

В скрипте у проверяющего.

 
Dmitry Fedoseev:

Для чемпионата класс надо будет поместить в библиотеку. Сделать одну функцию в библиотеке, которая будет вызываться из вне, в этой функции все дела: создание экземпляра класса, установка всех параметров переданных в функцию и т.д.

Имя функции стандартное для всех. Имена файла библиотеки у всех свои.

У проверяющего скрипт. Проверяющий меняет имя импортируемой библиотеки, компилирует, исполняет. 

Как Вы считаете, можно ли обойтись без ООП, в решении поставленной на чемпионате задаче? Я привык все решать своим методом. (Ну не лежит душа у меня к ООП). :)