Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Алгоритм нахождения максимальной суммы. (не брутфорс) - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Алгоритм нахождения максимальной суммы. (не брутфорс) (Формулы/Formulas)
Алгоритм нахождения максимальной суммы. (не брутфорс)
Gidross Дата: Пятница, 30.05.2014, 21:11 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер
Суть задачи: есть 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, то число итераций было очень большим.
Цель: сократить число итераций и найти максимум.
Удобнее реализовать в виде макроса, думаю.

Файл прилагаю.
Надеюсь я понятно объяснил :(

Помогите, пожалуйста. Третий день сижу думаю только над этой задачей, никак не могу дальше продвинуться. Скоро защита :(
К сообщению приложен файл: perebor4iz8.xls (53.0 Kb)


Сообщение отредактировал Gidross - Пятница, 30.05.2014, 21:18
 
Ответить
СообщениеДобрый вечер
Суть задачи: есть 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
Дата добавления - 30.05.2014 в 21:11
Nic70y Дата: Пятница, 30.05.2014, 22:04 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8772
Репутация: 2277 ±
Замечаний: 0% ±

Excel 2010
Может так, формулой массива
Код
=МИН(ЕСЛИ($D$2:$D$9=НАИБОЛЬШИЙ($D$2:$D$9;СТРОКА(D1));ЕСЛИ(A$2:A$9<>D10;A$2:A$9)))
а может и нет (ни чего не понял)
К сообщению приложен файл: 44.96.23.xls (37.0 Kb)


ЮMoney 41001841029809
 
Ответить
СообщениеМожет так, формулой массива
Код
=МИН(ЕСЛИ($D$2:$D$9=НАИБОЛЬШИЙ($D$2:$D$9;СТРОКА(D1));ЕСЛИ(A$2:A$9<>D10;A$2:A$9)))
а может и нет (ни чего не понял)

Автор - Nic70y
Дата добавления - 30.05.2014 в 22:04
Karbofox Дата: Пятница, 30.05.2014, 22:35 | Сообщение № 3
Группа: Проверенные
Ранг: Участник
Сообщений: 69
Репутация: 16 ±
Замечаний: 0% ±

Excel 2010
Попробуйте решать задачу нахождения минимума :
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
Дата добавления - 30.05.2014 в 22:35
MCH Дата: Пятница, 30.05.2014, 23:46 | Сообщение № 4
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим.

С740 = 18 643 560
Вполне нормальное число для решения перебором.
Реализовать не трудно. не понятен принцип определения оптимальности.
Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.

Скоро защита

Это какое-то учебное задание или необходимо в работе?
 
Ответить
Сообщение
Суть в том, что если бы скважин было не 8, а 40 и выбрать нужно было бы не 4 а 7, то число итераций было очень большим.

С740 = 18 643 560
Вполне нормальное число для решения перебором.
Реализовать не трудно. не понятен принцип определения оптимальности.
Если решать при заданных условиях (найти максимальную выработку) то достаточно взять 4 скважины с максимальной производительностью.

Скоро защита

Это какое-то учебное задание или необходимо в работе?

Автор - MCH
Дата добавления - 30.05.2014 в 23:46
Gidross Дата: Суббота, 31.05.2014, 01:33 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Может так, формулой массива

Нет, к сожалению так не получится.

Попробуйте решать задачу нахождения минимума :
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, то это уже большая погрешность.
Нужно реализовать какой-нибудь алгоритм, который будет не тупо все сочетания смотреть, а как-то по умному проходить это. В идеале, хочу сделать это с помощью агентов (агентное моделирование). Но сейчас нужно придумать мозг (логику) для этого агента. Для этого тренируюсь на экселе.

Это часть моего диплома, я заканчиваю ВУЗ.


Сообщение отредактировал Gidross - Суббота, 31.05.2014, 01:34
 
Ответить
Сообщение
Может так, формулой массива

Нет, к сожалению так не получится.

Попробуйте решать задачу нахождения минимума :
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, то это уже большая погрешность.
Нужно реализовать какой-нибудь алгоритм, который будет не тупо все сочетания смотреть, а как-то по умному проходить это. В идеале, хочу сделать это с помощью агентов (агентное моделирование). Но сейчас нужно придумать мозг (логику) для этого агента. Для этого тренируюсь на экселе.

Это часть моего диплома, я заканчиваю ВУЗ.

Автор - Gidross
Дата добавления - 31.05.2014 в 01:33
krosav4ig Дата: Суббота, 31.05.2014, 01:55 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
чето я тут намудрил (_)O_o(_). Аж самому страшно :D
К сообщению приложен файл: perebor4iz8_.xls (67.0 Kb)


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениечето я тут намудрил (_)O_o(_). Аж самому страшно :D

Автор - krosav4ig
Дата добавления - 31.05.2014 в 01:55
Russel Дата: Суббота, 31.05.2014, 10:51 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1394
Репутация: 320 ±
Замечаний: 0% ±

Excel 2010
Максимальное количество итераций равно количеству скважин.
Как автоматизировать, пока не знаю.
Поясняю принцип: при каждой следующей итерации, меняем одну скважину из предыдущей (например: 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 Не понял, зачем нужны координаты скважин.
К сообщению приложен файл: 2010360.xls (54.5 Kb)


QIWI 9173973973

Сообщение отредактировал Russel - Суббота, 31.05.2014, 10:52
 
Ответить
СообщениеМаксимальное количество итераций равно количеству скважин.
Как автоматизировать, пока не знаю.
Поясняю принцип: при каждой следующей итерации, меняем одну скважину из предыдущей (например: 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
Дата добавления - 31.05.2014 в 10:51
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Алгоритм нахождения максимальной суммы. (не брутфорс) (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!