L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1800

 
Aleksey Vyazmikin:

Per favore, aiutatemi a risolvere un problema di combinatoria!

Ci sono N diversi elementi non ripetibili, è necessario prendere da essi X elemento(i) alla volta, con il valore di ingresso che è il numero della combinazione di tutti gli elementi possibili.

C'è una formula o una funzione per questo?

La funzione di input dovrebbe ottenere un array con elementi, numero di elementi nella combinazione e numero di combinazione, e l'output dovrebbe essere un array con indici di elementi.

Per favore, aiutatemi!

Forse è più facile cercare X casuali su N?
Se lavorate con il numero di combinazione, allora dovete costruire quella combinazione internamente dal numero.

E ci può essere un numero enorme di combinazioni di numeri. Per esempio scegliere 10 su 100 sarà milioni o miliardi (qualcosa in qualche misura). Come deciderai quale combinazione prendere? 1,2, 158451 o 5454554 ?

Casuale unico è più facile da trovare, basta selezionare casualmente 1 da N., poi il secondo e così via fino a X.
Quando si seleziona se un elemento è già selezionato, si salta il duplicato e si riseleziona. Cioè ci saranno più tentativi di X. Per esempio, se si prendono 90 su 100, ci saranno molti tentativi di duplicazione.

Per la velocità, potete scartare l'elemento selezionato dalla matrice N e scegliere tra gli N-1 elementi rimanenti. (Scambia l'elemento selezionato con l'ultimo e accorcia l'array di 1.) In questo modo troverai X elementi casuali in esattamente X tentativi. Se N > 3000 elementi, è meglio usare un generatore casuale più complicato di quello integrato. Confronto di randomi qui.

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

Potrebbe funzionare.

Oppure potete dare un'occhiata al paragrafo "Combinations" nel libro di testo "Programming in Algorithms" di Okulov

Sicuramente c'è una formula per ottenere la combinazione dall'indice? Puoi scriverlo, per favore?

 
Valeriy Yastremskiy:

Parametri ottimizzabili e aree di crescita del declino dell'equilibrio. L'idea non è quella di ottimizzare, ma di togliere caratteristiche significative per le zone di crescita della caduta in equilibrio, ma la scienza dice che è difficile o impossibile attraverso qualsiasi caratteristica di BP in presenza di SB. È difficile trovare modelli matematici che descrivano la serie con sufficiente accuratezza, e non è chiaro quale dimensione di BP sia necessaria.

Le condizioni simmetriche mi sembrano più corrette. La serie può anche essere invertita. ))))

La scienza può dire un sacco di cose, ma bisogna provare a verificare il potenziale, forse è impossibile da perfezionare, e una versione non ideale sarà sufficiente per migliorare le prestazioni in generale.

 
elibrarius:

Non sarebbe più semplice cercare X casuali su N?
Se lavorate con il numero della combinazione, dovete costruire quella combinazione internamente a partire dal numero.

E ci può essere un numero enorme di combinazioni di numeri. Per esempio per selezionare 10 su 100. Ci saranno milioni o miliardi (qualcosa in qualche misura). Come deciderai quale combinazione prendere? 1,2, 158451, o 5454554 ?

Casuale unico è più facile da trovare, basta selezionare casualmente 1 da N., poi il secondo e così via fino a X.
Quando si seleziona se un elemento è già selezionato, si salta il duplicato e si riseleziona. Cioè ci saranno più tentativi di X. Per esempio, se si prendono 90 su 100, ci saranno molti tentativi di duplicazione.

Per la velocità, potete eliminare l'elemento selezionato dalla matrice N e selezionare tra gli N-1 rimanenti. (Scambia l'elemento selezionato con l'ultimo e accorcia l'array di 1.) In questo modo troverai X elementi casuali in esattamente X tentativi. Se N > 3000 elementi, è meglio usare un generatore casuale più complicato di quello integrato. Clicca qui per confrontare i randomi.

L'obiettivo è proprio la tracotanza. Su 250.000 foglie, ho ottenuto 15.000 spaccature uniche. Un'enumerazione completa delle foglie con 3 suddivisioni richiederebbe circa 250 giorni, come ho stimato, per un valore target. Penso che gli split dovrebbero essere raggruppati, selezionando gli split iniziali e cercando gli split che si attivano nelle loro aree, e poi provando ogni gruppo separatamente. Questo approccio ridurrà significativamente il numero di combinazioni.

 
Aleksey Vyazmikin:

C'è sicuramente una formula per ottenere la combinazione dall'indice? Puoi scriverlo, per favore?

Non è una formula, è un algoritmo. Guarda quello di Okulov, non è molto e non è complicato.

 
Aleksey Nikolayev:

Non è una formula, è un algoritmo. Cerca Okulov, non è molto e non è complicato.

Ho scaricato e cercato - grazie!

Se l'hai valutato come "facile", devi averlo capito, ma io no - non capisco il linguaggio di programmazione, la descrizione del testo non è chiara, posso farti delle domande sul materiale?

 
Aleksey Vyazmikin:

L'ho scaricato e guardato - grazie!

Se l'hai valutato come "non complicato", devi averlo capito, ma io no - non capisco il linguaggio di programmazione lì, la descrizione del testo non è chiara, posso farti delle domande sul materiale?

Se è sufficiente, si può chiedere. L'idea è semplice: costruire un array (bidimensionale) di tutte le combinazioni e poi prendere una riga (o colonna) per numero. Avete due scelte: memorizzare l'array o ricalcolarlo ogni volta (il che fa risparmiare memoria e tempo).

Ecco un esempio in 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:

Se è una misura, allora impostala. L'idea è semplice: costruire un array (bidimensionale) di tutte le combinazioni e poi prendere una riga (o una colonna) per numero. Avete due scelte: memorizzare l'array o ricalcolarlo ogni volta (il che fa risparmiare memoria e tempo).

Ecco un esempio in R:

L'array è costruito attraverso i loop, che è una perdita di tempo, non molto adatto. La variante di trovare il valore per calcolo senza tabella completa preliminare è interessante.

 
Aleksey Vyazmikin:

L'array è costruito tramite loop, e questo è una perdita di tempo, non molto adatto. La possibilità di trovare un valore per calcolo, senza una tabella completa prima, è interessante.

Non sono sicuro che tale formula esista.

 
Aleksey Nikolayev:

Non sono sicuro che esista una formula del genere.

Ci deve essere qualche algoritmo, perché si scopre che per 15000 elementi di 3 combinazioni, abbiamo bisogno di mantenere l'array in memoria per 4 terabyte! È ancora di più, ho calcolato, se ci vogliono 8 bit per 1 elemento.