беру помощь зала) - страница 3

 

Задача решаема. Весь необходимый инструментарий есть в CodeBase.

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

Задача сводится к минимизации ff=MathAbs(f-H)

где f=a+b+c+....

 
vitali_yv:

Рассчёт на mql5 можез занять всю сознательную жизнь ТС)


Вообще-то я только о том, что можно и нужно обойтись без if, еще немного о том, что mql4 все же быстрее vb6 и значительно.

Длина выражение 6, количество вариантов одной переменной - 30, на mql4 решено за  493 секунды (8 мин). Соответственно, при длине выражения 7 будет решено за 4-ре часа. 8 - 120 часов)). 

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

 
Integer:



Длина выражение 6, количество вариантов одной переменной - 30, на mql4 решено за 493 секунды (8 мин). Соответственно, при длине выражения 7 будет решено за 4-ре часа. 8 - 120 часов)).


А слагаемых 17 )
 
vitali_yv:
А слагаемых 17 )


Тогда и цпп не поможет.

В мт5 6 переменных, 30 чисел решено за 90 сек (правда на другом компике). 

 
Integer:


Тогда и цпп не поможет.

В мт5 6 переменных, 30 чисел решено за 90 сек (правда на другом компике).

Ребята, вы чего? От куда такие страшные цифры? У меня сети с тысячами весов обучаются за несколько минут, а тут....
 
joo:
Ребята, вы чего? От куда такие страшные цифры? У меня сети с тысячами весов обучаются за несколько минут, а тут....


Попробуйте:

int start()
  {
//----
   int c[]={10, 12, 14, 17, 21, 25, 30, 36, 43, 52, 62, 74, 89, 107, 128, 154, 185, 222, 266, 319, 383, 460, 552, 662, 795, 954, 1145, 1374, 1648, 1978};
   int Find=-1;
   

         int start=TimeLocal();
            for(int i1=0;i1<ArraySize(c);i1++){
            for(int i2=0;i2<ArraySize(c);i2++){
            for(int i3=0;i3<ArraySize(c);i3++){
               Comment(i1," ",i2," ",i3);
            for(int i4=0;i4<ArraySize(c);i4++){
            for(int i5=0;i5<ArraySize(c);i5++){
            for(int i6=0;i6<ArraySize(c);i6++){
               int s=c[i1]+c[i2]+c[i3]+c[i3]+c[i4]+c[i5]+c[i6];   
            } 
            }
            }
            }
            }
            }
      

   
   Alert("! "+(TimeLocal()-start));
//----
   return(0);
  }
 
Integer:


Попробуйте:

Не, я так не играю. :(

Даже пробовать не буду. А зачем? Когда есть более цивилизованные методы поиска решения вместо тупого перебора.

 
joo:

Не, я так не играю. :(

Даже пробовать не буду. А зачем? Когда есть более цивилизованные методы поиска решения вместо тупого перебора.

Увы, еще для многих задач отсутствуют цивилизованные методы решения.

 
Integer:

Увы, еще для многих задач отсутствуют цивилизованные методы решения.

Существуют. Только часто мы о них не знаем.

Ок. Проверьте, правильно ли я понял условия задачи:

Решить найти x, если a*x+b*x+c*x.....=H, a, b, с могут принимать значения (10, 12, 14, 17, 21, 25, 30, 36, 43, 52, 62, 74, 89, 107, 128, 154, 185, 222, 266, 319, 383, 460, 552, 662, 795, 954, 1145, 1374, 1648, 1978).


Остается неясным вопрос- сколько все таки в задаче этих а, b, c....?


ЗЫ Млин, повелся как пацан на "Слабо?". :)

Как по мне, так задача не имеет практического значения, может и ошибаюсь. Если я получу полные условия задачи - приведу "цивилизованное" решение оной. Причем буду использовать тот инструментарий, о котором говорил.

 

Не такая задача стоит.

Генетичесий алгоритм не поможет. Приближение (минимизация) функции не означает движения в правильном направлении, можно стоять рядом, но вход находится с другой стороны. Здесь не может быть "чуть-чуть правильно". 

Причина обращения: