01.03.2013 19:05 Дата регистрации: 12 лет назад Посты: 5 | Сумма с минимальным отклонением от среднего значения Друзья очень нужна помощь. Задача кажется непостижимой, поэтому никаких формул, собственных решений и начинаний. Есть массив чисел, например (142, 238, 47, 66, 200, 85, 47, 165, 160). Это высоты каких то блоков. Их надо поместить в N колонок. Для примера N=3. Поместить надо таким образом, чтобы разница в высоте относительно средней высоты колонки была минимальная. Под средней высотой понимается сумма всех высот деленная на N, в нашем примере это 1150/3 = 383,333. То есть надо найти три суммы элементов, с минимальным отклонением от 383,333. Заранее спасибо.
|
01.03.2013 20:21 Дата регистрации: 15 лет назад Посты: 3 155 | хм сдается мне, что эта задачка решается только эвристически.
|
01.03.2013 21:52 Дата регистрации: 15 лет назад Посты: 840 | Э-э-э... Цитата zklb (Дмитрий)
сдается мне, что эта задачка решается только эвристически.
Согласитесь, Дмитрий, что "эвристически" и "перебором" это не одно и то же.
|
01.03.2013 23:29 Дата регистрации: 12 лет назад Посты: 5 | хм Я правильно понимаю, что это достаточно сложная задача ?)
|
01.03.2013 23:55 Дата регистрации: 16 лет назад Посты: 2 928 | Уточните постановку Цитата ridzhi
Я правильно понимаю, что это достаточно сложная задача ?)
Мне кажется, что неправильно. Мне кажется, что задача просто не поставлена, т.к. не указано, что именно минимизируется. Начнем: Имеется набор из m чисел (это число задано), нужно расположить их в n колонок (судя по тому, что Вы написали - это число тоже задано). А вот это уже никуда не годится: Цитата
чтобы разница в высоте относительно средней высоты колонки была минимальная
. Согласитесь, что найти Цитата
три суммы элементов, с минимальным отклонением от 383,333.
весьма проблематично, ибо суммы эти могут быть и неравными. Если это многокритериальная оптимизация, то при постановке нужно указать иерархию критериев, веса и т.п. Если же это простая оптимизация, то нужно указать критерий: типа минимальной суммы модулей отклонений или их квадратов. Второе легче.
|
02.03.2013 07:42 Дата регистрации: 12 лет назад Посты: 5 | Уточнение Цитата 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 Дата регистрации: 16 лет назад Посты: 2 928 | Учитывая архитектурную интерпретацию могу сказать, что это таки следует решать разумным перебором. Что касается критерия оптимизации, то к минимуму следует устремить сумму модулей отклонений. Хотя можно и сумму квадратов, но в данном случае, боюсь, это не сильно поможет. Разумный перебор - это перебор без повторений, но охватывающий потенциально все варианты. Можно его ускорить, если после построения очередного плана далее уже не рассматривать построения, содержащие большие отклонения.
|
02.03.2013 13:24 Дата регистрации: 15 лет назад Посты: 840 | Да, именно так Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.
|
02.03.2013 17:42 Дата регистрации: 15 лет назад Посты: 3 155 | хм Цитата vpro
Разумный перебор с отсечением заведомо негодных ветвей перебора называется методом ветвей и границ. Им и нужно воспользоваться. Думаю, что если исходное множество не превосходит нескольких сотен элементов, то такой перебор вполне реален.
я буквально вчера преподавал метод ветвей и границ. правда для задач целочисленного линейного программирования. эта задача другого рода. и отсечение плохих вариантов надо делать на основании эвристик. у разумовского в "дискретном анализе" кажется была подобная задача.
|
02.03.2013 18:51 Дата регистрации: 16 лет назад Посты: 579 | а можно человеку от сохи? Прощеньица просим,конешно. Из голой практики очевидно,что мелочью довести проще Поэтому 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 Дата регистрации: 12 лет назад Посты: 5 | Спасибо Друзья, спасибо всем большое за отклик, буду что то пробовать.
|
02.03.2013 21:59 Дата регистрации: 15 лет назад Посты: 840 | "Сейчас мы пойдем простым логическим путем... Сегодня в бане мы пили за кого? За Лукашина..." (с) Цитата 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 Дата регистрации: 12 лет назад Посты: 5 | Для меня это было очень личным.....(С) Заложница. |
03.03.2013 00:00 Дата регистрации: 12 лет назад Посты: 1 972 | brimal, Вы описали эвристический алгоритм или точный? Что-то не хочется разбираться. Если "башен" достаточно много, последовательное улучшение может стать либо очень запутанным, либо неполным (дает только приближенное решение). Кстати, в задачах комбинаторной оптимизации часто не обязательно искать точное решение. Оно "дорогое" по времени. дважды два - не всегда 5
|
03.03.2013 00:16 Дата регистрации: 16 лет назад Посты: 579 | я же сказал:от сохи Примерно по этому алгоритму делают подбор все профессионалы-рабочие (плиточники и т.д.) А уж в терминологии сами разбирайтесь. Не думаю, что есть более эффективные. Другое дело,как я переложил народное творчество на вашу партитуру. Но основную идею (от крупного к мелкому) передал верно. Запутаться это вряд ли. Идешь сверху вниз (от крупного к мелкому) и помнишь только заданный размер (здесь среднее значение). Единственное принципиальное отличие,что этапе строительства на практике наличие в итоге нераспределнного остатка не грех. Главное попасть в размер. Он может быть использован на этапе подгонки,но всегда есть. Здесь иначе. Все задействовано. Впрочем из за того,что размер среднее,существование остатка кажется невозможно. Редактировалось 4 раз(а). Последний 03.03.2013 09:10.
|
03.03.2013 13:29 Дата регистрации: 15 лет назад Посты: 3 155 | хм Цитата 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 Дата регистрации: 15 лет назад Посты: 840 | ... Цитата zklb (Дмитрий) вы, наверное, смеетесь?
Что Вы, я абсолютно серьезен. Цитата zklb (Дмитрий)
то что у вас предложено - это детский лепет, очевидный любому.
Я тоже так считаю. Вообще вся математика - это очевидная тавтология для тех кто понимает. Цитата zklb (Дмитрий)
эвристики тут нет но и нет заметного улучшения. ну будет 10^10 вместо 10^18 - толку то?
Толк в том, что $10^{10}$ вариантов влезут в память средненького компьютера. А $10^{18}$ уже нет. А если мы в качестве первоначального варианта для сравнения выберем сразу какой-нибудь вариант, близкий к оптимальному, то практически все ветви перебора будут отсекаться, не доходя до конца. И количество операций уменьшиться весьма значительно. Но это тоже, конечно, очевидное соображение, "детский лепет". Редактировалось 1 раз(а). Последний 03.03.2013 13:47.
|