Рейтинг деталей в LUGBULK
В программе LUGBULK обычно участвует множество человек, каждый со своими предпочтениями относительности ценности и важности той или иной детали. Но количество позиций в заказе сильно ограничено - предварительный заказ может включать не более 80 наименований (комбинаций форма + цвет), а окончательный - не более 50 позиций. Отсюда сразу возникает проблема выбора деталей для заказа.
В разных сообществах эта проблема решается по-разному. Например, некоторые делегируют составление списка деталей некоторому кругу лиц, которые решают, какие детали нужны в заказе, а какие - нет. Сообщество DoubleBrick использует другой метод. Для всех деталей в заказе вычисляется рейтинг, соответственно в заказ попадают первые 80/50 позиций с самым высоким рейтингом. Рейтинг рассчитывается автоматически в соответствии с изложенным ниже алгоритмом. Те, кто не хочет разбираться в математических подробностях расчёта рейтинга, могут пропустить почти весь материал и сразу перейти к последнему абзацу этой страницы, где даётся неформальное упрощённое, но достаточно точное описание смысла рейтинга.
При добавлении в свой заказ позиции, каждый участник может назначить для этой позиции важность (исходя из своего мнения о нужности ему данной детали), одно из трёх значений:
- "не важно", x1 ;
- "обычная", x2 (значение по умолчанию);
- "важно", x4.
Это значение запоминается и может быть впоследствии изменено, при этом рейтинг деталей будет автоматически пересчитан.
Сначала для всего заказа у каждого участника расчитывается общий поправочный коэффициент по формуле:
k = min(sum(count * price), 500) / sum(count * priority * price)
т.е. сумма всего заказа, но не более 500 (все цены - в DKK) делится на сумму произведений количество на цену 1 штуки на коэффициент важности по всем деталям в заказе.
Этот коэффициент нужен для выравнивания оценок от различных пользователей. Без нормировочного коэффициента было бы возможно элементарное жульничество - назначение всем деталям в заказе приоритета "важно". С поправочным коэффициентом это теряет всякий смысл, с таким же успехом можно назначить всем позициям статус "обычный" или даже "не важно", поправочный коэффициент всё равно приведёт в итоге персональный рейтинг детали, вычисляемой по формуле:
r = count * price * priority * k
к одному и тому же значению. Поэтому использование рейтингов имеет смысл только в том случае, если разные позиции имеют разный рейтинг. Таким образом, вы можете влиять на итоговое распределение деталей, "важные" детали получат больший вес, чем "не важные". Для вычисления итогового рейтинга суммируются её рейтинги во всех заказах, где она присутствует, после чего список деталей сортируется в порядке убывания рейтинга.
Ограничение с константой 500 нужно для того, чтобы препятствовать другому способа нечестной конкуренции, особенно на первом этапе заказа. Как видно из формулы, рейтинг прямопропорционален цене детали и её количеству. Если добавить сразу сотни (тысячи) штук деталей в заказ, то она скорее всего займёт первые строки рейтинга. А потом уже можно будет уменьшить итоговое количество деталей. Либо, даже, если человек и в самом деле купит заказанное количество, без дополнительных ограничений, то покупатели большого количества будут оказывать на рейтингование существенно большее влияние, а права покупателей небольшого количества деталей будут ущемлены.
Во избежание этого, при превышении общей суммы заказа стандартного ограничения в 500 DKK применяется понижающая корректировка. Если человек заказал деталей в два раза больше, то всего его оценки будут дополнительно разделены на 2 и т.д. Эта процедура делает неоправданно большое увеличение количества деталей бессмысленным. Если быть точнее, влияние всё-таки остаётся, но оно уже выражено гораздо меньше и перераспределение голосов в пользу новых деталей происходит за счёт уменьшения общей важности остальных деталей.
Если вас утомило изложение математических подробностей, то, вообще говоря, вам достаточно понять следующее:
- каждый участник заказа получает некоторое количество баллов, пропорциональное сумме своего заказа в DKK, но не более 500;
- эти баллы распределяются между отдельными деталями заказа согласно заданным цене, количеству и приоритету каждой конкретной позиции;
- если вы хотите поднять общий рейтинг той или иной детали, то вы можете сделать это, увеличив важность её в заказе, либо увеличив количество деталей, но при этом вы понизите рейтинг всех остальных своих позиций.

