Сумма с минимальным отклонением от среднего значения

Автор темы ridzhi 
ОбъявленияПоследний пост
ОбъявлениеПравила и принципы форума «Высшая математика»28.10.2009 15:17
ОбъявлениеОткрыта свободная публикация вакансий для математиков26.09.2019 16:34
ОбъявлениеКниги по математике и экономике в добрые руки!10.08.2023 09:45
01.03.2013 19:05
Сумма с минимальным отклонением от среднего значения
Друзья очень нужна помощь. Задача кажется непостижимой, поэтому никаких формул, собственных решений и начинаний.
Есть массив чисел, например (142, 238, 47, 66, 200, 85, 47, 165, 160). Это высоты каких то блоков. Их надо поместить в N колонок. Для примера N=3.
Поместить надо таким образом, чтобы разница в высоте относительно средней высоты колонки была минимальная. Под средней высотой понимается сумма всех высот деленная на N,
в нашем примере это 1150/3 = 383,333. То есть надо найти три суммы элементов, с минимальным отклонением от 383,333.
Заранее спасибо.
01.03.2013 20:21
хм
сдается мне, что эта задачка решается только эвристически.
01.03.2013 21:52
Э-э-э...
Цитата
zklb (Дмитрий)
сдается мне, что эта задачка решается только эвристически.
Согласитесь, Дмитрий, что "эвристически" и "перебором" это не одно и то же.
01.03.2013 23:29
хм
Я правильно понимаю, что это достаточно сложная задача ?)
01.03.2013 23:55
Уточните постановку
Цитата
ridzhi
Я правильно понимаю, что это достаточно сложная задача ?)
Мне кажется, что неправильно. Мне кажется, что задача просто не поставлена, т.к. не указано, что именно минимизируется.
Начнем:
Имеется набор из m чисел (это число задано), нужно расположить их в n колонок (судя по тому, что Вы написали - это число тоже задано).
А вот это уже никуда не годится:
Цитата

чтобы разница в высоте относительно средней высоты колонки была минимальная
. Согласитесь, что найти
Цитата

три суммы элементов, с минимальным отклонением от 383,333.
весьма проблематично, ибо суммы эти могут быть и неравными. Если это многокритериальная оптимизация, то при постановке нужно указать иерархию критериев, веса и т.п.
Если же это простая оптимизация, то нужно указать критерий: типа минимальной суммы модулей отклонений или их квадратов. Второе легче.
02.03.2013 07:42
Уточнение
Цитата
museum
Цитата
ridzhi
Я правильно понимаю, что это достаточно сложная задача ?)
Мне кажется, что неправильно. Мне кажется, что задача просто не поставлена, т.к. не указано, что именно минимизируется.
Начнем:
Имеется набор из m чисел (это число задано), нужно расположить их в n колонок (судя по тому, что Вы написали - это число тоже задано).
А вот это уже никуда не годится:
Цитата

чтобы разница в высоте относительно средней высоты колонки была минимальная
. Согласитесь, что найти
Цитата

три суммы элементов, с минимальным отклонением от 383,333.
весьма проблематично, ибо суммы эти могут быть и неравными. Если это многокритериальная оптимизация, то при постановке нужно указать иерархию критериев, веса и т.п.
Если же это простая оптимизация, то нужно указать критерий: типа минимальной суммы модулей отклонений или их квадратов. Второе легче.
Я не указал в задаче что суммы должны быть равными, сочетание сумм должно быть с минимально возможным отклонением. Впрочем давайте на примере и чуть более подробно.

(142, 238, 47, 66, 200, 85, 47, 165, 160) - Числа в массиве, это строительные блоки(этажи). Из них надо построить 3 дома таким образом, чтобы линия их крыш была максимально ровной.
Очевидно, что максимально ровная линия крыш будет при одинаковой высоте трех домов. Наши строительные блоки(этажи) имеют общую высоту 1150. Соответственно одинаковая высота для трех домов
будет 1150/3 = 383,333. Таким образом задача состоит в том, чтобы найти три сочетания блоков для наших трех домов, которые будут давать максимально ровную линию крыш.

Методом подбора я нашел такой вариант:
[142, 238] - высота 380, отклонение от средней высоты 383,333 - 380 = 3,333
[47, 200, 85, 47] - высота 379, отклонение от средней высоты 383,333 - 379 = 4,333
[66, 165, 160] - высота 391, отклонение от средней высоты 383,333 - 391 = -7,667

Этот вариант имеет масимальное отклонение от идеально ровной линии 7,667.

Так вот, я хочу понять возможен ли здесь четкий алгоритм/формула для нахождения сочетания блоков с минимально-возможным отклонением. Разумеется количество строительных блоков, их высота, количество домов могут быть разными.
02.03.2013 11:49
Учитывая архитектурную интерпретацию
могу сказать, что это таки следует решать разумным перебором. Что касается критерия оптимизации, то к минимуму следует устремить сумму модулей отклонений. Хотя можно и сумму квадратов, но в данном случае, боюсь, это не сильно поможет. Разумный перебор - это перебор без повторений, но охватывающий потенциально все варианты. Можно его ускорить, если после построения очередного плана далее уже не рассматривать построения, содержащие большие отклонения.
02.03.2013 13:24
Да, именно так
Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.
02.03.2013 17:42
хм
Цитата
vpro
Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.

я буквально вчера преподавал метод ветвей и границ. правда для задач целочисленного линейного программирования. эта задача другого рода. и отсечение плохих вариантов надо делать на основании эвристик. у разумовского в "дискретном анализе" кажется была подобная задача.
02.03.2013 18:51
а можно человеку от сохи?
Прощеньица просим,конешно. Из голой практики очевидно,что мелочью довести проще
Поэтому
0. Определяем среднее
1."строительство"
-ранжируем по величине
238
200
165
160
142
85
66
47
47

-Для самого большого подбираем большой ближе всего к среднему
200
142
-повторяем для оставшейся выборки для 200
просматривая сверху вниз. Подбор идет до превышения. Если слишком велико,то повторяем подбор начиная со следущего (можно сравниваем два подбора,начиная со следущего и начиная через один) Получаем
200
85
47
47
-и наконец из оставшихся
165
160
66
По идее должна быть вторая стадия "Подгонка", когда два наиболее разных пытаемся за счет взаимного обмена мелочью получить более равное.
Если в результате Строительства остается 1,2 неприкаенных начинаем сначала,меняя среднее, которому стремимся. После Строительства ничего не должно остаться.
Извинениьца просим,что влез.
Да. При подгонке начинаем с конца. Больший с конца бОльшего пытаемся менять с меньшим с конца мЕньшего
Теперь вроде все верно.



Редактировалось 2 раз(а). Последний 02.03.2013 19:03.
02.03.2013 19:16
Спасибо
Друзья, спасибо всем большое за отклик, буду что то пробовать.
02.03.2013 21:59
"Сейчас мы пойдем простым логическим путем... Сегодня в бане мы пили за кого? За Лукашина..." (с)
Цитата
zklb (Дмитрий)
Цитата
vpro
Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.

я буквально вчера преподавал метод ветвей и границ. правда для задач целочисленного линейного программирования. эта задача другого рода. и отсечение плохих вариантов надо делать на основании эвристик. у разумовского в "дискретном анализе" кажется была подобная задача.
Пусть мы имеем $N$ чисел $a_i$. Их нужно разбить на $M$ групп так, чтобы суммы чисел $S_k, k=1,...M$ в группах удовлетворяли условию: $\max_k{|S_k-S_0|}\to \min$. Здесь $S_0=\frac1M\sum_{i=1}^N{a_i} $.
Рассмотрим полное дерево вариантов. В вершине дерева - $a_1$. Мы его можем поместить в одну из $M$ групп. Значит, из вершины выходит $M$ ветвей. Из каждой из этих ветвей исходит снова $M$ ветвей - в соответствии с возможным расположением второго числа.... И т. д. для каждого из $N$ чисел. Таким образом, построив дерево, мы получаем $M^N$ возможных вариантов.
Да, многовато...Поэтому начинаем отсекать лишние ветви. Для этого используем совершенно логичные соображения
1) Из соображений симметрии первый элемент достаточно оставить только в первой группе. Остальные $M-1$ вариантов его расположения мы смело можем отбросить. Так ведь? Мы сразу сократили дерево в $M$ раз. Второй элемент может попасть либо в группу к первому, либо в одну из свободных групп, например во вторую. Остальные варианты его размещения ($M-2$) отбрасываем.. И так далее....
2)Когда в первый раз достигаем некоторого варианта размещения (проходим дерево до конца по одному из путей), мы вычисляем показатель качества $F=\max_k{|S_k-S_0|}$. Строя дерево, мы также все время вычисляем накопленные суммы $S_k$ в каждой группе по каждому пути. Как только мы получим, что $|S_k-S_0|\ge F$, ветвь отбрасывается. Достигнув очередного варианта размещения, снова вычисляем $F$ и оставляем меньшее значение из старого и нового.

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

И никакой эвристики
02.03.2013 22:48
Для меня это было очень личным.....(С) Заложница.
Спасибо друг :)
03.03.2013 00:00
brimal,
Вы описали эвристический алгоритм или точный? Что-то не хочется разбираться.
Если "башен" достаточно много, последовательное улучшение может стать либо очень запутанным, либо неполным (дает только приближенное решение). Кстати, в задачах комбинаторной оптимизации часто не обязательно искать точное решение. Оно "дорогое" по времени.

дважды два - не всегда 5
03.03.2013 00:16
я же сказал:от сохи
Примерно по этому алгоритму делают подбор все профессионалы-рабочие (плиточники и т.д.)
А уж в терминологии сами разбирайтесь. Не думаю, что есть более эффективные.
Другое дело,как я переложил народное творчество на вашу партитуру. Но основную идею (от крупного к мелкому) передал верно.
Запутаться это вряд ли. Идешь сверху вниз (от крупного к мелкому) и помнишь только заданный размер (здесь среднее значение).
Единственное принципиальное отличие,что этапе строительства на практике наличие в итоге нераспределнного остатка не грех. Главное попасть
в размер. Он может быть использован на этапе подгонки,но всегда есть. Здесь иначе. Все задействовано. Впрочем из за того,что
размер среднее,существование остатка кажется невозможно.



Редактировалось 4 раз(а). Последний 03.03.2013 09:10.
03.03.2013 13:29
хм
Цитата
vpro
Цитата
zklb (Дмитрий)
Цитата
vpro
Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.

я буквально вчера преподавал метод ветвей и границ. правда для задач целочисленного линейного программирования. эта задача другого рода. и отсечение плохих вариантов надо делать на основании эвристик. у разумовского в "дискретном анализе" кажется была подобная задача.
Пусть мы имеем $N$ чисел $a_i$. Их нужно разбить на $M$ групп так, чтобы суммы чисел $S_k, k=1,...M$ в группах удовлетворяли условию: $\max_k{|S_k-S_0|}\to \min$. Здесь $S_0=\frac1M\sum_{i=1}^N{a_i} $.
Рассмотрим полное дерево вариантов. В вершине дерева - $a_1$. Мы его можем поместить в одну из $M$ групп. Значит, из вершины выходит $M$ ветвей. Из каждой из этих ветвей исходит снова $M$ ветвей - в соответствии с возможным расположением второго числа.... И т. д. для каждого из $N$ чисел. Таким образом, построив дерево, мы получаем $M^N$ возможных вариантов.
Да, многовато...Поэтому начинаем отсекать лишние ветви. Для этого используем совершенно логичные соображения
1) Из соображений симметрии первый элемент достаточно оставить только в первой группе. Остальные $M-1$ вариантов его расположения мы смело можем отбросить. Так ведь? Мы сразу сократили дерево в $M$ раз. Второй элемент может попасть либо в группу к первому, либо в одну из свободных групп, например во вторую. Остальные варианты его размещения ($M-2$) отбрасываем.. И так далее....
2)Когда в первый раз достигаем некоторого варианта размещения (проходим дерево до конца по одному из путей), мы вычисляем показатель качества $F=\max_k{|S_k-S_0|}$. Строя дерево, мы также все время вычисляем накопленные суммы $S_k$ в каждой группе по каждому пути. Как только мы получим, что $|S_k-S_0|\ge F$, ветвь отбрасывается. Достигнув очередного варианта размещения, снова вычисляем $F$ и оставляем меньшее значение из старого и нового.

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

И никакой эвристики

вы, наверное, смеетесь? то что у вас предложено - это детский лепет, очевидный любому. эвристики тут нет но и нет заметного улучшения. ну будет 10^10 вместо 10^18 - толку то?
03.03.2013 13:47
...
Цитата
zklb (Дмитрий)
вы, наверное, смеетесь?
Что Вы, я абсолютно серьезен.
Цитата
zklb (Дмитрий)
то что у вас предложено - это детский лепет, очевидный любому.
Я тоже так считаю. Вообще вся математика - это очевидная тавтология для тех кто понимает.
Цитата
zklb (Дмитрий)
эвристики тут нет но и нет заметного улучшения. ну будет 10^10 вместо 10^18 - толку то?
Толк в том, что $10^{10}$ вариантов влезут в память средненького компьютера. А $10^{18}$ уже нет.
А если мы в качестве первоначального варианта для сравнения выберем сразу какой-нибудь вариант, близкий к оптимальному, то практически все ветви перебора будут отсекаться, не доходя до конца. И количество операций уменьшиться весьма значительно. Но это тоже, конечно, очевидное соображение, "детский лепет".



Редактировалось 1 раз(а). Последний 03.03.2013 13:47.
Извините, только зарегистрированные пользователи могут публиковать сообщения в этом форуме.

Кликните здесь, чтобы войти