en prenant l'aide de la salle) - page 3

 

Le problème est soluble. Tous les outils nécessaires sont dans CodeBase.

Il suffit d'écrire un interpréteur pour convertir les valeurs des gènes (espace continu) en un espace discret nécessaire au problème.

Le problème est réduit à la minimisation de ff=MathAbs(f-H)

où f=a+b+c+....

 
vitali_yv:

Le calcul sur mql5 peut prendre une vie entière du CT)


En fait, je dis juste que vous pouvez et devriez vous passer de if, et un peu du fait que mql4 est toujours plus rapide que vb6 et beaucoup plus rapide.

Longueur de l'expression 6, nombre de variantes d'une variable - 30, l'expression mql4 est résolue en 493 secondes (8 min). Par conséquent, il faudra 4 heures pour résoudre l'expression de longueur 7. 8 est de 120 heures)).

Si les conditions sont constantes (les mêmes nombres) et que la longueur de l'expression est limitée, vous pouvez travailler dur, créer un tableau avec des solutions toutes prêtes, puis récupérer la valeur à la volée par des index.

 
Integer:



La longueur de l'expression est 6, le nombre de variantes d'une variable est 30, dans mql4 elle est résolue en 493 secondes (8 min). En conséquence, l'expression longueur 7 sera résolue en 4 heures. 8 est de 120 heures).


Et les sommes sont 17 )
 
vitali_yv:
Et les sommets sont 17 )


Alors la tspp n'est d'aucune aide non plus.

Dans mt5 6 variables, 30 numéros résolus en 90 sec (sur un ordinateur différent cependant).

 
Integer:


Alors la tspp n'est d'aucune aide non plus.

Dans mt5 il y a 6 variables, 30 numéros résolus en 90 secondes (mais sur un autre ordinateur).

Qu'est-ce que vous faites ? Où avez-vous trouvé des chiffres aussi effrayants ? J'ai des réseaux avec des milliers de balances formés en quelques minutes, et ici.....
 
joo:
Qu'est-ce que vous faites ? D'où viennent ces chiffres effrayants ? J'ai des réseaux avec des milliers de balances formés en quelques minutes, et ici.....


Essayez-le :

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:


Essayez-le :

Nah, je ne joue pas comme ça. :(

Je ne vais même pas essayer. Pourquoi le ferais-je ? Quand il existe des méthodes plus civilisées pour trouver une solution au lieu de la force brute stupide.

 
joo:

Nah, je ne joue pas comme ça. :(

Je ne vais même pas les essayer. Pour quoi faire ? Quand il y a des méthodes plus civilisées pour trouver une solution au lieu de la force brute stupide.

Hélas, pour de nombreuses tâches, il n'existe toujours pas de méthodes civilisées pour les résoudre.

 
Integer:

Hélas, il existe encore de nombreux problèmes pour lesquels les méthodes civilisées de résolution font défaut.

Ils existent. Seulement, souvent, nous ne les connaissons pas.

OK. Vérifiez si j'ai bien compris les conditions du problème :

Résoudre trouver x si a*x+b*x+c*x.....=H, a, b, c peuvent prendre les valeurs (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 question n'est pas claire : combien de a, b, c.... y a-t-il dans le problème ?


Je suis comme un enfant, je tombe dans le piège du "faible". :)

Il me semble que le problème n'a pas d'importance pratique, je peux me tromper. Si j'obtiens les conditions complètes du problème - je donnerai une solution "civilisée". Et je vais utiliser cette boîte à outils, dont j'ai parlé.

 

Ce n'est pas la tâche à accomplir.

Un algorithme génétique ne sera d'aucune utilité. Approcher (minimiser) une fonction ne signifie pas se déplacer dans la bonne direction, vous pouvez vous tenir à côté, mais l'entrée est de l'autre côté. Ça ne peut pas être "juste un peu juste" ici.