Как определить, какая комбинация заказов будет оптимальной в Excel?

#excel #if-statement #math

Вопрос:

Я борюсь с небольшой задачей в Excel. У меня есть два варианта на выбор при заказе оптом. Вариант А — 5 штук по 80$. Вариант В — 30 штук за 200$. Я не могу покупать отдельные изделия, и мне приходится покупать оптом. Как я могу написать формулу, которая может проверить, какую комбинацию оптовых заказов я должен сделать? Например, если я хочу заказать 34 штуки, то было бы лучше заказать Вариант В один раз и Вариант А один раз, вместо того, чтобы заказывать Вариант В дважды или Вариант А 7 раз.

Я попытался найти уравнение, в котором x-перехват показывал бы, сколько вариантов A нужно заказать, но это работает только в очень упрощенных случаях, а не для всех возможных входных данных. Я думаю, что ответ на этот вопрос может заключаться в формуле IF, но я не уверен.

Комментарии:

1. Я думаю, что этот вопрос относится к другому сайту, например math.stackexchange.com потому что вы ищете уравнение. Как только вы это поймете, тогда, возможно, вы сможете спросить, как составить формулу для этого уравнения

2. @FoxfireAndBurnsAndBurns Не будет ли это также уместно здесь, так как я предполагаю, что вы могли бы написать формулу для этого, используя вложенные циклы if?

3. Чтобы написать формулу, вам нужно знать ручную формулу , как ее решить. Вам нужно само уравнение. Перевод этого уравнения в Excel, действительно, является вопросом для SO (с минимальными усилиями). Но получение уравнения, я думаю, выходит за рамки. В любом случае, я не голосовал за закрытие вопроса, это просто мое мнение 🙂 Может быть, другие пользователи смогут нас просветить.

Ответ №1:

Это похоже на проблему для целочисленного линейного программирования:

 Parameters:
    n  =  34 = wanted number of pieces
    pA =  80 = price of A 
    pB = 200 = price of B
    nA =   5 = number of pieces per A
    nB =  30 = number of pieces per B

Decision variables:
    qA, qB = number of lots A, number of lots B, integers

Minimize:
    pA * qA   pB * qB

Under constraints:
    nA * qA   nB * qB >= n
    qA >= 0
    qB >= 0
 

С другой стороны, проблема достаточно проста, потому что цена за штуку намного дешевле для B (pB/nB = 6,67), чем для A (pA/nA = 16); и цена одного B находится между ценой 2 и 3 A. Итак, существует очевидная эвристика: разделите желаемое количество штук на 30, чтобы выбрать как можно больше B, выберите один дополнительный B, если осталось более 2 A, в противном случае в комплекте с A.

 qB = floor(n / 30)
if n - 30 * qB > 2:
  qB  = 1
  qA = 0
else:
  qA = ceil((n - 30 * qB) / 5)