Нахождение лучшей «сделки» в «групповой покупке», учитывая таблицу значений - PullRequest
3 голосов
/ 02 ноября 2010

Использование PHP или Python , но я уверен, что основные функции независимы.

Я не уверен, что такое правильный термин, математическая теория или алгоритм, иначе я уверен, что Google исправил бы это для меня за несколько минут.

У меня есть набор данных, подобный следующему:

cost | qty | ppl | store
------------------------
   30|  500|   10|     1
   40|  600|   12|     2
   35|  500|   14|     3
   50|  700|   10|     1
   30|  700|   12|     1
   40|  250|   14|     2

Я пытаюсь найти «оптимальную» строку, основанную на следующих квалификаторах:

  • стоимость: чем ниже, тем лучше.
  • Кол-во: чем выше, тем лучше.
  • чел: чем ниже, тем лучше.
  • store: не имеет значения в этом случае, но используется позже, чтобы найти «лучший» в зависимости от «store».

По сути, я пытаюсь найти лучшую конкретную «сделку» в ситуации, подобной «групповой покупке», когда наименьшее количество людей требуется для получения наилучшей «стоимости» (количество-стоимость-стоимость).

На мой взгляд, лучше всего будет строка № 5 из-за скачка количества.

Если для этого есть название и хорошая (Википедия?) Статья на эту тему, я был бы рад закончить это сам. Спасибо за ваше время!

Ответы [ 3 ]

5 голосов
/ 02 ноября 2010

Вычислить qty / (cost * ppl) и отсортировать список по этому номеру.Это число будет выше для более высоких qty и более низких cost и ppl.

Возможно, вы захотите использовать что-то вроде этого (python):

def cmp(a, b):
    return (a["qty"] / (a["cost"] * a["ppl"])) - (b["qty"] / (b["cost"] * b["ppl"]))

list = sorted(list, cmp)

Пояснение : подумайте, что произойдет, если qty станет больше, когда cost * ppl постоянны.Коэффициент будет увеличиваться, потому что a/x > b>x, если a > b.Теперь с двумя другими значениями все наоборот;если x/a > x/b, то a < b, так что соотношение на самом деле будет уменьшаться , когда cost или ppl увеличивается (подумайте, что произойдет, если вы разделите 100 $ на двух человек против трех человек; еслиразделите его на два, каждый получит 100/2 = 50 $. Если вы разделите его на три, каждый получит 100/3 ~ = 33 $, что меньше).(Извините, если я не проясняю это достаточно; я устал)

1 голос
/ 02 ноября 2010

Вы смотрите на линейное программирование в целом и симплексный алгоритм в частности.

0 голосов
/ 02 ноября 2010

Вам нужно решить, что делает его оптимальным, определить функцию, которая зависит от стоимости, кол-во, чел и максимизировать / минимизировать ее.Тогда это просто оптимизация.

Я предполагаю, что стоимость - это цена за единицу, кол-во - это количество, имеющееся в магазине, а количество человек - это минимальное количество людей, которые можно купить в группе. Тогда сведение к минимуму стоимости * чел.общая сумма, потраченная до его вступления в силу, деленная на количество людей, которые могли бы участвовать в групповой покупке, если она станет доступной.Но вы все еще должны думать, имеет ли это смысл.Вы можете сказать, что, если стоимость удваивается, но доступное количество также удваивается, эта групповая покупка хуже, чем меньшая.Возможно, если стоимость удвоится, кол-во должно увеличиться на 4, или кол-во необходимых снижается на 4. Тогда вам может понадобиться такая функция, как стоимость ^ 2 чел / кол-во.Например, что-то вроде стоимости ^ m ppl ^ n / qty ^ p должно работать;Вы просто настраиваете m, n, p (все положительные числа) в зависимости от весов, которые считаете подходящими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...