Нахождение ближайшего количества на основе цены и суммы, чтобы получить - PullRequest
0 голосов
/ 28 сентября 2011

У меня небольшая математическая задача, в которой мне нужно определить количество на основе себестоимости и окончательной суммы.

Теперь это легко теоретически, поскольку это просто конечная сумма / фактическая стоимость = количество, за исключением того, что в моем случае фактическая стоимость изменяется в зависимости от количества.

Количество = Конечная сумма / (Стоимость товара + Накладные расходы), где накладные расходы по скользящей шкале.

Примером может быть Если я хочу заработать 500 долларов за продажу овец, и базовая цена для каждой овцы, скажем, 50 долларов, но стоимость продажи одной овцы составляет 5 долларов, то фактическая стоимость будет равна 55 долларам за одну овцу, но если я продам 2 овцы, то стоимость продажи одного становится $ 7, поэтому фактическая стоимость будет $ 107 и так далее и так далее.

Каков был бы наиболее оптимальный способ приблизиться к итоговой сумме (но не более), насколько это возможно, без необходимости повторять цикл практически безоговорочно?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2011

Обратите внимание, что накладные расходы являются функцией проданного количества. Это означает, что ваше уравнение находится в форме, которую легко повторить. Вы делаете первоначальное предположение о количестве, вставляете его в правую часть уравнения и используете его, чтобы получить новое предположение о количестве. Как только количество стабилизируется, вы достигли фиксированной точки и можете остановиться.

Для примера продажи овец с экономией на масштабах в накладных расходах я бы начал с подсчета количества овец, исходя из минимальных накладных расходов. Это может быть правильно, или это может быть переоценено. Количество обновлений, необходимых для этого процесса, неясно заранее, но я ожидаю быстрой конвергенции.

Вот как это может выглядеть в Python, написанном как псевдокод, как я могу это сделать:

import math

def overhead(n):
    # Not given in problem, so I can't give an implementation
    raise NotImplementedError("Sorry, don't know what this is")

def rhs(n, u, t):
    return math.floor(t / (u + overhead(n)))

def best_quantity(unit_cost, total_cost, min_overhead):
    prev_guess = 0
    current_guess = math.floor(total_cost / (unit_cost + min_overhead)) 
    while (current_guess != prev_guess):
        prev_guess = current_guess
        current_guess = rhs(current_guess, unit_cost, total_cost)
    return current_guess

print best_quantity(50.0, 500.0, 0.0)
0 голосов
/ 28 сентября 2011

Исходя из предположения, что ваши накладные расходы всегда неотрицательны и монотонны, вы знаете, что

0 <= Quantity <= Final Amount/Item Cost

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

...