Решения различных примеров задачи ежемесячного планирования закупок
при заданных cпросе, предложении, ценах, затратах на хранение методом
динамического программирования, воплощённом в java-классе InventoryModel1.
Результаты работы компьютерной программы, описаной в классе InventoryModel1.
В каждом примере указаны входные данные и вычисленный план закупок с конечной прибылью.
Изменения в начальных данных по отношению к предыдущим примерам выделены цветом.
###########################################################################################
При равных ценах в каждом месяце нет выгоды в предварительных закупках. Поэтому товар не хранится,
а в каждом месяце закупается ровно столько, чтобы удовлетворить спрос.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 5, 5, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 0; Остаток на конец: 0; Потребление: 6; Закупки: 6
2; Остаток на начало: 0; Остаток на конец: 0; Потребление: 6; Закупки: 6
3; Остаток на начало: 0; Остаток на конец: 0; Потребление: 6; Закупки: 6
Прибыль 72.0
###########################################################################################
Низкие закупочные цены в первом месяце побуждают полностью заполнить склад, пополнив его
в третьем месяце до удовлетворения спроса.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 1, 5, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 0; Остаток на конец: 10; Потребление: 6; Закупки: 16
2; Остаток на начало: 10; Остаток на конец: 4; Потребление: 6; Закупки: 0
3; Остаток на начало: 4; Остаток на конец: 0; Потребление: 6; Закупки: 2
Прибыль 122.0
###########################################################################################
Снижение закупочных цен во втором месяце при неизменно низких в первом так же побуждают полностью заполнить
склад сразу, и пополнить его во втором месяце до такого уровня, чтобы удовлетворить спрос в третьем, не делая больше закупок.
В данном случае дополнительные затраты на хранение во втором месяце перекрываются выгодой от закупок по более низким ценам.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 1, 3, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 0; Остаток на конец: 10; Потребление: 6; Закупки: 16
2; Остаток на начало: 10; Остаток на конец: 6; Потребление: 6; Закупки: 2
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 124.0
###########################################################################################
Перенос низких закупочных цен на второй месяц приводит к тому, что в первый месяц запасов не делается,
а во второй месяц делаются закупки сразу на два оставшихся месяца.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 3, 1, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
============ План закупок ===============
1; Остаток на начало: 0; Остаток на конец: 0; Потребление: 6; Закупки: 6
2; Остаток на начало: 0; Остаток на конец: 6; Потребление: 6; Закупки: 12
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 126.0
###########################################################################################
Увеличение начального запаса ожидаемо приводит к росту прибыли, поскольку закупок нужно делать меньше.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 3, 1, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 5; Остаток на конец: 0; Потребление: 6; Закупки: 1
2; Остаток на начало: 0; Остаток на конец: 6; Потребление: 6; Закупки: 12
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 138.5
###########################################################################################
Ещё большее увеличение начального запаса увеличивает прибыль ещё больше, однако это происходит не всегда.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 3, 1, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 1, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 9; Остаток на конец: 3; Потребление: 6; Закупки: 0
2; Остаток на начало: 3; Остаток на конец: 6; Потребление: 6; Закупки: 9
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 139.5
###########################################################################################
Увеличение расходов на хранение в первый месяц показывает, что большой начальный запас может оказаться невыгодным.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 3, 1, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 2, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 9; Остаток на конец: 3; Потребление: 6; Закупки: 0
2; Остаток на начало: 3; Остаток на конец: 6; Потребление: 6; Закупки: 9
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 133.5
###########################################################################################
Уменьшение начального запаса при больших затратах на хранение даёт увеличение прибыли.
int n = 3; //число промежутков времени (месяцев)
int max = 10; //наибольшее значение для остатка на складе
double[] inprice = { 3, 1, 5, }; //цены закупочные за каждый месяц
double[] outprice = { 9, 9, 9, }; //цены отпускные за каждый месяц
double[] store = { 2, 1, 1, }; //стоимость хранения единицы товара за каждый месяц
int[] need = { 6, 6, 6, }; //потребность за каждый месяц
=========== План закупок ===============
1; Остаток на начало: 5; Остаток на конец: 0; Потребление: 6; Закупки: 1
2; Остаток на начало: 0; Остаток на конец: 6; Потребление: 6; Закупки: 12
3; Остаток на начало: 6; Остаток на конец: 0; Потребление: 6; Закупки: 0
Прибыль 136.0
###########################################################################################
На главную страницу.