Не прекращайте учебу с
LOKAD TV
Id
код товараMinQ
минимальное количество товара, необходимое для применения цены со скидкойP
цена закупки товараpricebrk()
в Envision — трансформация табличных данных о скидках в распределение, которое отражает предельную цену на товар. Синтаксис:
// «Prcs» — таблица скидок expect Prcs[Id, *] B = pricebrk(D, P, Prcs.MinQ, Prcs.P, Stk, StkP)Функция возвращает распределение предельной цены на единицу товара, то есть цену на покупку k-ой единицы товары. Данная функция достаточно сложна для понимания. Мы подробно опишем эту функцию и поясним сложные моменты ниже.
D
(спрос) — распределение для для выбора D
.P
— число, цена на единицу товара по умолчанию. Данное значение используется, если скидка не применяется к минимальному количеству (1); либо потому что скидки начинаются со значения большего 1, либо потому что на данный товар вообще не распространяются скидки.Prcs.MinQ
— минимальное количество товара, к которому применяются скидки. Это должно быть целое число больше или равное 1. Дубликаты не допускаются.Prcs.P
— цена за одну единицу с учетом скидки. Применяется ко всем приобретаемым единицам товара, не только к тем, которые выходят за рамки Prcs.MinQ
. Это должна быть убывающая функция Prcs.MinQ
.Stk
— запас товара в наличии. Ненулевые значения показывают, что для достижения указанного уровня запасов нужно приобрести меньшее количество единиц товара, а значит скидку будет получить сложнее. Значение должно быть неотрицательным целым числом. Данный аргумент является дополнительным. Если данный аргумент опущен, нужно также опустить StkP
. Когда данный аргумент опущен, значение по умолчанию устанавливается на ноль.StkP
— цена за единицу товара для товаров, которые уже есть в наличии. Данный аргумент является дополнительным. Если он опущен, значение по умолчанию равно нулю.P
— это просто синтаксический прием, позволяющий работать с ситуациями, когда таблица с данными о скидках содержит только данные о товарах, на которые распространяются скидки. Благодаря данному аргументу не требуется разложение таблицы Prcs
до тех пор, пока каждому товару не будет соответствовать не менее одной строки.pricebrk()
должно выступать распределение, потому что распределения в Envision недостаточно точны. Существуют практические ограничения резольвенты распределения в Envision. Поставщик может предоставлять скидки с 1 единицы товара до (теоретически) 10 миллионов единиц товара. Распределение Demand
используется функцией pricebrk()
для подгонки резольвенты возвращенного распределения до нужного диапазона.pricebrk()
, Envision подстраивает резольвенту возвращенного распределения во избежание данной ситуации.pricebrk()
переводит данные о скидках из пространства заказа в пространство хранения.pricebrk()
имеет два аргумента, связанных с запасами: уровень запасов и расходы на хранение единицы товара. Эти два аргумента используются для перемещения распределения предельной цены вправо от единиц товара в запасах. Перемещение можно выполнить с помощью обычного оператора >>
при распределении, однако это может привести к ситуациям, когда до получения скидки может не хватить очень небольшого количества единиц товара. Функция pricebrk()
поддерживает такое перемещение и исключает возникновение подобных ситуаций.pricebrk()
, отражает предельную цену на закупку единицы товара. Сегмент [1;Stk] связан с текущим уровнем запаса и с аргументом StkP
. Если B
— это распределение, возвращенное функцией pricebrk()
, то интеграл int(B, Stk + 1, Stk + N)
— общая стоимость закупки N единиц товара, помимо единиц, которые уже есть в наличии.pricebrk()
, отражают такие ситуация с помощью локальных отрицательных значений. Такие отрицательные значения являются правильными, и они являются следствием использования соответствующей модели данных.B = pricebrk(D, BuyP, Prcs.MinQ, Prcs.P, Stk, StkP) // M, S и C — распределения M = SellPrice - B S = -0.5 * (SellPrice - B) C = -0.3 * B * mean(Leadtime) / 365 AM = 0.3 AC = 1 - 0.2 * mean(Leadtime) / 365 // точечное умножение для RM, RS и RC RM = stockrwd.m(D, AM) * M RS = stockrwd.s(D) * S RC = stockrwd.c(D, AC) * C R = RM + RS + RCПо существу, разница между этим блоком и исходным сценарием, где мы ввели функцию прибыльности запасов, заключается в
BuyP
. СтолбецBuyP
преобразуется в распределение данных по скидкам B
в строке 1 с помощью функции pricebrk()
. Далее в сценарии просто применяется алгебра распределения, которая выполняет за нас всю сложную работу.M
выше — предельная прибыль от каждой единицы товара (предельная прибыль). Вследствие того, что при скидках цена за единицу товара понижается при увеличении объема заказа, значения распределения M
должны возрастать.