Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распределить нагрузку, рабочий<->>заявка<<->клиент 
V
    Опции темы
tishaishii
Дата 31.3.2010, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Рабочие R(ID_R IDENTITY) выполняют заявки на обслуживание Z(ID_Z IDENTITY, ID_K, ID_R), поступающие от клиентов K(ID_K).
Кажется, так: R<->>Z<<->K.

Необходимо распределить заявки Z между рабочими R, так чтобы все заявки каждого клиента K выполнял только один рабочий и количество заявок у каждого рабочего оказалась бы максимально одинаковым.

"Максимально одинаковое количество заявок" - имею в виду ситуацию, когда разница между количеством заявок любых двух работников была бы минимальна.
PM MAIL ICQ Skype   Вверх
Akina
Дата 31.3.2010, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



А почему эту задачу надо решать именно на SQL? 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
tishaishii
Дата 31.3.2010, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Речь идёт о больших массивах данных. Немало информации ждёт обработки уже сейчас. У меня прямой перебор для такой задачи не пошёл: тормозит очень.
А "нужно" или "не нужно" - жду предложений по реализации.
PM MAIL ICQ Skype   Вверх
Akina
Дата 31.3.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Ну давай изобретать "кривой перебор". Само собой, раз нужна скорость, то оптимум не гарантируем.

У нас есть (в таблицах, и с соотв. индексами): 
список работников и текущее количество работ у каждого из них
список клиентов и количество заявок от каждого из них

Считается, что нет клиентов, часть заявок которых уже распределена - иначе нераспределённые заявки клиента распределяем тому, у кого уже есть заявки от этого клиента.

1) Считаем общее количество заявок (распределённых - у работников, нераспределённых - у клиентов), делим на количество работников. Получаем оптимум. Если уже есть работники, у кого заявок больше оптимума - отбрасываем их, они больше не участвуют в дальнейших расчётах, и повторяем расчёт оптимума.
2) Далее - берём клиента с наибольшим количеством заявок. Отдаём его тому работнику, у которого сумма уже имеющихся заявок плюс эти наиболее близка к оптимуму. Если клиенты кончились - завершаем работу, иначе если у этого работника получается заявок равно или больше оптимума - исключаем его из дальнейшего рассмотрения и идём на шаг 1, иначе на шаг 2.

PS. Реализация этого барахла в рамках SQL мне кажется не очень разумной. Я бы вытащил это всё на клиента, обработал и в ходе обработки клал результаты расчёта во временную таблицу, которую использовал бы для апдейта основной одним запросом. Единственный минус при этом - начальный трафик.

Это сообщение отредактировал(а) Akina - 31.3.2010, 18:01


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
tishaishii
Дата 3.4.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Такой вариант возможен. Единственное что смущает, - изначальное исключение рабочих, у которых заявок выше крыши (к примеру, у одного 1 заявка, а у другого - 1e6, а средняя температура по больнице - 36,6 гр. Ц.). Пусть бы уж поделились с кем-то своим счастьем, а то по этому алгоритму при очередном выяснении "оптимума" этот "оптимум" стремится к нулю и каждый последующий рабочий не может получить заявок больше, чем предыдущий. Ещё в задаче смущают случаи, когда у одного клиента может быть всего одна заявка, а у другого - 1e6... Вобщем, пока к окончательному решению не пришёл.

Это сообщение отредактировал(а) tishaishii - 3.4.2010, 10:22
PM MAIL ICQ Skype   Вверх
Akina
Дата 3.4.2010, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(tishaishii @  3.4.2010,  11:20 Найти цитируемый пост)
Пусть бы уж поделились с кем-то своим счастьем

Извини, задачи перераспределения ранее распределённых заявок не ставилось.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
tishaishii
Дата 6.4.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Да хотя бы задача наиболее "справедливого" (равного) распределения заявок между рабочими с учётом того, что каждого клиента обслуживает только один рабочий.
PM MAIL ICQ Skype   Вверх
Fortop
Дата 6.4.2010, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 2
Всего: 42



Задача любопытная, но

Цитата(tishaishii @  6.4.2010,  12:10 Найти цитируемый пост)
наиболее "справедливого" (равного) распределения заявок между рабочими с учётом того, что каждого клиента обслуживает только один рабочий. 

Как между собой вяжутся эти две вещи?
Цитата(tishaishii @  3.4.2010,  10:20 Найти цитируемый пост)
у одного клиента может быть всего одна заявка, а у другого - 1e6





--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
tishaishii
Дата 7.4.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



А такая, что такое тоже может быть.
PM MAIL ICQ Skype   Вверх
Fortop
Дата 7.4.2010, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 2
Всего: 42



tishaishii, моя логика пасует тут :(
10 заявок в день, 1е6 это 100к дней. Мы столько не живем.

Более того, как собирается обеспечивать "максимальную равность", если один клиент может иметь более половины заявок в системе?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
tishaishii
Дата 9.4.2010, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Да даже одна заявка к десяти (кому охота делать в 10 раз больше).
Дело в равном распределении заявок.
PM MAIL ICQ Skype   Вверх
Akina
Дата 9.4.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Независимо ни отчего поиск наиболее справедливого распределения (вернее его точного решения) мне представляется задачей полного перебора... а потому уход от него всегда даёт вероятность нахождения неоптимального решения. В этом случае обычный жадный алгоритм вполне подойдёт.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
tishaishii
Дата 11.4.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Да, Akina, пока я пришёл к тому, что согласен с твоим алгоритмом.
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0829 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.