2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 00:41 


02/04/13
294
Прошу подсказать как решается данная задача.
Допустим, имеется большая куча песка массы $M$. Имеется совок, который всегда зачерпывает песка массы $m$. Причем, $M=m\cdot k$, где $k \in \mathbb{N}$.
Необходимо, зачерпывая совком песок из большой кучи, насыпать $N$ куч массами $M_1, M_2, ..., M_N$. Совсем необязательно, чтобы $M_i$ было кратно $m$.
При этом требуется, чтобы в изначальной куче песка не осталось. То есть мы изначально целимся в значения масс $M_i$, но если у нас в первоначальной куче остался песок, то мы вынуждены его перераспределять между новыми кучками.
Пусть, в итоге мы получили кучи с массами $M_{fact\;i} : k_1\cdot m, k_2\cdot m, ... , k_N\cdot m$.
Из скольки совков должна состоять каждая куча, чтобы ряд чисел $\frac{M_1}{k_1}, \frac{M_2}{k_2}, ..., \frac{M_N}{k_N}$ имел максимальную кучность (минимальную дисперсию?)?
Не могу причесть данную задачу ни под одну из известных. Первая мысль была о задаче о плотнейшей упаковке, но тут нет отграничения по массе для каждой кучки.
Прошу пинка в нужном направлении.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 00:59 
Аватара пользователя


07/01/16
1612
Аязьма
Видимо, предполагается, что $N\leqslant k$, иначе хотя бы в одной куче песка не будет и вопрос лишен смысла. А про сумму масс $M_1,M_2,\ldots, M_N$ что-то известно? Что она $\leqslant M$, например?

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 01:12 
Заслуженный участник


20/08/14
11867
Россия, Москва
Можно на каждом шаге считать возможное уменьшение дисперсии и класть песок в ту кучку, дисперсия после добавления $m$ в которую уменьшится сильнее всех. Если таковых несколько, то в любую.
Тут не требуется условие достаточности песка в исходной куче.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 01:23 


02/04/13
294
waxtep в сообщении #1540301 писал(а):
Видимо, предполагается, что $N\leqslant k$

Да.
waxtep в сообщении #1540301 писал(а):
А про сумму масс $M_1,M_2,\ldots, M_N$ что-то известно? Что она $\leqslant M$, например?

В общем случае сумма целевых масс кучек может быть как больше $M$, так и меньше.

-- 24.11.2021, 03:28 --

Dmitriy40 в сообщении #1540305 писал(а):
Можно на каждом шаге считать возможное уменьшение дисперсии и класть песок в ту кучку, дисперсия после добавления $m$ в которую уменьшится сильнее всех. Если таковых несколько, то в любую.
Тут не требуется условие достаточности песка в исходной куче.

Да, идея на поверхности, но я как-то не вижу, что данный алгоритм должен вывести на глобальный минимум дисперсии.
Более того, в самом начале дисперсия будет расти.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 02:24 
Заслуженный участник


20/08/14
11867
Россия, Москва
melnikoff в сообщении #1540307 писал(а):
Более того, в самом начале дисперсия будет расти.
Почему? Ведь под дисперсией Вы понимаете разброс отклонений от целевой массы каждой кучки, а эти отклонения на каждом шаге могут лишь уменьшаться.
Расти дисперсия могла бы лишь если какое-то $M_i<m/2$, т.е. даже первый раз не сыпанёшь. Но даже это алгоритму не мешает, он в такую просто и не будет сыпать.

Вот насчёт глобальности да, не уверен.

Можно пойти и с конца: минимально возможная дисперсия легко считается (округляем все $M_i/m$ к ближайшим целым $k_i$ и считаем дисперсию), пока требуемое количество песка $m \sum k_i \ne M$ повторяем: если $M$ меньше, то вычитаем $1$ из $k_i$ с наименьшей дисперсией, если $M$ больше, то прибавляем $1$ к $k_i$ с наименьшей дисперсией.

PS. Кстати ради упрощения можно сразу было взять $m \equiv 1$ и тогда $M$ и все $k$ станут просто неотрицательными целыми.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 03:18 
Аватара пользователя


07/01/16
1612
Аязьма
То есть, кабы $k_i$ не были обязаны быть натуральными, мы бы взяли $k_i=k\dfrac{M_i}{\sum{M_i}}$ и в ус не дули - дисперсия требуемой величины нулевая. Я бы в качестве первого приближения взял эти величины округленные к ближайшему целому (или к единице, если ближайшее ноль) и повычитал из наиболее крупных $k_i$ избыток $\sum{k_i}$ над $k$ в какой-нибудь осмысленной пропорции; затем понадеялся на близость этого приближения к глобальному минимуму и положился на библиотечные функции поиска минимума локального

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 12:40 


02/04/13
294
waxtep в сообщении #1540311 писал(а):
То есть, кабы $k_i$ не были обязаны быть натуральными, мы бы взяли $k_i=k\dfrac{M_i}{\sum{M_i}}$

Это, к сожалению, невозможно, так как в реальности совки - это сотрудники, и объем совка - усредненная производительность сотрудника.

-- 24.11.2021, 15:01 --

Dmitriy40 в сообщении #1540310 писал(а):
melnikoff в сообщении #1540307 писал(а):
Более того, в самом начале дисперсия будет расти.
Почему? Ведь под дисперсией Вы понимаете разброс отклонений от целевой массы каждой кучки, а эти отклонения на каждом шаге могут лишь уменьшаться.

Я понимаю под дисперсией ряда чисел именно обычную дисперсию - стандартное отклонение от среднего значения этого же ряда в квадрате. То есть мне важна кучность именно ряда чисел $\frac{M_i}{k_i}$, а не $|M_i - M_{fact \; i}|$.

Dmitriy40 в сообщении #1540310 писал(а):
Расти дисперсия могла бы лишь если какое-то $M_i<m/2$, т.е. даже первый раз не сыпанёшь.

А представьте, что $M >> \sum\limits_{i}M_i$. Тогда мы будем вынуждены отсыпать как минимум 1 совок в каждую кучку.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 14:06 
Аватара пользователя


07/01/16
1612
Аязьма
melnikoff в сообщении #1540336 писал(а):
waxtep в сообщении #1540311 писал(а):
То есть, кабы $k_i$ не были обязаны быть натуральными, мы бы взяли $k_i=k\dfrac{M_i}{\sum{M_i}}$

Это, к сожалению, невозможно, так как в реальности совки - это сотрудники, и объем совка - усредненная производительность сотрудника.
Давайте на примере покажу, что предлагаю, видимо выражаюсь недостаточно ясно. Пусть $M=10$ совков песка требуется разложить на кучки по $(1,10,100)$ совков (раз мы заговорили о производстве, видимо типичной будет ситуация $\sum{M_i}>M$). Понятно, что из $10$ совков $111$ не выйдет, поэтому речь о разбиении $10$ на сумму трех натуральных чисел в пропорции максимально напоминающей $1:10:100$ (в смысле поставленной вами задачи минимизации дисперсии величин $M_i/k_i$):

Нулевое приближение для $k_i$ (не соблюдается условие натуральности): $10/111,100/111,1000/111$
Первое приближение (округление к ближайшему натуральному): $1,1,9$
Второе приближение (приведение $\sum{k_i}$ к $k$): $1,1,8$
В этом примере просто нет других вариантов, но в общем случае надо изобрести какую-то правдоподобную эвристику избавления от избытка либо недостатка в $\sum{k_i}$ вызванного округлением.
Третье приближение (в идеале точное решение): запуск алгоритма поиска локального минимума, стартуя со второго приближения; в данном примере не требуется, в силу его простоты.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 15:23 
Заслуженный участник


20/08/14
11867
Россия, Москва
melnikoff в сообщении #1540336 писал(а):
То есть мне важна кучность именно ряда чисел $\frac{M_i}{k_i}$, а не $|M_i - M_{fact \; i}|$.
Простите, но как Вы тогда считаете дисперсию при любом $k_i=0$? Я этот момент обошёл вниманием, но раз Вы про увеличение дисперсии на первых шагах, то он важен.
melnikoff в сообщении #1540336 писал(а):
А представьте, что $M >> \sum\limits_{i}M_i$. Тогда мы будем вынуждены отсыпать как минимум 1 совок в каждую кучку.
По моему не обязательно, это зависит от соотношения $M_i$ между собой, если некоторые из них достаточно намного меньше остальных, то для них выгоднее $k_i=0$. Вот скажем для примера waxtep с 1:10:100 разве $k_1$ не лучше сделать $0$ вместо $1$, ведь $10/111$ ближе к нулю чем к единице и ноль даст меньший вклад в дисперсию?

waxtep
Согласен с Вашим пониманием и примером, только видимо нулевые $k_$ (пустые кучки) тоже допустимы. Добавлю для melnikoff: это ровно описанный мною подход с конца, причём ранее я сразу и эвристику выбора кучки привёл (считаем что получится при изменении данной кучки и выбираем самую подходящую). В принципе для каждой кучки дисперсию можно не пересчитывать, ведь понятно же что сумма квадратов при увеличении выражения под квадратом может лишь расти и соответственно можно искать минимальный прирост квадрата разности, что позволяет сразу выразить условие выбора кучки через $M_i, k_i$ (всё равно их отношение сравнивается с константой $m$). И кстати там модуля уже не будет, будет два варианта выражения, для уменьшения $k_i$ и для увеличения.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 17:09 
Аватара пользователя


07/01/16
1612
Аязьма
Dmitriy40 в сообщении #1540353 писал(а):
Согласен с Вашим пониманием и примером, только видимо нулевые $k_$ (пустые кучки) тоже допустимы.
Тогда ведь на ноль делить придется, и соответствующая $M_i/k_i$ ускачет в небеса. Если я правильно понял, поставленная ТС задача на самом деле является подзадачей более глобального вопроса планирования ресурсов и сроков: сначала распределили ресурсы по работам квази-оптимальным образом (отсюда несколько необычное требование минимизировать дисперсию именно $M_i/k_i$), потом посчитали срок выполнения плана работ в целом. Может быть, на самом деле, имеет смысл по-другому выделить подзадачу, ну тут зависит от физического смысла того, что нужно ТС в итоге.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 17:35 
Заслуженный участник


20/08/14
11867
Россия, Москва
waxtep в сообщении #1540373 писал(а):
Тогда ведь на ноль делить придется, и соответствующая $M_i/k_i$ ускачет в небеса.
Я понимаю, но это проблема ТС, что он вот так определил дисперсию. Можно переформулировать по другому и бесконечности уйдут, например просто доопределить $M_i/k_i\equiv0$ при $k_i =0$ (доопределить $x/0\equiv0$). Это вполне физично: если работник страшно медлителен, то выгоднее оставить его сачковать отдыхать чем поручать работу.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 18:29 
Аватара пользователя


07/01/16
1612
Аязьма
Dmitriy40 в сообщении #1540379 писал(а):
Это вполне физично: если работник страшно медлителен, то выгоднее оставить его сачковать отдыхать чем поручать работу.
А, ну я немного по-другому смысл величин истолковал: $M_i$ - объем работ одной из $N$ выполняемых параллельно задач, $M$ - общий ресурсный пул, $k_i$ - выделяемый на $i$-ую задачу ресурс. Тогда $M_i/k_i$ по смыслу - календарная длительность выполнения $i$-ой задачи, ну и желательно чтобы эти длительности кучно легли, давая оптимальное время реализации всех $N$ задач плана работ в совокупности. Кстати, в таком разрезе можно переформулировать задачу как минимаксную - на самое короткое время выполнения наиболее долгой из задач (поможет ли это чем-то, я не знаю).

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение24.11.2021, 19:46 
Заслуженный участник


20/08/14
11867
Россия, Москва
waxtep в сообщении #1540396 писал(а):
А, ну я немного по-другому смысл величин истолковал:
По моему в общем аналогично. И требование $k_i>0$ у Вас записано в требовании выполнения всех $N$ задач. А вдруг какие-то можно и проигнорировать? ;-) Тут только исходная задача может дать ответ, можно или нет.
waxtep в сообщении #1540396 писал(а):
Тогда $M_i/k_i$ по смыслу - календарная длительность выполнения $i$-ой задачи, ну и желательно чтобы эти длительности кучно легли, давая оптимальное время реализации всех $N$ задач плана работ в совокупности.
А вот тут (логическая) ошибка: оптимальное по дисперсии время будет меньше минимально необходимого. Потому что дисперсия позволяет выбросы (длительности $i$-ой задачи) и вверх от среднего ($m$), а минимально необходимое время лишь вниз, оно же считается как максимум всех времён, а не среднее их же. Вы же сами дальше так и пишете про минимакс. Именно поэтому я не стал упоминать минимакс, не знаю как переформулировать чтобы в нём разрешились выбросы вверх (выше минимизируемого максимума, что бы это ни значило). Понятно что можно условием минимакса назначить не длительности, а их дисперсию, но это получается тавтология, оно и так уже есть в исходном условии.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение25.11.2021, 00:56 


02/04/13
294
waxtep в сообщении #1540373 писал(а):
Тогда ведь на ноль делить придется, и соответствующая $M_i/k_i$ ускачет в небеса. Если я правильно понял, поставленная ТС задача на самом деле является подзадачей более глобального вопроса планирования ресурсов и сроков: сначала распределили ресурсы по работам квази-оптимальным образом (отсюда несколько необычное требование минимизировать дисперсию именно $M_i/k_i$), потом посчитали срок выполнения плана работ в целом. Может быть, на самом деле, имеет смысл по-другому выделить подзадачу, ну тут зависит от физического смысла того, что нужно ТС в итоге.

Приведу условие изначальной задачи (мне кажется, так будет более понятно), которую я переформулировал в терминах кучек.
Имеется $N$ цехов одного профиля и $k$ рабочих. Каждый рабочий может выполнять усредненный объем работы в день $m$, но может выполнять и больше, если не хватает персонала. Тогда избыток работы в цеху перераспределяется на всех рабочих в равных долях.
В каждом цеху ежедневно нужно выполнять соответствующий объем работы: $M_1, M_2, ..., M_N$.
Задача состоит в том, чтобы перераспределить всех рабочих по всем цехам так, чтобы все $k$ рабочих имели по возможности равную (близкую) нагрузку.
Другими словами, нужно минимизировать дисперсию последовательности значений нагрузок для всех рабочих. Кстати, выше я, видимо, ошибочно говорил о минимизации дисперсии значений не для сотрудников ($k$ значений), а для цехов ($N$ значений).
Ещё вижу, что параметр $m$ не нужен для решения, хотя ожидается, что среднее значение для нагрузки будет близко к $m$.

(Оффтоп)

Завтра отвечу на последние сообщения. Сегодня уже вырубает.

 Профиль  
                  
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение25.11.2021, 02:00 
Заслуженный участник


20/08/14
11867
Россия, Москва
melnikoff в сообщении #1540449 писал(а):
Имеется $N$ цехов одного профиля и $k$ рабочих. Каждый рабочий может выполнять усредненный объем работы в день $m$, но может выполнять и больше, если не хватает персонала. Тогда избыток работы в цеху перераспределяется на всех рабочих в равных долях.
В каждом цеху ежедневно нужно выполнять соответствующий объем работы: $M_1, M_2, ..., M_N$.
Задача состоит в том, чтобы перераспределить всех рабочих по всем цехам так, чтобы все $k$ рабочих имели по возможности равную (близкую) нагрузку.
Позволю себе дополнить неуказанные условия: $\sum\limits_i^N k_i = k > N;\; k_i>0;\; i=1\ldots N;\; k,k_i,N\in\mathbb{N}$ ($k_i$ - количество рабочих в цеху $i$). В принципе задача поменялась несущественно. waxtep, Вы были правы, $k_i=0$ недопустимо.

При $k<N$ решений очевидно нет. При $k=N$ решение тривиально: все $k_i=1$.
При $k>N$ для точного решения нужен перебор, предложенные выше методы (которые вполне рабочие) глобального оптимума могут и не найти.
$m$ да, излишне, если только нет условия не перегружать рабочих слишком сильно, вот тогда "слишком сильно" и будет функцией от $m$. И некоторые решения исчезнут (например банальные $\sum\limits_i^N M_i > k f(m)$, но не только они).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group