Алгоритм объединения диапазонов отрезка - помогите создать - страница 3

 
Dmitry Fedoseev:

1. А где этот коэффициент?

2. А п.1?

3. Нет, все проще. Ладно, завтра постараюсь ускорить.

1. Коэффициент(сводный показатель)  у каждого отрезка будет по его характеристикам - экспериментально потом определюсь с формулой, но условно можно считать, что он есть.

2. Так он на отрезок отдельно, только один показатель (из трех, на которых он вычисляется) там можно распределить между всеми, а два остальных нельзя.

3. Спасибо, буду ждать.

 

Вот. Но если отрезков 1000 это не помогает. Слишком много вариантов получается, может даже памяти не хватить. 

Можно пойти другим путем - к концу каждого отрезка привязать массив с индексами, указывающими на следующий отрезок. Таким образом получится обеспечить проход по всем вариантам, без заполнения ими памяти.  Но все равно вариантов же будет очень много... перебор будет выполняться долго. Еще можно подумать, как обеспечить доступ к варианту по его номеру, если надо (ради спортивного интереса).  

Но есть ли в этом смысл, если так много вариантов? Может, конкретизировать задачу, чтобы она была более реальная?

Файлы:
3.mq5  14 kb
 
Dmitry Fedoseev:

Вот. Но если отрезков 1000 это не помогает. Слишком много вариантов получается, может даже памяти не хватить. 

Можно пойти другим путем - к концу каждого отрезка привязать массив с индексами, указывающими на следующий отрезок. Таким образом получится обеспечить проход по всем вариантам, без заполнения ими памяти.  Но все равно вариантов же будет очень много... перебор будет выполняться долго. Еще можно подумать, как обеспечить доступ к варианту по его номеру, если надо (ради спортивного интереса).  

Но есть ли в этом смысл, если так много вариантов? Может, конкретизировать задачу, чтобы она была более реальная?

Там целевых много может быть. Наименьшие пропуски, из самых длинных отрезков, из самых коротких, из самых одинаковых) даже в графах цели меньшее время и минимальный путь по логистике по разному решается)
 
Valeriy Yastremskiy:
Там целевых много может быть. Наименьшие пропуски, из самых длинных отрезков, из самых коротких, из самых одинаковых) даже в графах цели меньшее время и минимальный путь по логистике по разному решается)

Это к чему?

Массивы, с указателями на соседний отрезок - это мизерный объем памяти по сравнению с массивом, содержащим все готовые комбинации.

 
Dmitry Fedoseev:

Вот. Но если отрезков 1000 это не помогает. Слишком много вариантов получается, может даже памяти не хватить. 

Спасибо!

Но я не совсем понял, суть обновления - были внесены исправления в код? Прошлый раз находилось 613 комбинаций, а в этот раз 1507.

Скорость работы стала меньше, но это видимо от числа комбинаций.

Прошлый вариант:

2021.04.23 19:56:08.350 Scripts script Q_Podbor_02 (Si-6.21,M1) loaded successfully
2021.04.23 19:56:08.742 Scripts script Q_Podbor_02 (Si-6.21,M1) removed

Текущий вариант:

2021.04.23 19:51:56.608 Scripts script Q_Podbor_03 (Si-6.21,M1) loaded successfully
2021.04.23 19:51:58.387 Scripts script Q_Podbor_03 (Si-6.21,M1) removed
Dmitry Fedoseev:

Можно пойти другим путем - к концу каждого отрезка привязать массив с индексами, указывающими на следующий отрезок. Таким образом получится обеспечить проход по всем вариантам, без заполнения ими памяти.  Но все равно вариантов же будет очень много... перебор будет выполняться долго. Еще можно подумать, как обеспечить доступ к варианту по его номеру, если надо (ради спортивного интереса).  

Если я правильно понял, предлагается последовательно вычислять комбинацию и сразу её оценивать, результат оценки сохранять и переходить к следующей комбинации. Если новый результат (или топ10) лучше прошлого, то делаем на него замену в массиве\переменной. И, да, как раз хотел спросить, как получить цепочку индексов первого уровня массива из которого состоит комбинация?

Dmitry Fedoseev:

Но есть ли в этом смысл, если так много вариантов? Может, конкретизировать задачу, чтобы она была более реальная?

Почему вариант с перебором ограниченного числа отрезков из текущей точки (шаге комбинации, когда уже подобрали n отрезков) не годиться, ведь он позволит существенно снизить число комбинаций?

 
Aleksey Vyazmikin:

Спасибо!

Но я не совсем понял, суть обновления - были внесены исправления в код? Прошлый раз находилось 613 комбинаций, а в этот раз 1507.

Скорость работы стала меньше, но это видимо от числа комбинаций.

Прошлый вариант:

Текущий вариант:

Если я правильно понял, предлагается последовательно вычислять комбинацию и сразу её оценивать, результат оценки сохранять и переходить к следующей комбинации. Если новый результат (или топ10) лучше прошлого, то делаем на него замену в массиве\переменной. И, да, как раз хотел спросить, как получить цепочку индексов первого уровня массива из которого состоит комбинация?

Почему вариант с перебором ограниченного числа отрезков из текущей точки (шаге комбинации, когда уже подобрали n отрезков) не годиться, ведь он позволит существенно снизить число комбинаций?

Может, рассмотрим изначальный вариант задачи? 

 
Алексей Тарабанов:

Может, рассмотрим изначальный вариант задачи? 

Без отрезков. 

 
Алексей Тарабанов:

Может, рассмотрим изначальный вариант задачи? 

Алексей Тарабанов:

Без отрезков. 

А разве такой вариант был?

Изначальный вариант - идеально разбить цифровой ряд в виде массива на отрезки (диапазоны). Критерии для разбиения:

1. Не менее 5% чисел попадает в диапазон - %R;

2. Оценить отклик отрезка на другой бинарный массив такого же размера (есть число, попавшее в диапазон - 1, нет - 0), при этом отклик отрезка должен отличаться от среднего значения всего бинарного массива не менее чем на 5% - dP%;

3. На 10 одинаковых отрезках по глубине массива рассчитать SCO dP%, который должен быть не более 1,5 - K_SKO.

Сейчас разными методами определяются диапазоны, но разные методы способны выделить разные диапазоны отвечающие выше указанным критериям. Поэтому цель взять все варианты  разбиения на отрезки от разных методов и объединить лучшие.

 
Aleksey Vyazmikin:

Спасибо!

Но я не совсем понял, суть обновления - были внесены исправления в код? Прошлый раз находилось 613 комбинаций, а в этот раз 1507.

Скорость работы стала меньше, но это видимо от числа комбинаций.

Прошлый вариант:

Текущий вариант:

Если я правильно понял, предлагается последовательно вычислять комбинацию и сразу её оценивать, результат оценки сохранять и переходить к следующей комбинации. Если новый результат (или топ10) лучше прошлого, то делаем на него замену в массиве\переменной. И, да, как раз хотел спросить, как получить цепочку индексов первого уровня массива из которого состоит комбинация?

Почему вариант с перебором ограниченного числа отрезков из текущей точки (шаге комбинации, когда уже подобрали n отрезков) не годиться, ведь он позволит существенно снизить число комбинаций?

А я не знаю где и в чем в ищите комбинации? Вообще при каждом запуске создается новый набор исходных отрезков и он всегда разный.

Цепочку индексов - значит надо создавать комбинации не из отрезков, а из индексов отрезков, ну или добавить третий элемент во второе измерение и в него сохранить индекс.

Не знаю почему не годится какой-то перебор какого-то ограниченного числа, вы же писали про все комбинации.

 
Dmitry Fedoseev:

А я не знаю где и в чем в ищите комбинации?

Выше подробно написал где и в чем при ответе Алексей Тарабанов. Но это теория - пока реально ещё не доделал что нужно.

Dmitry Fedoseev:

Вообще при каждом запуске создается новый набор исходных отрезков и он всегда разный.

Тогда понятно - я с этим не разобрался и просто запустил два скрипта - если набор разный, то оценить можно будет только при одинаковых наборах.

Dmitry Fedoseev:

Цепочку индексов - значит надо создавать комбинации не из отрезков, а из индексов отрезков, ну или добавить третий элемент во второе измерение и в него сохранить индекс.

Думаю, что третий элемент - вариант более удобный. Могли бы Вы подправить код, что б он работал корректно с этой реализацией?

Dmitry Fedoseev:

Не знаю почему не годится какой-то перебор какого-то ограниченного числа, вы же писали про все комбинации.

Всё верно, изначально я писал про все комбинации, но в процессе, благодаря Вам, становится очевидно, что это очень затратно и нужен вариант эмпирически способный быть не хуже полного перебора, а раз оценка получившегося отрезка формируется из его кусков, то я и предполагаю, что ограничившись n комбинаций из лучших кусков при добавление нового куска, можно будет приблизится к лучшему варианту из всех возможных комбинаций без ограничения.