Это каким ? Заменой инкорректов ближайшими коректами ??? Боюсь, все зависит от того, как мы распределим эти самые инкорректы. Вполне возможно, что ближайшие корректы - будут находиться в стороне от вершины.
Да и получится, что вместо неверных наборов параметров - у нас будут верные результаты - что также, по-моему, делать нельзя - что ж мы тогда находим-то ? Получим максимум, а у него - некорректный набор параметров ?
Честно, не вижу проблем. Однако, моя компетенция по обсуждаемому варианту нулевая.
Очевидно, что если следать полный перебор y = x^2. Затем рандомно перемешать строки опимизации и создать на основе перемешивания новый набор. То ГА не найдет вершину параболлы.
Не более чем неделю назад за аналогичную тему меня забанили на мгновение и тему/опрос вырвали, как ненужную страницу с корнями.
По вопросу, я уже писал, что оптимальным будет исключить все комбинации, которые запрещены, это может оптимально сделать разработчик, в противном случае нужно делать скрипт, который прогонит все комбинации и сохранит в файл только допустимые, и уже загружать для оптимизации с применением генетики этот файл.
Очевидно, что если следать полный перебор y = x^2. Затем рандомно перемешать строки опимизации и создать на основе перемешивания новый набор. То ГА не найдет вершину параболлы.
Накидал проверочный советник для мат. режима Оптимизатора
// #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 будет выдавать ошибку, если два Агента одновременно обратятся.
}
Красным пометил уязвимости, слабые места и текущие ошибки MT5, что выявились при написании примера.
Это каким ? Заменой инкорректов ближайшими коректами ??? Боюсь, все зависит от того, как мы распределим эти самые инкорректы. Вполне возможно, что ближайшие корректы - будут находиться в стороне от вершины.
Да и получится, что вместо неверных наборов параметров - у нас будут верные результаты - что также, по-моему, делать нельзя - что ж мы тогда находим-то ? Получим максимум, а у него - некорректный набор параметров ?
Честно, не вижу проблем. Однако, моя компетенция по обсуждаемому варианту нулевая.
Думаю, по данным вопросам может помочь @Andrey Dik. Но даже конструктивная критика штатного ГА для него ничем хорошим не заканчивалась...
Забанен, к сожалению. Шлю лучи разбана Администрации, ну сколько можно?
А если написать функцию, которая бы выдавала только валидные цепочки по номеру ?
Первое, что приходит на ум - таблица из 117649 значений, а генетика - пусть ищет номера в этой таблице.
Нет, таблица с корректными цепочками получится значительно меньше, но даже если их будет 5000, то как их прописать и не запутаться?
Нет, таблица с корректными цепочками получится значительно меньше, но даже если их будет 5000, то как их прописать и не запутаться?
В файл сбросить. Далее смотрите номер прохода и сопоставляется с тем, что в файле.
В файл сбросить. Далее смотрите номер прохода и сопоставляется с тем, что в файле.
Я имел в виду как не запутаться, не повториться, не пропустить при самом процессе прописывания?
Я имел в виду как не запутаться, не повториться, не пропустить при самом процессе прописывания?
В этом примере результат будет сильно зависеть от того, в какой последовательности расположить циклы for. Все из-за этой особенности
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ?
fxsaber, 2018.07.10 16:27
Очевидно, что если следать полный перебор y = x^2. Затем рандомно перемешать строки опимизации и создать на основе перемешивания новый набор. То ГА не найдет вершину параболлы.
Не более чем неделю назад за аналогичную тему меня забанили на мгновение и тему/опрос вырвали, как ненужную страницу с корнями.
По вопросу, я уже писал, что оптимальным будет исключить все комбинации, которые запрещены, это может оптимально сделать разработчик, в противном случае нужно делать скрипт, который прогонит все комбинации и сохранит в файл только допустимые, и уже загружать для оптимизации с применением генетики этот файл.
Склоняюсь к выводу, что проблема автора в архитектуре его программы.
Спасибо за мнение, только здесь не обсуждается архитектура программы. Если не заметили...
Очевидно, что если следать полный перебор y = x^2. Затем рандомно перемешать строки опимизации и создать на основе перемешивания новый набор. То ГА не найдет вершину параболлы.
Накидал проверочный советник для мат. режима Оптимизатора
Красным пометил уязвимости, слабые места и текущие ошибки MT5, что выявились при написании примера.