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

 
Andrey Dik:
Спасибо.
Пусть участвует вместо меня, потому что я похоже не справлюсь.
 
Реter Konow:
Пусть участвует вместо меня, потому что я похоже не справлюсь.
Я не думаю, что у него больше шансов чем у Вас. Я серьёзно. Корме того, чем больше будет участников, тем больше взглядов на проблематику мы получим.
 
Andrey Dik:
Я не думаю, что у него больше шансов чем у Вас. Я серьёзно. Корме того, чем больше будет участников, тем больше взглядов на проблематику мы получим.
Как Вы сами сказали ранее, у меня скалероз похуже чем у Вас. Да и воображения недостаточно, чтобы понять суть задачи. Не срастается у меня в голове чего то... Боюсь я переоценил свои силы.
 
Andrey Dik:

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

Если происходит улучшение - то наоборот, появление потомков вблизи родителей, то есть направление - к родителю.

Направления всегда два - от родителя и к родителю. В зависимости от динамики изменения значений ФФ должно выбираться то или иное направление.

Но у автора видео особи "тусуются" всегда недалеко от родителей, а неисследованные области так и остаются не прощупанными.

Алгоритм скорее всего будет очень быстро сходится на непрерывных функциях и давать сбои на сложных дискретных и с острыми пиками. Да и ровные поверхности, судя по видео алгоритму даются с трудом.

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

Кстати, может кто нибудь сказать, почему я употребил слова "от" и "к" вместо использования конкретного направления в пространстве?

И с чем именно связан тот факт, что пространство поиска становится сложнее быстрее, чем увеличение количества параметров.

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

 

Сделал себе создание картинок:

 

Довольно быстро находится максимум, но потом просто мутации на всякий случай.

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

 

 

Вот. Очень быстро находит, но со смещением, потом чуть сползает ближе к центу, но не до конца.

 

 
Dmitry Fedoseev:

Вот. Очень быстро находит, но со смещением, потом чуть сползает ближе к центу, но не до конца.

Класс! А почему всё желтое? - ландшафт же не видно.

Вот, раскрась пожалуйста каждый пиксель в соответствии с высотой ландшафта.

//——————————————————————————————————————————————————————————————————————————————
// The translation of numerical value from range in color value of range of RGB
string GetCLRfromDouble (double in,       // input value
                         double min,      // minimum of input value
                         double max,      // maximum of input value
                         int    startCLR, // minimum of a color scale 0... 100
                         int    endCLR)   // maximum of a color scale 0... 100
{ 
  int sCLR = 0; 
  int eCLR = 0; 
  
  if(startCLR > endCLR) 
  {
    sCLR = endCLR; 
    eCLR = startCLR;
  }
  else 
  {
    sCLR = startCLR; 
    eCLR = endCLR;
  }
  
  if(sCLR < 0) 
    sCLR = 0; 
  
  if(eCLR > 100) 
    eCLR = 0; 
  
  if(in < min) 
    in = min; 
  if(in > max) 
    in = max; 
  
  string clr = ""; 
  double tempCLR = Scale (in, min, max, sCLR, eCLR, false); 
  
  //255,0,0 -> 255,255,0
  if(0.0 <= tempCLR && tempCLR <= 20.0) 
  {
    clr = (string)255 + ","; 
    clr += string ((int)Scale (tempCLR, 0.0, 20.0, 0.0, 255, false)) + ","; 
    clr += string (0); 
    return (clr);
  }
  
  //255,255,0 -> 0,255,0
  if(20.0 < tempCLR && tempCLR <= 40.0) 
  {
    clr = string ((int)Scale (tempCLR, 20.0, 40.0, 0.0, 255, true)) + ","; 
    clr += string (255) + ","; 
    clr += string (0); 
    return (clr);
  }
  
  //0,255,0 -> 0,255,255
  if(40.0 < tempCLR && tempCLR <= 60.0) 
  {
    clr = string (0) + ","; 
    clr += string (255) + ","; 
    clr += string ((int)Scale (tempCLR, 40.0, 60.0, 0.0, 255, false)); 
    return (clr);
  }
  
  //0,255,255 -> 0,0,255
  if(60.0 < tempCLR && tempCLR <= 80.0) 
  {
    clr = string (0) + ","; 
    clr += string ((int)Scale (tempCLR, 60.0, 80.0, 0.0, 255, true)) + ","; 
    clr += string (255); 
    return (clr);
  }
  
  //0,0,255 -> 255,0,255
  if(80.0 < tempCLR && tempCLR <= 100.0) 
  {
    clr = string ((int)Scale (tempCLR, 80.0, 100.0, 0.0, 255, false)) + ","; 
    clr += string (0) + ","; 
    clr += string (255); 
    return (clr);
  }
  
  return ("0,0,0");
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
double Scale (double In, double InMIN, double InMAX, double OutMIN, double OutMAX, bool Revers = false) 
{ 
  if(OutMIN == OutMAX) 
    return (OutMIN); 
  if(InMIN == InMAX) 
    return ((OutMIN + OutMAX) / 2.0); 
  else 
  {
    if(Revers) 
    {
      if(In < InMIN) 
        return (OutMAX); 
      if(In > InMAX) 
        return (OutMIN); 
      return (((InMAX - In) * (OutMAX - OutMIN) / (InMAX - InMIN)) + OutMIN);
    }
    else 
    {
      if(In < InMIN) 
        return (OutMIN); 
      if(In > InMAX) 
        return (OutMAX); 
      return (((In - InMIN) * (OutMAX - OutMIN) / (InMAX - InMIN)) + OutMIN);
    }
  }
}
//——————————————————————————————————————————————————————————————————————————————
 
Andrey Dik:
Класс! А почему всё желтое? - ландшафт же не видно.
Лень было. Максимум по центу.
 
Dmitry Fedoseev:
Лень было. Максимум по центу.

Перевернутая парабола чтоль?

z=-(x^2+y^2) 

 
Andrey Dik:

Перевернутая парабола чтоль?

z=-(x^2+y^2) 

В первом случае. Что во втором случае уже не помню)
Причина обращения: