|
Очередь с весовыми коэффициентами | ☑ | ||
---|---|---|---|---|
0
servs
30.01.14
✎
13:16
|
Добрый день!
Есть регистр сведений, в котором активные менеджеры. В базе есть константа, которая хранит последнего получившего заказ менеджера. При поступлении нового заказа, список активных менеджеров сортируется по алфавиту, далее находим последнего получившего заказ, и следующий после него - тот кто получит текущий заказ. Теперь вопрос, нужно ввести некие коэффициенты. И переделать как-то алгоритм. У тех менеджеров, где коэффициент больше - частота получения заказа выше. Как реализовать? |
|||
1
Ненавижу 1С
гуру
30.01.14
✎
13:18
|
генератор случайных чисел используй, если число вне диапозона, то переходишь к следующему менеджеру
|
|||
2
fmrlex
30.01.14
✎
13:19
|
(0) Сначала "Теперь вопрос, нужно ввести некие коэффициенты"
|
|||
3
Ненавижу 1С
гуру
30.01.14
✎
13:19
|
||||
4
servs
30.01.14
✎
13:25
|
(2) у меня логика такая)
(1), (3) спасибо, пригодится |
|||
5
Torquader
30.01.14
✎
13:28
|
Во-первых, нужно учитывать время освобождения менеджера, то есть первый, кто освободился, по идее, и должен получать заказ, так как это заставит их более быстро работать.
Во-вторых, если следует ввести пропорцию по количеству уже полученных заказов, чтобы кто-то не остался вообще без всего. В идеале, мы пишем функцию, которая в параметрах получает данные менеджера, время освобождения, количество заказов и т.п. Далее, мы выбираем максимум этой функции на множестве доступных менеджеров - он-то и будет получающим следующий заказ. |
|||
6
dk
30.01.14
✎
13:31
|
генератор случайных + 1
0..5 - Петров 6..8 - Сидоров 9.. 15 - Иванов |
|||
7
servs
30.01.14
✎
13:40
|
(5) Все это уже отработано. Те, у кого есть заказы необработанные, в очереди не участвуют. Они мотивированы получать больше заказов.
(6) Мне тоже идея с генератором понравилась. |
|||
8
ЗлобнийМальчик
30.01.14
✎
13:40
|
(6) и че будем делать если сидорову и иванову выпадет 20 заказов а петврову 1? петров вам попртит лицо я думаю
|
|||
9
dk
30.01.14
✎
13:42
|
(8) у генератора равномерный закон распределения
такой вариант возможен, но крайне маловероятен |
|||
10
servs
30.01.14
✎
13:43
|
(8) заказов не мало, думаю распределение будет примерно равномерным.
|
|||
11
ЗлобнийМальчик
30.01.14
✎
13:44
|
(9) крайне - это сколько? лицо у меня одно все таки
(10) а сколько менеджеров в отделе и сколько заказов в среднем |
|||
12
Йохохо
30.01.14
✎
13:45
|
(8) карибасы должны страдать
|
|||
13
dk
30.01.14
✎
13:45
|
(11) тебе интересно - возьми и протестируй
|
|||
14
ЗлобнийМальчик
30.01.14
✎
13:46
|
(10) если я правильно понимаю, у менеджеров заработок зависит от заказов
в этом случае любые отклонения от "справедливого" распределения будут восприниматься очень болезненно. я бы не рекомендовал (13) слив засчитан |
|||
15
servs
30.01.14
✎
13:48
|
(11) в среднем 25 заказов на менеджера в день
|
|||
16
dk
30.01.14
✎
13:48
|
(14) слабо написать тест - засчитано )
|
|||
17
servs
30.01.14
✎
13:49
|
(14) согласен, потому вопрос все еще актуален
|
|||
18
servs
30.01.14
✎
13:50
|
Как справедливо распределить заказы между заинтересованными менеджерами, с учетом весовых коэфициентов?
|
|||
19
ЗлобнийМальчик
30.01.14
✎
14:01
|
постройте очередь в которой обойдите всех менеджеров. Те у которых коэффициент меньше 1 - всречаются в очереди меньше одного раза. те у кого больше 1 - больше одного раза. обходим по очереди менеджеров. когда очередь заканчивается - переносим дробные части в следующую очередь.
Я бы так делал |
|||
20
Torquader
30.01.14
✎
15:07
|
(19) С дробными коэффициентами можно бороться - просто умножить на какое-то число, чтобы все коэффициенты стали целыми и повторять в очереди людей столько раз, какой коэффициент у него указан.
Далее, можно из этой очереди выдёргивать любую запись, то есть отдавать менеджеру заказ - хоть случайно, хоть по порядку. И, всё же, мне кажется логичным, что заказ получает тот, кто раньше освободился. То есть регистр - таблица:Менеджер,ВремяОсвобождения,Занят. Выбираем запросом первую запись с минимальным временем освобождения, и условием, что Занят=Ложь. Этой записи ставится Занят=Истина, а менеджер получает заказ. После того, как менеджер освобождается, он нажимает кнопку для постановки в очередь, которая обновляет его запись, указывая время освобождения, а Занят проставляет в Ложь. И всё. |
|||
21
Torquader
30.01.14
✎
15:08
|
Если нужны какие-то приоритеты, то добавляем ещё одно поле, где пишем приоритет, и выбираем по его убыванию.
То есть заказ получит менеджер с максимальным приоритетом, который ранее всех освободился. |
|||
22
servs
30.01.14
✎
15:47
|
(20), (21) спасибо, но я придумал по-другому:
добавляем 2 поля: Количество заказов в рамках одной очереди (A), Количество заказов полученных в текущей очереди (B). А - постоянный коэф. задается вручную. B - при каждом получении заказа увеличивается на 1 При B = A, B присваиваем нулю. Далее сортируем активных менеджеров: 1) A-B по-убыванию 2) По фамилии возр В такой схеме по-моему даже константа "Последний получивший заказ менеджер" не нужна. |
|||
23
servs
30.01.14
✎
15:49
|
Там где описание А и В "очередь" надо читать как общая порция заказов, в рамках которой идет распределение.
Ошибся немного в терминах, но суть надеюсь понятна. |
|||
24
servs
30.01.14
✎
15:50
|
Кто-нибудь "подводные камни" видит?
|
|||
25
servs
30.01.14
✎
15:55
|
(21) У нас очень хитрые менеджеры, если по времени освобождения распределять, то качество пострадает.
Например, самый умный будет фиктивно проводить заказы, чтобы ему система добавляла еще, а потом когда будет затишье - начнет обзванивать те заказы, что провел ранее и корректировать их. А нужно, чтобы заказы обрабатывались сразу при поступлении, а не через час, например. |
|||
26
Зойч
30.01.14
✎
15:58
|
Сначала всем, у кого вес больше 1 - остаток от (вес - 1) кладем в кэш
Потом по кэшу, у кого уже есть 1, выдаем, потом опять всем и тд |
|||
27
Torquader
30.01.14
✎
16:02
|
(25) Тогда проще сделать:
А - весовой коэффициент заказности, то есть доля в количестве заказов (получаемых по сумме всех долей). Б - количество уже выполненных заказов. Если Б равно нолю, то заказ получает менеджер с максимальным А. Если Б не равно нолю, то выбираем минимум Б/А. |
|||
28
5 Элемент
30.01.14
✎
16:05
|
(25) В приведенном примере не видно как пострадает качество.
Ну наберет заказы, главное чтобы он их отработал. |
|||
29
servs
30.01.14
✎
16:06
|
(28) он будет их отрабатывать долго, а те кто недополучили заказы из-за хитрости коллеги, будут сидеть без работы.
|
|||
30
5 Элемент
30.01.14
✎
16:06
|
Ты определись что тебе нужно "справедливость для менеджеров" или "повысить эффективность" отработки заказов.
|
|||
31
servs
30.01.14
✎
16:07
|
(30) мне нужно равномерное распределение заказов, согласно очереди и коэф-тов
|
|||
32
Torquader
30.01.14
✎
16:07
|
(22) Вообще, есть две ситуации - первая, когда очередь заказов, то есть заказ пришёл, а свободного менеджера нет, тогда да - нужно их подгонять, чтобы они работали побыстрее; а вторая - заказов нет, а несколько менеджеров их ждут - тут, наоборот, нужно мотивировать менеджеров подольше работать с заказами - иногда это приводит к росту объёмов заказов.
|
|||
33
Зойч
30.01.14
✎
16:08
|
(25) корректировки нужно фиксировать и учитывать в КПИ
|
|||
34
servs
30.01.14
✎
16:09
|
(33) не согласен.
|
|||
35
servs
30.01.14
✎
16:11
|
(32) обе ситуации есть, например утром заказов много (за ночь насобиралось), те кто с утра конкурируют чтобы больше забрать заказов. Днем заказы к распределению приходят по-одному, а менеджеров активных много.
При этом необходимо, чтобы менеджеры отзванивались втечение 5 минут после поступления заказа. |
|||
36
Torquader
30.01.14
✎
16:12
|
А что мешает обрабатывать заказы через час.
Например, если покупатель запрашивает то, что сейчас нельзя рассчитать - не проще ли узнать у покупателя телефон и заняться расчётом и запросом цен у поставщиков, а в это время взять ещё несколько заказов ? Потому как иногда заказ может переходить в состояние, когда от менеджера уже ничего не зависит. |
|||
37
servs
30.01.14
✎
16:13
|
(27) не пойму почему проще, в моем варианте нужно просто посортировать колонку и сразу получить того кому заказ (первая строка в таблице), в вашем варианте нужно искать минимум и максимум.
|
|||
38
servs
30.01.14
✎
16:15
|
(36) количество менеджеров позволяет отзваниваться по новым заказам втечение пяти минут после поступления заказа.
|
|||
39
5 Элемент
30.01.14
✎
16:16
|
(31) для этого нужно знать время выполнения заказа
|
|||
40
Torquader
30.01.14
✎
16:16
|
(37) Да, в принципе, таким же запросом и делается.
Непонятно только, зачем нужно сортировать их по фамилии ? |
|||
41
Зойч
30.01.14
✎
16:17
|
(37) В итоге все получат по 1 заказу, только в разной последовательности и где тут весовые коэффициенты?
|
|||
42
servs
30.01.14
✎
16:18
|
(39) у меня уже реализована та чать, которая автоматически управляет активностью менеджеров, поэтому вопрос был лишь в распределении.
|
|||
43
servs
30.01.14
✎
16:18
|
(41) В (22) А - это весовой коэф-т
|
|||
44
Torquader
30.01.14
✎
16:19
|
(38) Тогда, быть может, разбить их на группы - "попугаи" и "кроты" - первые, отзваниваются как можно бытсрее и выясняют заказ, если быстро, делают всё сами, если какие-то запросы, то передают "кротам", а вторые "разгребают" то, что не сделали первые.
В этом случае, в начале рабочего дня "попугаи" получают последние заказы, по которым нужно отзвониться быстрее. Потом, лимит времени на работу попугая можно задать так, чтобы он его старался соблюдать и успевал утрясти все простые вопросы, "крот" же должен довести заказ до конца. |
|||
45
Torquader
30.01.14
✎
16:20
|
(43) Так и в (27) - тоже, только там в Б накапливается количество заказов, которое, само по себе, очень интересно.
|
|||
46
servs
30.01.14
✎
16:21
|
(40) Сортировка по фамилии это как очередь второго порядка, для тех у кого значения по первой сортировке одинаковы.
|
|||
47
servs
30.01.14
✎
16:22
|
(45) (22) и (27) по-моему одну и ту же суть несут, только я не понял почему (27) проще?
|
|||
48
Torquader
30.01.14
✎
16:22
|
(46) Это несправедливо, так как первые в списке будут иметь приоритет.
|
|||
49
Зойч
30.01.14
✎
16:23
|
(43) да, и я типа такого же предложил
|
|||
50
servs
30.01.14
✎
16:23
|
(48) так пока первая порция заказов не распределится их приоритет по фамилии не сработает
|
|||
51
Torquader
30.01.14
✎
16:24
|
(47) Потому что В, в (22) ставим равным нолю после того, как оно дошло до А.
Если все дошли, и все стали равными нолю - что - начинаем новый день ? |
|||
52
Torquader
30.01.14
✎
16:25
|
(50) Если не сортировать по фамилии, то первой записью будет та, которая первая в регистре - тоже как бы априори задана.
|
|||
53
Torquader
30.01.14
✎
16:27
|
Просто, если каждый день первый заказ будет получать какой-нить Абакумов, то справедливость системы сразу поставят под сомнение.
|
|||
54
Torquader
30.01.14
✎
16:28
|
Ладно - в принципе - всё уже описано и сделано в (22) осталось только убедить менеджеров, что так и должно быть.
А мне пора. |
|||
55
servs
30.01.14
✎
16:28
|
(51, 52, 53) понял, это уже доводка алгоритма, буду смотреть как лучше, выбор вы мне предоставили, спасибо
|
|||
56
Йохохо
30.01.14
✎
16:31
|
А - заказов за день всего
Ам - этому манагеру Вм - вес манагера Вм-Ам/А - отклонение веса решаем задачу минимизации вектора, надо ввести метрику, ужас при равных бросок ГСЧ |
|||
57
servs
30.01.14
✎
16:34
|
(56) непонятно чем ваш вариант лучше предложеного в (22), (23) или (27).
Чем хуже - сказать могу, только смысл объяснять, если я для себя решение уже нашел? |
|||
58
Йохохо
30.01.14
✎
16:35
|
метрика Мин() по всем итым больше 0
|
|||
59
servs
30.01.14
✎
16:36
|
(56) Если менеджеры работают втечение дня разное время, то ваш алгоритм будет работать не верно, заказы должны распределяться равномерно среди активных менеджеров, а не учитывать общее количество заказов, и отношение к весовому коэф-ту.
|
|||
60
Йохохо
30.01.14
✎
16:37
|
(57) я бы добавил случайности, а так все равно. в (22) манагер довольно быстро выяснит что до обеда ловить не чего
|
|||
61
servs
30.01.14
✎
16:39
|
(60) случайность состоит в том что таблица активных менеджеров непостоянна, те кто получают заказ, или долго не обрабатывают поступивший заказ, автоматически становятся неактивными.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |