con la ayuda de la sala) - página 3

 

El problema tiene solución. Todas las herramientas necesarias están en CodeBase.

Sólo hay que escribir un intérprete para convertir los valores de los genes (espacio continuo) en un espacio discreto necesario para el problema.

El problema se reduce a la minimización de ff=MathAbs(f-H)

donde f=a+b+c+....

 
vitali_yv:

El cálculo en mql5 puede llevar toda la vida del TC)


En realidad, solo digo que se puede y se debe prescindir de si, y un poco del hecho de que mql4 sigue siendo más rápido que vb6 y mucho más.

Longitud de la expresión 6, número de variantes de una variable - 30, la expresión mql4 se resuelve en 493 segundos (8 min). En consecuencia, la expresión de longitud 7 tardará 4 horas en resolverse. 8 es de 120 horas)).

Si las condiciones son constantes (los mismos números) y la longitud de la expresión es limitada, puedes trabajar duro, crear un array con soluciones listas, y luego recuperar el valor sobre la marcha por índices.

 
Integer:



La longitud de la expresión es 6, el número de variantes de una variable es 30, en mql4 se resuelve en 493 segundos (8 min). En consecuencia, la longitud de la expresión 7 se resolverá en 4 horas. 8 es de 120 horas).


Y las sumas son 17 )
 
vitali_yv:
Y los sumandos son 17 )


Entonces el tspp tampoco ayuda.

En mt5 6 variables, 30 números resueltos en 90 seg (en un ordenador diferente sin embargo).

 
Integer:


Entonces el tspp tampoco ayuda.

En mt5 hay 6 variables, 30 números resueltos en 90 segundos (pero en otro ordenador).

¿Qué están haciendo? ¿De dónde has sacado esas cifras tan escalofriantes? Tengo redes con miles de escamas formadas en pocos minutos, y aquí....
 
joo:
¿Qué están haciendo? ¿De dónde salen esas cifras tan aterradoras? Tengo redes con miles de escamas formadas en pocos minutos, y aquí....


Pruébalo:

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:


Pruébalo:

No, yo no juego así. :(

Ni siquiera lo intentaré. ¿Por qué debería hacerlo? Cuando hay métodos más civilizados para encontrar una solución en lugar de la estúpida fuerza bruta.

 
joo:

No, yo no juego así. :(

Ni siquiera los probaré. ¿Para qué? Cuando hay métodos más civilizados para encontrar una solución en lugar de la estúpida fuerza bruta.

Desgraciadamente, para muchas tareas aún no existen métodos civilizados para resolverlas.

 
Integer:

Por desgracia, todavía hay muchos problemas que carecen de métodos civilizados de solución.

Existen. Sólo que a menudo no los conocemos.

DE ACUERDO. Compruebe si he entendido bien las condiciones del problema:

Resolver encontrar x si a*x+b*x+c*x.....=H, a, b, c pueden tomar valores (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).


La cuestión sigue sin estar clara: ¿cuántos a, b, c.... hay en el problema?


Soy como un niño, estoy cayendo en el "¿Débil?". :)

Me parece que el problema no tiene importancia práctica, puedo estar equivocado. Si consigo condiciones completas del problema - daré una solución "civilizada". Y utilizaré ese conjunto de herramientas, del que he hablado.

 

Esa no es la tarea que nos ocupa.

Un algoritmo genético no ayudará. Acercarse a una función (minimizarla) no significa moverse en la dirección correcta, se puede estar al lado, pero la entrada está en el otro lado. No puede ser "sólo un poco correcto" aquí.