Добрый вечер Суть задачи: есть 8 скважин. Даны их координаты (X;Y). Также дана добыча каждой скважины. Нам нужно выбрать 4 скважины из 8. Оптимальный образом - чтобы итоговая добыча была максимальной. Брутфорсом перебирать все сочетания - 70. Я хочу использовать алгоритм, который находил максимум за меньшее количество итераций.
Загвоздка в том, что мы (условие такое) не знаем добычу отдельно взятой скважины. Мы выбираем четыре скважины и получаем на выходе число "Итого". И все.
Есть идея: сначала взять скважины под номерами 1 2 3 4. Затем 5 6 7 8. В итоге у нас будет 2 числа на выходе. Мы можем их сравнить и узнать, какая выборка лучше. Дальше можно разделить еще на два и взять такие выборки 1 2 7 8 5 6 3 4 1 2 5 6 У нас будет еще 3 числа. Сравнивая итоговые числа, можно узнать какой комплект лучше: 1 2 или 5 6 или 7 8 или 3 4. И расставить их по порядку. Например, получилось вот так:
1 2 > 7 8 > 5 6 > 3 4
тогда мы идем дальше и разделяем эти пары и так далее.
Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим. Цель: сократить число итераций и найти максимум. Удобнее реализовать в виде макроса, думаю.
Файл прилагаю. Надеюсь я понятно объяснил
Помогите, пожалуйста. Третий день сижу думаю только над этой задачей, никак не могу дальше продвинуться. Скоро защита
Добрый вечер Суть задачи: есть 8 скважин. Даны их координаты (X;Y). Также дана добыча каждой скважины. Нам нужно выбрать 4 скважины из 8. Оптимальный образом - чтобы итоговая добыча была максимальной. Брутфорсом перебирать все сочетания - 70. Я хочу использовать алгоритм, который находил максимум за меньшее количество итераций.
Загвоздка в том, что мы (условие такое) не знаем добычу отдельно взятой скважины. Мы выбираем четыре скважины и получаем на выходе число "Итого". И все.
Есть идея: сначала взять скважины под номерами 1 2 3 4. Затем 5 6 7 8. В итоге у нас будет 2 числа на выходе. Мы можем их сравнить и узнать, какая выборка лучше. Дальше можно разделить еще на два и взять такие выборки 1 2 7 8 5 6 3 4 1 2 5 6 У нас будет еще 3 числа. Сравнивая итоговые числа, можно узнать какой комплект лучше: 1 2 или 5 6 или 7 8 или 3 4. И расставить их по порядку. Например, получилось вот так:
1 2 > 7 8 > 5 6 > 3 4
тогда мы идем дальше и разделяем эти пары и так далее.
Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим. Цель: сократить число итераций и найти максимум. Удобнее реализовать в виде макроса, думаю.
Файл прилагаю. Надеюсь я понятно объяснил
Помогите, пожалуйста. Третий день сижу думаю только над этой задачей, никак не могу дальше продвинуться. Скоро защита Gidross
Попробуйте решать задачу нахождения минимума : 1) сравниваем 1234-1235-1236-1237-1238 Предположим 1237 минимальное : 7 скважина нам не подходит остальные скважины расположились согласно производительности 5>6>8>4 - 5ая скважина точно нам нужна 2)сравниваем 5681-5682-5683-5684 в зависимости от того, какое место заняла 4 в новом сравнении есть варианты а) 4>a>b>c наш оптимум 5684 (нам повезло) b) a>4>b>c наш оптимум 568a (тоже повезло) c)a>b>4>c : рассматриваем d)a>b>c>4
3)Для c) сравниваем 568a - 56ab больший и есть искомый для d) сравниваем 568a-56ab-5abc больший и есть искомый Итого : нам понадобилось от 9 до 12 просчетов!
Попробуйте решать задачу нахождения минимума : 1) сравниваем 1234-1235-1236-1237-1238 Предположим 1237 минимальное : 7 скважина нам не подходит остальные скважины расположились согласно производительности 5>6>8>4 - 5ая скважина точно нам нужна 2)сравниваем 5681-5682-5683-5684 в зависимости от того, какое место заняла 4 в новом сравнении есть варианты а) 4>a>b>c наш оптимум 5684 (нам повезло) b) a>4>b>c наш оптимум 568a (тоже повезло) c)a>b>4>c : рассматриваем d)a>b>c>4
3)Для c) сравниваем 568a - 56ab больший и есть искомый для d) сравниваем 568a-56ab-5abc больший и есть искомый Итого : нам понадобилось от 9 до 12 просчетов!Karbofox
Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим.
С740 = 18 643 560 Вполне нормальное число для решения перебором. Реализовать не трудно. не понятен принцип определения оптимальности. Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.
Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим.
С740 = 18 643 560 Вполне нормальное число для решения перебором. Реализовать не трудно. не понятен принцип определения оптимальности. Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.
Попробуйте решать задачу нахождения минимума : 1) сравниваем 1234-1235-1236-1237-1238 Предположим 1237 минимальное : 7 скважина нам не подходит остальные скважины расположились согласно производительности 5>6>8>4 - 5ая скважина точно нам нужна 2)сравниваем 5681-5682-5683-5684 в зависимости от того, какое место заняла 4 в новом сравнении есть варианты а) 4>a>b>c наш оптимум 5684 (нам повезло) b) a>4>b>c наш оптимум 568a (тоже повезло) c)a>b>4>c : рассматриваем d)a>b>c>4
3)Для c) сравниваем 568a - 56ab больший и есть искомый для d) сравниваем 568a-56ab-5abc больший и есть искомый Итого : нам понадобилось от 9 до 12 просчетов!
Вот это похоже! Не могли бы вы, пожалуйста, написать какой-нибудь простенький макрос в VB с этим алгоритмом? Я сам не знаком с этим языком, но по примеру, думаю смогу разобраться с дальнейшими вопросами.
С740 = 18 643 560 Вполне нормальное число для решения перебором. Реализовать не трудно. не понятен принцип определения оптимальности. Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.
Это прогноз и вычисление одной итерации в программе (в экселе упрощенная модель, на которой я тренируюсь) занимает достаточное количество времени. Поэтому оптимально - за наименьшее количество итераций прийти к допустимому значению. Допустим, если максимум 105, а у нас получилось 103-104, то это нормально. а если 90, то это уже большая погрешность. Нужно реализовать какой-нибудь алгоритм, который будет не тупо все сочетания смотреть, а как-то по умному проходить это. В идеале, хочу сделать это с помощью агентов (агентное моделирование). Но сейчас нужно придумать мозг (логику) для этого агента. Для этого тренируюсь на экселе.
Попробуйте решать задачу нахождения минимума : 1) сравниваем 1234-1235-1236-1237-1238 Предположим 1237 минимальное : 7 скважина нам не подходит остальные скважины расположились согласно производительности 5>6>8>4 - 5ая скважина точно нам нужна 2)сравниваем 5681-5682-5683-5684 в зависимости от того, какое место заняла 4 в новом сравнении есть варианты а) 4>a>b>c наш оптимум 5684 (нам повезло) b) a>4>b>c наш оптимум 568a (тоже повезло) c)a>b>4>c : рассматриваем d)a>b>c>4
3)Для c) сравниваем 568a - 56ab больший и есть искомый для d) сравниваем 568a-56ab-5abc больший и есть искомый Итого : нам понадобилось от 9 до 12 просчетов!
Вот это похоже! Не могли бы вы, пожалуйста, написать какой-нибудь простенький макрос в VB с этим алгоритмом? Я сам не знаком с этим языком, но по примеру, думаю смогу разобраться с дальнейшими вопросами.
С740 = 18 643 560 Вполне нормальное число для решения перебором. Реализовать не трудно. не понятен принцип определения оптимальности. Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.
Это прогноз и вычисление одной итерации в программе (в экселе упрощенная модель, на которой я тренируюсь) занимает достаточное количество времени. Поэтому оптимально - за наименьшее количество итераций прийти к допустимому значению. Допустим, если максимум 105, а у нас получилось 103-104, то это нормально. а если 90, то это уже большая погрешность. Нужно реализовать какой-нибудь алгоритм, который будет не тупо все сочетания смотреть, а как-то по умному проходить это. В идеале, хочу сделать это с помощью агентов (агентное моделирование). Но сейчас нужно придумать мозг (логику) для этого агента. Для этого тренируюсь на экселе.
Максимальное количество итераций равно количеству скважин. Как автоматизировать, пока не знаю. Поясняю принцип: при каждой следующей итерации, меняем одну скважину из предыдущей (например: 1234 / 1235), выводим дельту этих итераций (соответственно, дельту отличающихся скважин, в примере 4 и 5). Таким образом, попарно сравниваются все скважины и их можно ранжировать по получившимся разницам.
Знаю, что плохо выражаю свои мысли, вот простой пример на пальцах: те же скважины 1, 2, 3, нужно выбрать 2: #1: ск1ск2=39 #2: ск1ск3=34, ск1ск3-ск1ск2=34-39=-5, => ск3-ск2=-5, => ск3=ск2-5 #3: ск2ск3=35, ск2ск3-ск1ск3=35-34=1, => ск2-ск1=1, => ск1=ск2-1 Приняв, что ск2=0, из #2 и #3 получаем ск3=-5, ск1=-1, соответственно лучшие скважины ск2 и ск1.
PS Не понял, зачем нужны координаты скважин.
Максимальное количество итераций равно количеству скважин. Как автоматизировать, пока не знаю. Поясняю принцип: при каждой следующей итерации, меняем одну скважину из предыдущей (например: 1234 / 1235), выводим дельту этих итераций (соответственно, дельту отличающихся скважин, в примере 4 и 5). Таким образом, попарно сравниваются все скважины и их можно ранжировать по получившимся разницам.
Знаю, что плохо выражаю свои мысли, вот простой пример на пальцах: те же скважины 1, 2, 3, нужно выбрать 2: #1: ск1ск2=39 #2: ск1ск3=34, ск1ск3-ск1ск2=34-39=-5, => ск3-ск2=-5, => ск3=ск2-5 #3: ск2ск3=35, ск2ск3-ск1ск3=35-34=1, => ск2-ск1=1, => ск1=ск2-1 Приняв, что ск2=0, из #2 и #3 получаем ск3=-5, ск1=-1, соответственно лучшие скважины ск2 и ск1.
PS Не понял, зачем нужны координаты скважин.Russel