Domande su OOP in MQL5 - pagina 94

 
Igor Makanu:

Posso fare dei bit significativi di int con una soluzione "di testa", ma non posso fare una soluzione universale... Non posso! (((

È molto probabile che io non abbia spiegato come e dove voglio andare

ci sono 4 byte int / uint, e c'è il mio dataset, che voglio scompattare nell'ottimizzatore

Supponiamo che io sia riuscito a confezionarlo in questo modo:

0-8 9-16 17-24 25-32
int_11 int_9 int_12

quali tipi ho bisogno di int_XXX, non ho ancora stimato

ma voglio avere un'usabilità nella forma di questo codice

in generale, funziona come voglio io

//+------------------------------------------------------------------+
// value - значение
// pos - бит начала числа
// cnt_bits - общее количество занимаемых бит
//+------------------------------------------------------------------+
int BitsToInt(const uint value, const uint pos, const uint cnt_bits)
{
   uint mask_value = (0x7FFFFFFF >> (sizeof(uint) * 8 - cnt_bits)) << pos;
   uint mask_sign = 1 << (pos + cnt_bits - 1);
   int sign = (bool)(value & mask_sign) ? -1 : 1;
   return(sign * (int)((value & mask_value) >> pos));
}
//+------------------------------------------------------------------+
void OnStart()
{
   uint v = 0x7F << 12;
   Print(BitsToInt(v, 12, 8));   // 127
   v = 0xFF << 12;
   Print(BitsToInt(v, 12, 8));   // -127
}
//+------------------------------------------------------------------+

... Peccato, se ho contato male i bit di nuovo (((

 
Igor Makanu:

In generale, funziona bene come vorrei.

... Peccato che se i bit sono contati male di nuovo (((

Domanda immodesta, qual è lo scopo di inseguire i bit?

 
Alexandr Andreev:

Domanda immodesta, qual è lo scopo di inseguire i pipistrelli?

ha scritto nel primo post di questo pezzo

dobbiamo ridurre il numero di parametri ottimizzabili - non critico

e vogliono applicare il codice di Gray a un nuovo parametro ottimizzato "int", in modo che il GA dell'ottimizzatore non converga così rapidamente - Wiki

 
Igor Makanu:

In generale, funziona bene come vorrei.

... male se i bit sono contati male di nuovo (((

Se è 5, gli int a 32 bit raramente hanno senso, quasi mai (solo come contatori di loop e unità di dimensione, e questo per abitudine)

E tutto si adatta a 64 senza spostamenti di bit.

A proposito, anche se avete un 4, dovreste comunque impacchettare i valori a 64 bit, per esempio in doppio - è molto richiesto.

 
Maxim Kuznetsov:

E 64 si adatta a tutto senza spostamenti di bit ...

Niente da fare, le longitudini non sono ottimizzate nel tester, un paio di mesi fa ho chiesto perché - nessuna risposta

uint - Anch'io penso che sia stato un glitch... sembra che il valore massimo non possa essere utilizzato durante l'ottimizzazione

quindi solo int e (molto probabilmente) non funzionerà correttamente nelle nuove build

 
Igor Makanu:

Assolutamente no, le lunghezze non sono ottimizzate nel tester, ho chiesto loro un paio di mesi fa - non mi hanno dato una risposta

uint - Anch'io penso che sia stato un glitch... sembra che il valore massimo non possa essere utilizzato durante l'ottimizzazione

quindi solo int e (molto probabilmente) non funzionerà nelle nuove costruzioni

ci vorrà più di un mese per sovrapporre un ciclo vuoto con la registrazione

È meglio che creiate il vostro formato, dove i primi bit sono la dimensione, poi un record. E dovreste scrivere tutto in array di byte.

Un array di byte può essere facilmente copiato in qualsiasi altro

 
Alexandr Andreev:

ci vuole più di un mese per passare attraverso un ciclo vuoto con una lunga corsa

Così è, ma io per molto tempo non sto inseguendo un TS ideale - quello che l'ottimizzatore trova lo scrivo nel database, ma il problema è nella convergenza GA intorno a un gruppo di parametri, così ho deciso di provare a rallegrare GA con un approccio scientifico ))))


Alexandr Andreev:

È più facile creare il proprio formato, dove i primi bit sono la dimensione, poi un record. E scrivere tutto in array di byte.

Ho bisogno di testare, ma per ora spero che il codice di Gray e le mie manipolazioni con il raggruppamento dei parametri ottimizzabili in int aiutino a risolvere il problema della convergenza di GA... vedremo, non tutto è così veloce come vorremmo che fosse

 
Igor Makanu:

Assolutamente no, le lunghezze non sono ottimizzate nel tester, ho chiesto loro un paio di mesi fa - non mi hanno dato una risposta

uint - Anch'io penso che sia stato un glitch... Sembra che il valore massimo non possa essere utilizzato durante l'ottimizzazione

quindi solo int e (molto probabilmente) non funzionerà correttamente nelle nuove build

hai impostato questo parametro nell'ottimizzatore?

Da un lato, si può impostare il doppio, ha un manto più di 32, ma si può rimanere bloccati con conversioni doppio<->stringa nel profilo

 
Maxim Kuznetsov:

imposti il parametro dell'ottimizzatore in questo modo?

no

Ho più di 10 parametri ottimizzabili, ho impostato i limiti di ottimizzazione, tutto funziona velocemente, ma GA può andare intorno a 2 parametri e questo è tutto - non serve ottimizzare ulteriormente

Devo o raggruppare i parametri ed eseguirli per gruppi o semplicemente riavviare l'ottimizzazione e cancellare la cache

Vorrei fare un esperimento e verificare se Wiki ha ragione su GA

I codici di Gray sono ampiamente usati nella teoria degli algoritmi genetici [3] per codificare le caratteristiche genetiche rappresentate da numeri interi.

 
Igor Makanu:

no

Ho più di 10 parametri ottimizzati, ho impostato dei limiti, tutto funziona velocemente, ma GA può raccogliere circa 2 parametri e non c'è più bisogno di ottimizzazione

Devo o raggruppare i parametri ed eseguirli per gruppi o semplicemente riavviare l'ottimizzazione e cancellare la cache

Vorrei fare un esperimento e verificare se Wiki ha ragione su GA

I codici di Gray sono a volte usati nei protocolli di trasferimento dei dati solo perché. In realtà sono stati fatti per loro :-)

GA è più una "parola d'ordine". Come può il codice di Gray aiutare la convergenza? Solo teoricamente...

si potrebbe anche mischiare a caso