Fragen zu OOP in MQL5 - Seite 94

 
Igor Makanu:

Ich kann mit einer "Kopf-an-Kopf"-Lösung signifikante Bits aus int machen, aber ich kann keine Universallösung machen... Ich kann nicht! (((

Es ist sehr wahrscheinlich, dass ich nicht erklärt habe, wie und wohin ich gehen will

es gibt 4 Bytes int / uint, und es gibt mein Dataset, das ich im Optimierer entpacken möchte

Nehmen wir an, es ist mir gelungen, es so zu verpacken:

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

welche Typen ich int_XXX brauche, habe ich noch nicht abgeschätzt

aber ich möchte eine Nutzbarkeit in Form dieses Codes haben

im Allgemeinen funktioniert es so, wie ich es möchte

//+------------------------------------------------------------------+
// 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
}
//+------------------------------------------------------------------+

... Schade, wenn ich die Bits wieder falsch gezählt habe (((

 
Igor Makanu:

Im Allgemeinen funktioniert es so gut, wie ich es mir wünsche.

... schlecht, wenn die Bits wieder falsch gezählt werden (((

Unbescheidene Frage: Was ist der Zweck der Jagd nach Bits?

 
Alexandr Andreev:

Unbescheidene Frage: Was ist der Zweck der Fledermausjagd?

schrieb im ersten Beitrag zu diesem Thema

wir müssen die Anzahl der optimierbaren Parameter reduzieren - nicht kritisch

und den Code von Gray auf einen neuen "int"-optimierten Parameter anwenden wollen, damit der GA des Optimierers nicht so schnell konvergiert - Wiki

 
Igor Makanu:

Im Allgemeinen funktioniert es so gut, wie ich es mir wünsche.

... schlecht, wenn die Bits wieder falsch gezählt werden (((

Wenn es 5 ist, machen 32-Bit-Ints selten Sinn, fast nie (nur als Schleifenzähler und Größeneinheiten, und das ist aus Gewohnheit)

Und alles passt in 64 ohne Bitverschiebungen.

Übrigens: Auch wenn Sie eine 4 haben, sollten Sie 64-Bit-Werte einpacken, zum Beispiel in double - das ist gefragt.

 
Maxim Kuznetsov:

Und 64 passt alles ohne Bitverschiebungen ...

Auf keinen Fall, Längengrade werden im Tester nicht optimiert, vor ein paar Monaten habe ich nachgefragt warum - keine Antwort

uint - Ich glaube, es war auch eine Störung... es scheint, dass der Maximalwert bei der Optimierung nicht verwendet werden durfte

also nur int und es wird (höchstwahrscheinlich) in den neuen Builds nicht richtig funktionieren

 
Igor Makanu:

Auf keinen Fall, lange Strecken sind im Tester nicht optimiert, ich habe sie vor ein paar Monaten gefragt - sie haben mir keine Antwort gegeben.

uint - Ich glaube, es war auch eine Störung... es scheint, dass der Maximalwert während der Optimierung nicht verwendet werden durfte

also nur int und es wird (höchstwahrscheinlich) nicht in neuen Builds funktionieren

Sie werden mehr als einen Monat brauchen, um eine leere Schleife mit Protokollierung zu überarbeiten.

Erstellen Sie lieber ein eigenes Format, bei dem die ersten paar Bits die Größe sind und dann ein Datensatz. Und Sie sollten alles in ein Byte-Array schreiben.

Ein Byte-Array kann leicht in ein beliebiges anderes Array kopiert werden

 
Alexandr Andreev:

es dauert mehr als einen Monat, um eine leere Schleife mit einem langen Lauf zu durchlaufen

So ist es, aber ich bin für eine lange Zeit nicht nach einem idealen TS jagen - was der Optimierer findet, schreibe ich in der Datenbank, aber das Problem ist in GA Konvergenz um eine Gruppe von Parametern, so dass ich beschlossen, zu versuchen, aufzumuntern GA mit einem wissenschaftlichen Ansatz ))))


Alexandr Andreev:

Es ist einfacher, ein eigenes Format zu erstellen, bei dem die ersten paar Bits die Größe und dann ein Datensatz sind. Und schreiben Sie alles in ein Byte-Array.

Ich muss das noch testen, aber im Moment hoffe ich, dass Grays Code und meine Manipulationen mit der Gruppierung der optimierbaren Parameter in int helfen, das GA-Konvergenzproblem zu lösen... wir werden sehen, nicht alles geht so schnell, wie wir es gerne hätten

 
Igor Makanu:

Auf keinen Fall, lange Strecken sind im Tester nicht optimiert, ich habe sie vor ein paar Monaten gefragt - sie haben mir keine Antwort gegeben.

uint - Ich glaube, es war auch eine Störung... Es scheint, dass der Maximalwert während der Optimierung nicht verwendet werden durfte

also nur int und es wird (höchstwahrscheinlich) in den neuen Builds nicht richtig funktionieren

Haben Sie diesen Parameter für den Optimierer festgelegt?

Auf der einen Seite können Sie double setzen, es hat eine Mantis mehr als 32, aber Sie können mit double<->string Konvertierungen im Profil stecken bleiben

 
Maxim Kuznetsov:

Setzen Sie den Optimierungsparameter so?

keine

ich habe mehr als 10 optimierbare Parameter, ich habe die Optimierungsgrenzen gesetzt, alles funktioniert schnell, aber GA kann nur 2 Parameter umgehen und das war's - kein Nutzen mehr in der Optimierung

Ich muss entweder die Parameter gruppieren und sie gruppenweise ausführen oder die Optimierung neu starten und die Caches löschen.

Ich würde gerne ein Experiment machen und überprüfen, ob Wiki mit GA richtig liegt

Gray-Codes werden in der Theorie der genetischen Algorithmen [3] zur Kodierung genetischer Merkmale, die durch ganze Zahlen dargestellt werden, häufig verwendet.

 
Igor Makanu:

keine

ich habe mehr als 10 optimierte Parameter, ich habe Grenzen gesetzt, alles funktioniert schnell, aber GA kann etwa 2 Parameter erfassen und es ist keine weitere Optimierung nötig

Ich muss entweder die Parameter gruppieren und sie gruppenweise ausführen oder die Optimierung neu starten und die Caches löschen.

Ich würde gerne ein Experiment machen und überprüfen, ob Wiki mit GA richtig liegt

Gray's Codes werden manchmal in Datenübertragungsprotokollen verwendet, einfach so. Eigentlich wurden sie für sie gemacht :-)

GA ist eher ein "Modewort". Wie kann der Gray'sche Code bei der Konvergenz helfen? Nur theoretisch...

Sie könnten auch einfach zufällig mischen