Ottimizzazione degli algoritmi. - pagina 3

 
joo:

La larghezza dei settori non può corrispondere ai valori della matrice, altrimenti l'algoritmo non funzionerà per tutti i numeri.

Ciò che conta è la distanza tra i numeri. Più tutti i numeri sono distanti dal primo, meno è probabile che cadano. In sostanza rimandiamo su una linea retta barre proporzionale alla distanza tra i numeri, regolata da un fattore di 0,01, in modo che l'ultimo numero la probabilità di cadere non era uguale a 0 come il più lontano dal primo. Più alto è il coefficiente, più uguali sono i settori. Il file excel è allegato, sperimentatelo.

1. Il calcolo delle probabilità teoriche è dato nell'excel. Il primo numero è la probabilità più alta, l'ultimo numero è la probabilità più bassa ma non è uguale a 0.

2) Le dimensioni negative dei settori non si verificano mai per qualsiasi insieme di numeri, a condizione che l'insieme sia ordinato in ordine decrescente - il primo numero è il più grande (funzionerà con il più grande dell'insieme ma numero negativo).

Non capisco, ma mi piace già il suo approccio alla teoria della probabilità, espresso in una frase chiave: "È importante la distanza alla quale i numeri sono in mezzo". Più distanti sono tutti i numeri dal primo, meno è probabile che cadano..." e la seconda ripresa (check shot): "Stai suggerendo di scegliere un elemento della matrice a caso? - Non tiene conto delle distanze tra i numeri dell'array, quindi il tuo modo è inutile". Domanda legittima: il lavaggio del cervello è un esercizio obbligatorio per affinare la logica di scrittura dei programmi? È meglio che io rimanga un codificatore dilettante, è meglio per la mia salute.

E se sei bravo con la teoria della probabilità, allora la logica della roulette - un generatore di numeri casuali nella gamma da 0 a 36 (se la roulette è convenzionale, europea, senza il doppio zero all'americana, ecc...).

 
Wangelys:

Non lo capisco, ma mi piace già il tuo approccio alla teoria della probabilità, espresso nella frase chiave: "La distanza tra i numeri conta". Più tutti i numeri sono lontani dal primo, meno è probabile che cadano..." e la seconda ripresa (check shot): "Tu proponi di scegliere un elemento della matrice a caso? - Non tiene conto delle distanze tra i numeri dell'array, quindi il tuo modo è inutile". Domanda legittima: il lavaggio del cervello è un esercizio obbligatorio per affinare la logica di scrittura dei programmi? Penso che sia meglio che io rimanga un codificatore dilettante, è meglio per la mia salute.

E se sei bravo con la teoria della probabilità, la logica della roulette - un generatore di numeri casuali in una gamma da 0 a 36 (se regolare roulette europea, senza il doppio zero all'americana, ecc ...).

In realtà, la roulette del casinò non è altro che una metafora, nella quale sono già cadute almeno tre persone in questo thread.

 
joo:

In realtà, la roulette del casinò non è altro che una metafora in cui sono già cadute almeno tre persone in questo thread.

- Sì, sì, ho capito, il linguaggio di Esopo!

- Mi scusi, da dove viene?

 
Wangelys:

- Sì, sì, ho capito, il linguaggio di Esopo!

- Mi dispiace, non ho capito, da dove viene?

Robert Sheckley?
 
joo:

La larghezza dei settori non può corrispondere ai valori della matrice, altrimenti l'algoritmo non funzionerà per tutti i numeri.

Ciò che conta è la distanza tra i numeri. Più tutti i numeri sono distanti dal primo, meno è probabile che cadano. In sostanza rimandiamo su una linea retta barre proporzionale alla distanza tra i numeri, regolata da un fattore di 0,01, in modo che l'ultimo numero la probabilità di cadere non era uguale a 0 come il più lontano dal primo. Più alto è il coefficiente, più uguali sono i settori. Il file excel è allegato, sperimentatelo.

1. Il calcolo delle probabilità teoriche è dato nell'excel. Il primo numero è la probabilità più alta, l'ultimo numero è la probabilità più bassa ma non è uguale a 0.

2) Le dimensioni negative dei settori non si verificano mai per qualsiasi insieme di numeri, finché l'insieme è ordinato in ordine decrescente - il primo numero è il più grande (funzionerà anche con il più grande dell'insieme ma un numero negativo).

Questa non è un'affermazione corretta IMHO.

имеем массив
 double a[10]={1,2,3,4,5,6,7,8,9,10};
какова вероятность выпадения каждого?
 55=1+2+3+4+5+6+7+8+9+10;
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9].
теперь разметим массив где эти вероятности будут отображены
 double с[10]={1,3,6,10,15,21,28,36,45,55};
теперь при выпадении чисел от 1 до 55, если ранд55 <= c[x], то имеем нужный индекс.
для того чтоб работало и для отрицательных чисел нужно сдвинуть значения на 1-с[0].

теперь посмотрим изменяться ли вероятности при изменении чисел...
 double a[10]={2,4,6,8,10,12,14,16,18,20};
какова вероятность выпадения каждого?
 110=2+4+6+8+10+12+14+16+18+20;
 2/110==1/55
 double b[10]={1/55,2/55,3/55,4/55,5/55,6/55,7/55,8/55,9/55,10/55};
те вероятность выпадения [0] в 10 раз меньше чем [9], 
вероятность выпадения не изменилась, 
т.к. она измеряется относительно среднего рассчитанного по всему массиву.

 

In secondo luogo, il calcolo dell'array di probabilità con[] è necessario una volta per ogni epoca, quindi dovremmo dividere la funzione in RoletteEpoh() e RoletteRand().

anche se Joo ne ha parlato all'inizio.

ma si può ottenere l'accelerazione stessa semplicemente cercando il valore abbandonato nell'array c[].

Puoi usare la biblio standard, cioè i metodi di ricerca rapida.

E fareste meglio a prendere i suoi metodi rielaborati dall'articolo Spreadsheets in MQL5

Se volete fare una ricerca rapida per array ordinati con valori non elencati, usate il metodo di ricerca maiuscolo invece di quello standard (potrei sbagliarmi, non ho guardato quello standard per molto tempo).

 
joo:
Robert Shackley?
No, un po' più semplice - Privoz a Odessa, anche se amo anche Shackley (quasi scritto shekels). Ma la tua seguente metafora ha "preso" tutti i partecipanti a questo ramo:
joo:
Suggerisco di discutere qui i problemi di costruzione logica dell'algoritmo ottimale
-perché quello che sta succedendo qui difficilmente rientra nella formulazione del problema della "costruzione ottimale della logica dell'algoritmo" - è più un miglioramento dei metodi e delle tecniche di codifica... o mi sbaglio?
 
Wangelys:
Problemi di "costruzione ottimale della logica dell'algoritmo" - è più un miglioramento dei metodi e delle tecniche di codifica... o mi sbaglio?

Un filo di natura generale:

"Se qualcuno dubita che il suo algoritmo abbia una logica ottimale in termini di velocità (o chiarezza), è il benvenuto".

E nello specifico il mio compito era "...per favore suggerisci una variante più veloce...". Più veloce! Non sto chiedendo se il mio algoritmo è giusto o sbagliato, in questo caso ho solo bisogno di più veloce, cioè, se qualcuno suggerisce un'altra variante dell'algoritmo, dovrebbe produrre risultati esattamente come il mio e nessun altro. E per qualche motivo ognuno ha cominciato a pensare alle sue cose.


OK, il mio compito di accelerare è stato risolto. :)

 
Wangelys:

- Sì, sì, ho capito, il linguaggio di Esopo!

- Mi dispiace, non ho capito, da dove viene?

Viene dagli algoritmi genetici.
Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Ora ho un problema. Ho bisogno di fare un ordinamento efficace degli array con un grande "costo" di elementi copiati (cioè elementi di cui sono voluminosi, strutture "pesanti", oggetti di classe, lunghe stringhe, ecc. Il senso comune suggerisce che dovremmo lasciarli al loro posto, ma ordinare invece per qualche tipo di puntatori - indici di cella della loro posizione originale. Ecco una citazione da qui :https://www.mql5.com/ru/forum/6476#comment_178318
Если прямо тут перевести в подобие "техзадания", то нужна функция, на вход берущая массив и возвращающая 
второй массив (int), элементы которого являются индексами элементов входного массива, расположенными 
по убыванию (возрастанию).

В идеальном случае сделать перегрузки для всех стандартных типов + CObject (при обязательном требовании
к реализации функции Compare() у наследников CObject).  Хотелось бы и для структур, но похоже на стороне
разработчика никак не решаемо - виртуальных функций у структур нет (и не надо!), т.е. юзерскую функцию
Compare() не пришить, а "стандартное" отношение порядка для структур, естественно, не определено.  
Lasciamo i rispettati sviluppatori del terminale con i loro numerosi compiti attuali per ora, e implementiamolo su mql5.