Was ist das? Durch das Ersetzen der Fehler durch die nächstgelegenen Korrekturen ??? Ich fürchte, es hängt alles davon ab, wie wir diese Fehler verteilen. Es ist gut möglich, dass die nächsten Korrekturen nicht mehr an der Spitze liegen werden.
Und es wird sich herausstellen, dass wir statt falscher Parametersätze richtige Ergebnisse haben werden - was meiner Meinung nach auch nicht gemacht werden sollte - was finden wir dann? Wir werden ein Maximum erhalten, und es wird einen falschen Satz von Parametern haben ?
Ehrlich gesagt, sehe ich da kein Problem. Allerdings ist meine Kompetenz bei der zur Diskussion stehenden Variante gleich null.
Wie wäre es, eine Funktion zu schreiben, die nur gültige Ketten nach Nummern ausgibt?
Das erste, was uns in den Sinn kommt, ist eine Tabelle mit 117649 Werten, und lassen Sie die Genetik nach Zahlen in dieser Tabelle suchen.
Nein, die Tabelle mit den gültigen Ketten wäre viel kleiner, aber selbst wenn es 5000 davon gibt, wie können wir sie schreiben, ohne durcheinander zu kommen?
Nein, die Tabelle mit den richtigen Ketten wird wesentlich kleiner sein, aber selbst wenn es 5000 davon gibt, wie buchstabiert man sie und kommt nicht durcheinander?
Zu einem Dateidump. Suchen Sie dann die Nummer des Ausweises und gleichen Sie sie mit der Datei ab.
Ich meinte, wie man sich nicht verwirren lässt, sich nicht wiederholt und den Prozess nicht verpasst?
inputint i1 = 0;
inputint i2 = 0;
inputint i3 = 0;
sinputint NumPass;
voidOnTesterInit()
{
int StopNumPass = 1;
// Считали оптимизационные параметры входных// ...for (int _i1 = Start1; _i1 < Stop1; _i1 += Step1)
for (int _i2 = Start2; _i2 < Stop2; _i2 += Step2)
for (int _i3 = Start2; _i3 < Stop3; _i3 += Step3)
if (CheckCorrect(_i1, _i2, _i3))
{
// записали проход в файл//...
StopNumPass++; // см. ниже
}
// Сбросили оптимизацию входных и назначили NumPass от 1 до StopNumPass с шагом 1.
}
In diesem Beispiel hängt das Ergebnis stark von der Reihenfolge ab, in der die for-Schleifen angeordnet sind. Und das alles nur wegen dieser Besonderheit.
Offensichtlich, wenn Sie eine vollständige Aufzählung von y = x^2 verfolgen. Dann mischen Sie die Optimierungszeilen nach dem Zufallsprinzip und erstellen eine neue Menge auf der Grundlage dieser Mischung. Dann wird die GA den Scheitelpunkt der Parabel nicht finden.
Vor nicht mehr als einer Woche wurde ich für einen ähnlichen Thread kurzzeitig gesperrt und der Thread/die Umfrage wurde als unnötige Seite mit Wurzeln herausgerissen.
Was die Frage angeht, habe ich bereits geschrieben, dass es optimal wäre, alle Kombinationen, die verboten sind, auszuschließen, dies kann optimal vom Entwickler gemacht werden, ansonsten muss man ein Skript machen, das alle Kombinationen durchläuft und nur erlaubte Kombinationen in einer Datei speichert, und diese Datei bereits zur Optimierung mit Genetik laden.
Offensichtlich, wenn Sie eine vollständige Aufzählung von y = x^2 verfolgen. Dann mischen Sie die Optimierungszeilen nach dem Zufallsprinzip und erstellen eine neue Menge auf der Grundlage dieser Mischung. Die GA wird den Scheitelpunkt der Parabel nicht finden.
Ich habe einen Test Expert Advisor für den Optimierungsmodus "Matte" erstellt
// #define TESTER_FILE // Советник будет работать не только на локальных Агентах, но и в Облаке.#ifdef TESTER_FILE
// Нужно компилировать (не запускать) советник, когда этот файл (с любым содержанием, хоть пустой) лежит в Песочнице.// Иначе Тестер не будет видеть эти данные, даже если соответствующий файл с ними положить после компиляции на место. #property tester_file__FILE__constint FileCommon = 0;
#else
constint FileCommon = FILE_COMMON;
#endif // TESTER_FILEsinputbool Rand = false; // Вкл/выкл. перемешиваниеsinputint NumPass = 10001; // Количество проходов// Фитнесс-функцияdouble Func( constdouble X )
{
// return(X); // Проверка, что Агенты считывают нужные данныеreturn(-X * X + 1); // Парабола с максимальным значением в единице - его и будем искать
}
// Меняет местами элементы массиваtemplate <typename T>
void Swap( T &Array[], constuint Pos1, constuint Pos2 )
{
const T Tmp = Array[Pos1];
Array[Pos1] = Array[Pos2];
Array[Pos2] = Tmp;
}
// Возвращает случайный индекс массиваuint GetRandPos( constuint Size )
{
return(MathRand() * (Size - 1) / SHORT_MAX);
}
// Перемешивает элементы массиваtemplate <typename T>
void Mixing( T &Array[], constuint AmountIterations )
{
constint Size = ArraySize(Array);
MathSrand((uint)TimeLocal()); // Повторные запуски Оптимизатор будет игнорировать - build 1881for (uint i = 0; i < AmountIterations; i++)
Swap(Array, GetRandPos(Size), GetRandPos(Size));
}
// Вычисляет интервал оптимизацииvoid SetInterval( double &Array[], constdouble Begin, constdouble End, constuint Amount )
{
if (Amount > 1)
{
constdouble Step = (Begin - End) / (Amount - 1);
double Tmp = End;
for (int i = ArrayResize(Array, Amount) - 1; i >= 0; i--, Tmp += Step)
Array[i] = NormalizeDouble(Tmp, 8);
}
}
#define TOSTRING(A) #A
voidOnTesterInit()
{
ParameterSetRange(TOSTRING(NumPass), true, 0, 0, 1, NumPass - 1); // Задали Оптимизатору количество проходов = NumPassdouble Array[];
SetInterval(Array, -1, 1, NumPass); // Выстроили значения интервала по порядкуif (Rand)
Mixing(Array, NumPass * 10); // Перемешали все в интервале// ArrayPrint(Array); // Проверка, что Агенты считывают нужные данныеFileSave(__FILE__, Array, FileCommon); // Записали файл-интервал.А ведь так можно передать в Облако хоть содержимое всей Песочницы + полный стейтмент.
}
voidOnTesterDeinit()
{
if (FileCommon)
FileDelete(__FILE__, FileCommon); // Удалили файл-интервалChartClose(); // Закрыли чарт Frame-выполнения советника
}
doubleOnTester()
{
double Array[];
// Считали точку из интервала и вернули значение фитнесс-функции в нейreturn((FileLoad(__FILE__, Array, FileCommon) != -1) ? Func(Array[NumPass]): 0); // В режиме не-tester_file FileLoad будет выдавать ошибку, если два Агента одновременно обратятся.
}
Ich habe die Anfälligkeiten, Schwächen und aktuellen Fehler von MT5, die beim Schreiben des Beispiels auftraten,rot markiert.
Was ist das? Durch das Ersetzen der Fehler durch die nächstgelegenen Korrekturen ??? Ich fürchte, es hängt alles davon ab, wie wir diese Fehler verteilen. Es ist gut möglich, dass die nächsten Korrekturen nicht mehr an der Spitze liegen werden.
Und es wird sich herausstellen, dass wir statt falscher Parametersätze richtige Ergebnisse haben werden - was meiner Meinung nach auch nicht gemacht werden sollte - was finden wir dann? Wir werden ein Maximum erhalten, und es wird einen falschen Satz von Parametern haben ?
Ehrlich gesagt, sehe ich da kein Problem. Allerdings ist meine Kompetenz bei der zur Diskussion stehenden Variante gleich null.
Ich denke, dass @Andrey Dik bei diesen Fragen helfen kann. Aber selbst die konstruktive Kritik am regulären GA hat nicht gut für ihn geendet...
Leider verboten. Wie lange können Sie noch Strahlen zur Aufhebung des Verbots an die Verwaltung senden?
Wie wäre es, eine Funktion zu schreiben, die nur gültige Ketten nach Nummern ausgibt?
Das erste, was uns in den Sinn kommt, ist eine Tabelle mit 117649 Werten, und lassen Sie die Genetik nach Zahlen in dieser Tabelle suchen.
Nein, die Tabelle mit den gültigen Ketten wäre viel kleiner, aber selbst wenn es 5000 davon gibt, wie können wir sie schreiben, ohne durcheinander zu kommen?
Nein, die Tabelle mit den richtigen Ketten wird wesentlich kleiner sein, aber selbst wenn es 5000 davon gibt, wie buchstabiert man sie und kommt nicht durcheinander?
Zu einem Dateidump. Suchen Sie dann die Nummer des Ausweises und gleichen Sie sie mit der Datei ab.
In die Datei zurücksetzen. Dann sehen Sie sich die Passnummer an und gleichen sie mit der in der Datei ab.
Ich meinte, wie man während des Verschreibungsprozesses selbst nicht verwirrt, nicht wiederholt, nicht übersehen kann?
Ich meinte, wie man sich nicht verwirren lässt, sich nicht wiederholt und den Prozess nicht verpasst?
In diesem Beispiel hängt das Ergebnis stark von der Reihenfolge ab, in der die for-Schleifen angeordnet sind. Und das alles nur wegen dieser Besonderheit.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Nicht für MT-Entwickler! Wodurch soll INIT_PARAMETERS_INCORRECT ersetzt werden?
fxsaber, 2018.07.10 16:27
Offensichtlich, wenn Sie eine vollständige Aufzählung von y = x^2 verfolgen. Dann mischen Sie die Optimierungszeilen nach dem Zufallsprinzip und erstellen eine neue Menge auf der Grundlage dieser Mischung. Dann wird die GA den Scheitelpunkt der Parabel nicht finden.
Vor nicht mehr als einer Woche wurde ich für einen ähnlichen Thread kurzzeitig gesperrt und der Thread/die Umfrage wurde als unnötige Seite mit Wurzeln herausgerissen.
Was die Frage angeht, habe ich bereits geschrieben, dass es optimal wäre, alle Kombinationen, die verboten sind, auszuschließen, dies kann optimal vom Entwickler gemacht werden, ansonsten muss man ein Skript machen, das alle Kombinationen durchläuft und nur erlaubte Kombinationen in einer Datei speichert, und diese Datei bereits zur Optimierung mit Genetik laden.
Ich neige zu dem Schluss, dass das Problem des Autors in der Architektur seines Programms liegt.
Danke für Ihre Meinung, aber es gibt hier keine Diskussion über die Architektur des Programms. Falls Sie es noch nicht bemerkt haben...
Offensichtlich, wenn Sie eine vollständige Aufzählung von y = x^2 verfolgen. Dann mischen Sie die Optimierungszeilen nach dem Zufallsprinzip und erstellen eine neue Menge auf der Grundlage dieser Mischung. Die GA wird den Scheitelpunkt der Parabel nicht finden.
Ich habe einen Test Expert Advisor für den Optimierungsmodus "Matte" erstellt
Ich habe die Anfälligkeiten, Schwächen und aktuellen Fehler von MT5, die beim Schreiben des Beispiels auftraten,rot markiert.