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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Andrey Dik
13682
Andrey Dik  

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

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

Правила: 

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

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

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

Условия:

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

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

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

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

 

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

Andrey Dik
13682
Andrey Dik  

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

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

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

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

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

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

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

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

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

Dmitry Fedoseev
56777
Dmitry Fedoseev  
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(...);
Dmitry Fedoseev
56777
Dmitry Fedoseev  

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

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

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

Вот это вот:

CFF * ff=new CFF1();

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

Реter Konow
8688
Реter Konow  
Dmitry Fedoseev:

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

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

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

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