L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 1800

 
Aleksey Vyazmikin:

Aidez-nous à résoudre un problème de combinatoire !

Il y a N éléments différents non répétables, vous devez prendre parmi eux X élément(s) à la fois, la valeur d'entrée étant le nombre de la combinaison de tous les éléments possibles.

Existe-t-il une formule ou une fonction pour cela ?

La fonction d'entrée doit obtenir un tableau avec des éléments, le nombre d'éléments dans la combinaison et le numéro de la combinaison, et la sortie doit être un tableau avec les indices des éléments.

Aidez-moi !

Peut-être qu'il est plus facile de chercher X aléatoires parmi N ?
Si vous travaillez avec un nombre de combinaisons, alors vous devez construire cette combinaison en interne à partir du nombre.

Et il peut y avoir un très grand nombre de combinaisons de numéros. Par exemple, choisir 10 sur 100 sera des millions ou des milliards (quelque chose dans une certaine mesure). Comment allez-vous décider de la combinaison à prendre ? 1,2, 158451, ou 5454554 ?

L'unique aléatoire est plus facile à trouver, il suffit de sélectionner aléatoirement 1 parmi N., puis le second et ainsi de suite jusqu'à X.
Lors de la sélection, si un élément est déjà sélectionné, vous ignorez le doublon et effectuez une nouvelle sélection. C'est-à-dire qu'il y aura plus de tentatives que X. Par exemple, si vous prenez 90 sur 100, il y aura beaucoup de tentatives en double.

Pour aller plus vite, vous pouvez écarter l'élément sélectionné dans le tableau N et choisir parmi les N-1 éléments restants. (Remplacez l'élément sélectionné par le dernier et raccourcissez le tableau de 1.) De cette façon, vous trouverez X éléments aléatoires en exactement X essais. Si N > 3000 éléments, il est préférable d'utiliser un générateur aléatoire plus compliqué que celui qui est intégré. Comparaison des randoms ici.

Как MathRand() генерирует значения?
Как MathRand() генерирует значения?
  • 2010.08.06
  • www.mql5.com
Общее обсуждение: Как MathRand() генерирует значения?
 
Aleksey Nikolayev:

Ça pourrait marcher.

Vous pouvez également consulter le paragraphe "Combinaisons" du manuel "Programming in Algorithms" d'Okulov.

Il existe sûrement une formule permettant d'obtenir la combinaison à partir de l'indice ? Pouvez-vous l'écrire, s'il vous plaît ?

 
Valeriy Yastremskiy:

Les paramètres optimisables et l'équilibre déclinent les zones de croissance. L'idée n'est pas d'optimiser, mais de retirer des caractéristiques significatives pour les zones de croissance de la chute en équilibre, mais la science dit qu'il est difficile ou impossible à travers toutes les caractéristiques de BP en présence de SB. Il est difficile de trouver des modèles mathématiques décrivant les séries avec une précision suffisante, et la taille de la BP nécessaire n'est pas claire.

Les conditions symétriques me semblent plus correctes. La série peut également être inversée. ))))

La science peut dire beaucoup de choses, mais il faut essayer de vérifier le potentiel, peut-être est-il impossible de le perfectionner, et une version non idéale sera suffisante pour améliorer les performances en général.

 
elibrarius:

Ne serait-il pas plus simple de chercher X aléatoires parmi N ?
Si vous travaillez avec le numéro de la combinaison, vous devez construire cette combinaison en interne à partir du numéro.

Et il peut y avoir un très grand nombre de combinaisons de numéros. Par exemple, pour sélectionner 10 sur 100. Il y en aura des millions ou des milliards (quelque chose dans une certaine mesure). Comment allez-vous décider de la combinaison à prendre ? 1,2, 158451, ou 5454554 ?

L'unique aléatoire est plus facile à trouver, il suffit de sélectionner aléatoirement 1 parmi N., puis le second et ainsi de suite jusqu'à X.
Lors de la sélection, si un élément est déjà sélectionné, vous ignorez le doublon et effectuez une nouvelle sélection. C'est-à-dire qu'il y aura plus de tentatives que X. Par exemple, si vous prenez 90 sur 100, il y aura beaucoup de tentatives en double.

Pour aller plus vite, vous pouvez écarter l'élément sélectionné dans le tableau N et choisir parmi les N-1 éléments restants. (Remplacez l'élément sélectionné par le dernier et raccourcissez le tableau de 1.) De cette façon, vous trouverez X éléments aléatoires en exactement X essais. Si N > 3000 éléments, il est préférable d'utiliser un générateur aléatoire plus compliqué que celui qui est intégré. Cliquez ici pour comparer les randoms.

L'objectif est précisément la surenchère. Sur 250 000 feuilles, 15 000 splits uniques sont obtenus. Une énumération complète des feuilles avec 3 divisions prendrait environ 250 jours, comme je l'ai estimé, pour une valeur cible. Je pense que les scissions devraient être regroupées, en sélectionnant les scissions initiales et en recherchant les scissions qui s'activent dans leurs zones, puis en essayant chaque groupe séparément. Cette approche permettra de réduire considérablement le nombre de combinaisons.

 
Aleksey Vyazmikin:

Existe-t-il une formule permettant d'obtenir la combinaison à partir de l'indice ? Pouvez-vous l'écrire, s'il vous plaît ?

Ce n'est pas une formule, c'est un algorithme. Regardez celui d'Okulov, ce n'est pas grand chose, et ce n'est pas compliqué.

 
Aleksey Nikolayev:

Ce n'est pas une formule, c'est un algorithme. Cherchez Okulov, ce n'est pas grand chose, et ce n'est pas compliqué.

J'ai téléchargé et vérifié - merci !

Si vous l'avez évalué comme "facile", vous devez l'avoir compris, mais pas moi - je ne comprends pas le langage de programmation, la description du texte n'est pas claire, puis-je vous poser des questions sur le matériel ?

 
Aleksey Vyazmikin:

Je l'ai téléchargé et regardé - merci !

Si vous l'avez évalué comme "non compliqué", vous avez dû le comprendre, mais pas moi - je ne comprends pas le langage de programmation, la description du texte n'est pas claire, puis-je vous poser des questions sur le matériel ?

Si c'est suffisant, vous pouvez demander. L'idée est simple : construire un tableau (bidimensionnel) de toutes les combinaisons, puis prendre une ligne (ou une colonne) par numéro. Vous avez deux choix : soit stocker le tableau, soit le recalculer à chaque fois (ce qui économise de la mémoire et du temps).

Voici un exemple en R :

#  i - номер, n - элементов исходно, k - сколько выбираем из n
i2c <- function (i,n,k) {m <- combn(n,k); m[,i]}

> i2c(3,10,5)
[1] 1 2 3 4 7
 
Aleksey Nikolayev:

Si c'est une mesure, il faut la définir. L'idée est simple : construire un tableau (bidimensionnel) de toutes les combinaisons, puis prendre une ligne (ou une colonne) par numéro. Vous avez deux choix : soit stocker le tableau, soit le recalculer à chaque fois (ce qui économise de la mémoire et du temps).

Voici un exemple en R :

Le tableau est construit par des boucles, ce qui est une perte de temps, pas très adapté. La variante consistant à trouver la valeur par calcul sans tableau complet préalable est intéressante.

 
Aleksey Vyazmikin:

Le tableau est construit via des boucles, et c'est une perte de temps, pas très adapté. La possibilité de trouver une valeur par calcul, sans tableau complet au préalable, est intéressante.

Je ne suis pas sûr qu'une telle formule existe.

 
Aleksey Nikolayev:

Je ne suis pas sûr qu'il existe une telle formule.

Il doit y avoir un algorithme, car il s'avère que pour 15000 éléments de 3 combinaisons, nous devons garder le tableau en mémoire pendant 4 téraoctets ! C'est encore plus, je calcule, s'il faut 8 bits pour 1 élément.

Raison: