Страницы: 1
RSS
Бинарный перебор (метод половинного деления) для массива n-размерности, старый школьный материал под более сложные задачи
 
Друзья. Я что-то растерялся и не знаю в какую сторону копать. Прошу Вас подсказать, возможно с примерами.
У меня есть лист, на котором очень сложными формулами и хитростями многоуровнево производится расчёт конечного значения модели (это не суть, но значимый элемент, как мне кажется, в постановке проблемы). Т.е. я не могу произвести обратный расчёт по этим формула. Я лишь могу подставлять данные в модель, смотреть результат и определять устраивает ли он меня или нет.
Теперь сама история:

Бинарный поиск в n-мерном массиве
Пусть модель рассчитывается на основе n числа факторов, определяющих значение комплексной оценки. Каждый фактор изменяется в диапазоне min(n) и max(n). Причём для каждого из факторов данные значения индивидуальный. Таким образом массив имеет вид array(min(1):max(1);…;min(n):max(n)). Массивы отсортированы в порядке возрастания. Шаг изменения отдельного фактора также отличается для каждого (step n).
Простой перебор всех значений модели и поиск нужного значения – весьма ресурсоёмкая и затратная по времени операция, поскольку, например:
- min и max не ограничены;
- step может достигать 0,01;
- количество факторов n также не ограничено.

Что я пытался сделать и что не получилось
Сначала я хотел последовательно перебрать все значения модели, отследить значение комплексной оценки и, если оно меня удовлетворяет, занести его в таблицу подходящих для меня комбинаций значений факторов. (МНЕ, в конечном счёте, НУЖНО ВЫВЕСТИ ВСЕ ВОЗМОЖНЫЕ КОМБИНАЦИИ ФАКТОРОВ, ПРИ КОТОРЫХ КОМПЛЕКСНАЯ ОЦЕНКА БУДЕТ УДОВЛЕТВОРЯТЬ ЗАДАННОМУ УСЛОВИЮ).
Когда я просчитал количество возможных комбинаций и запустил макрос, то мой копм несчастно заныл и повис.
Количество комбинаций весьма значительно. Например, если принять, что модели задействовано всего 5 факторов, а их минимальные и максимальные значения совпадают и равны, соответственно 1 и 4, а также у них совпадает шаг расчёта и равен 0,01, то примерный подсчёт количества возможных комбинаций просто ошеломляет. Потому вариант последовательного перебора в моём случае, просто не выполним.

Какой мне видится вариант решения и я не знаю как его реализовать
Или в школе или в ВУЗе ещё при изучении pascal делали мы в качестве курсовой работы "метод половинного деления" (так его препод называла). Насколько я прочитал в сети - "метод бинарного поиска". Суть, как я помню, в том, что мы проверяем интервалы и если конечное значение функции в проверяемом интервале лежит между полученными интервальными значениями функции, то мы начинаем сужать диапазон и уточнять значения. Когда диапазон становился совсем небольшим, то мы просто перебирали в пределах этого маленького диапазона.
Как мне кажется, в моей проблеме этот вариант подходит.
Необходимо отметить, что для решения задачи мы предполагаем, что рост отдельного фактора на фоне остальных, может вызывать как рост комплексной оценки, так и не влиять на неё, так и уменьшать её.

Чего мне надо (чем помочь)
Если любезная публика не откажется, то мне бы хотелось увидеть  алгоритм и код (или что-то), которые позволили бы мне решить эту страшную задачку и при этом, чтобы моя машина выжила...

Вот как-то так... прошу Вашей подсказки и помощи.
 
Также хотел отметить, что попытки подойти к этой задаче мной производились:
- неудачная здесь
- более или менее удачная (согласно решаемой задачи) здесь
Кросов на тему нет

Также надо отметить, что ещё сижу и читаю и думаю как применить что-то типа этого
Изменено: Kirill Gureev - 11.07.2016 14:37:17
 
Все зависит от исходной функции, если она линейна относительно факторов, то решение задачи можно свести к симплекс-методу (подойдет "Поиск решения")
Если не линейная, то генетическим алгоритмом или ОПГ
 
Цитата
Kirill Gureev написал:  "метод половинного деления"... Как мне кажется, в моей проблеме этот вариант подходит.
почему вы всё ещё отказываетесь пользоваться Поиском?  :(
выделите вопрос без "истории" и найдите на него ответ - bisection algorithm vba (варьируйте словосочетания) - разбирайте примеры, делайте по аналогии
Изменено: JeyCi - 11.07.2016 15:25:12
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал: почему вы всё ещё отказываетесь пользоваться Поиском?  
Надо ведь полагать, что я пробовал поискать... но не вышло у меня...
Цитата
MCH написал: Если не линейная, то генетическим алгоритмом или ОПГ
Она не линейная...
Как начать искать такие варианты?
 
Цитата
JeyCi написал:
выделите вопрос без "истории" и найдите на него ответ
В таких ответах, что я искал, всегда разбирались ситуации, где количество факторов было фиксированным (2, 3), а у меня n
 
Цитата
MCH написал: ОПГ
Прошу прощения, а что такое ОПГ?
 
Не игнорируйте поиск: метод ОПГ
 
Чем не устраивает "поиск решения"?
Без понимания того, как ведет себя функция при изменения параметров, невозможно предложить решение.
Бинарный поиск, думаю, здесь не поможет, если "поиск решения" не справится с задачей.
 
ВОТ, например, написанная программа просчитала вариант по трём факторам одной модели с шагом 0,1.
Число итераций просто обалденное. Время расчёта почти 12 часов.
Это просто последовательный перебор.
Причём пользователь каждый раз составляет свою модель и произвести обратный процесс от получаемого результата к компонентам (обратная функция) просто не представляется возможным, поскольку используются при расчёте матричные свёртки.
Прочитал материал про генетические алгоритмы и и ОПГ и как я понял, если плоскость имеет несколько экстремумов, то данные методы выведут лишь часть значений и скорее всего в одном экстремуме.
Думал про какое-то решение через как бы OLAP...

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

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




Вот таким образом это выглядит.
Может быть эта информация позволит получить дополнительные комментарии..
Спасибо.
Страницы: 1
Читают тему
Наверх