2014 dxdy logo

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

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


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


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



Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Перераспределить кучу на кучки с min дисперсией
Сообщение25.11.2021, 02:58 
Аватара пользователя


07/01/16
1612
Аязьма
melnikoff в сообщении #1540449 писал(а):
Кстати, выше я, видимо, ошибочно говорил о минимизации дисперсии значений не для сотрудников ($k$ значений), а для цехов ($N$ значений).
Угу. Таким образом, минимизации подлежит следующая величина:$$D=\sum_{i=1}^N{k_i\left(\frac{M_i}{k_i}-\frac{L}k\right)^2}$$где $L=\sum_{i=1}^N{M_i}$ Посмотрим, как изменится величина $D$ при переходе $d$ рабочих из цеха номер $p$ в цех номер $s$, если я нигде не наврал, то $$\Delta D_{p\rightarrow s}(d)=d\left(\frac{M_p^2}{k_p(k_p-d)}-\frac{M_s^2}{k_s(k_s+d)}\right)$$Есть оптимальное значение количества переходящих рабочих (в смысле максимального уменьшения дисперсии при переходе рабочих из цеха $p$ в $s$), снова, если не наврано:$$d_{p\rightarrow s}^{opt}=\frac{k_pM_s-k_sM_p}{M_p+M_s}$$Оно не обязано быть целым и в поисках оптимума имеет смысл проверить округленные в обе стороны значения.
Дальше я бы как-то так действовал:
1. В качестве начального приближения раскидал бы $k$ рабочих по цехам по описанному в предыдущих сообщениях методу;
2. Повычислял бы значений $d_{p\rightarrow s}^{opt}$ и соответствующих $\Delta D_{p\rightarrow s}(d)$ для пар соседних по величине нагрузки $M_i$ цехов (а может быть, для верности, для всех пар цехов; их явно немного, можно себе позволить);
3. Произвел бы перевод рабочих из цеха в цех, начиная с самых больших по модулю $d_{p\rightarrow s}^{opt}$ и контролируя, что один и тот же цех не подвергается миграции более одного раза;
4. Верил бы, что процесс сойдется к глобальному минимуму $D$ и возвращался на шаг 2 до тех пор, пока возможность оптимизации есть; вера-верой, но для избегания бесконечного цикла поставил бы максимально допустимое количество возвращений на шаг 2;
5. Отлаживал бы алгоритм на каверзных примерах и размышлял как его улучшить.

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


20/08/14
11867
Россия, Москва

(Оффтоп)

Хотел я предложить аналогичное (только почти без формул): отсортировать массив цехов по величине нагрузки $M_i/k_i$, пытаться перевести одного рабочего из $\min$ (начала массива) в $\max$ (конец массива) если это уменьшает дисперсию, с пересортировкой массива (она оптимизируется, ведь переставляется всего два элемента) и повтором пока находится хотя бы один возможный перевод. Требованием уменьшения дисперсии на каждом шаге исключаем зацикливание и хождение по кругу перестановок. Но пока писал понял что сильнее уменьшить дисперсию может перевод $\neg\min\to\max$ (не из минимума), или $\min\to\neg\max$, или даже $\neg\min\to\neg\max$. Т.е. перебор всех пар в поисках наибольшего уменьшения дисперсии. Но пока писал это, дошло что любой такой перевод меняет картину/множество допустимых (по условию максимального уменьшения дисперсии) переводов и значит глобальный оптимум может и не найтись. А это снова полный перебор. Ну и всё стёр.

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


02/04/13
294
waxtep, Dmitriy40, спасибо! Очень помогли.
waxtep, выкладки верные, перепроверил.
Поэкспериментировал с различной инициализацией алгоритма. Независимо от первоначальной рассадки рабочих по цехам в итоге алгоритм сходится к одному значению $D$. При этом, если инициализировать алгоритм рассадкой
$$
k_i=\begin{cases}
round\left(k\dfrac{M_i}{\sum{M_i}}\right)&\text{, если $round\left(k\dfrac{M_i}{\sum{M_i}}\right)>0$;}\\
1&\text{, если $round\left(k\dfrac{M_i}{\sum{M_i}}\right)=0$.}\\
\end{cases}
$$
с последующим дораспределением оставшихся и подрезанием лишних, чтобы $\sum{k_i}=k$, алгоритм сходится всего за одну-две итерации (в одной итерации происходит пересадка рабочих между парами цехов, при этом каждый цех участвует в пересадке не более 1 раза).
Доказать, что значение $D$, которому сходится алгоритм, является глобальным минимумом, у меня пока не получилось.
В общем, с практической точки зрения, задача решена.

Теперь меня волнует другой вопрос.
К какому классу задач можно отнести эту задачу? Вряд ли она является новой.

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


20/08/14
11867
Россия, Москва

(Оффтоп)

Запись системы можно упростить до $k_i=\max \left(1, \left\lfloor k\dfrac{M_i}{\sum M_i} \right\rceil \right)$, где $\lfloor\ldots\rceil$ обозначено округление к ближайшему $\operatorname{round}(\ldots)$.
По моему это одна из модификаций задачи о рюкзаке.

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

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



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

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


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

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