Схемы оплаты




Описание

Торговой компании, владеющей сетью магазинов, необходимо закупить женские пальто для розничной продажи. Отдел закупок работает обычно для этого вида одежды с 6 поставщиками, которые обеспечивают необходимый ассортиментный ряд. При закупке применяются три схемы оплаты товара поставщикам:
А - оплата по факту поступления товара;
B – оплата в рассрочку (50% средств оплачивается немедленно после поставки, остальная часть через 30 дней);
С – взятие товара на реализацию (через месяц после поставки производится оплата за реализованный товар, а нереализованный – возвращается).
Цена закупки зависит от выбранной схемы оплаты (см. таблицу). Предполагается, что закупки у каждого из поставщиков можно делать только по одной схеме. У каждого поставщика различные модели изделий, поэтому закупочная цена разная.

Для заполнения площадей магазина товаром необходимо разместить 450 женских пальто. Отдел продаж отобрал несколько моделей пальто и было решено закупить следующие количества пальто у каждого из поставщиков.

Значение «скорость продаж» свидетельствует о доле товара, который предполагается продать в 1 месяц торговли (данные приняты на основании усредненных данных предыдущих сезонов). Для закупок данного вида товара выделен бюджет в размере 300000 руб.
Необходимо выбрать схемы оплаты максимизирующие прибыль магазина.

Решение

Результатом решения модели является план закупок магазина с указанием вариантов оплаты, максимизирующий прибыль:


Прибыль магазина при этом составит 493 950 руб.

В случае необходимости модель может быть адаптирована под дополнительные потребности клиента.

* Пример заимствован из учебного пособия: Зайцев М.Г., Варюхин С.Е. "Методы оптимизации управления и принятия решений: примеры, задачи, кейсы." - 2 изд. испр.-М: Издательство "Дело" АХН, 2008 - 664с.

Форма ввода данных


Раздел находится в разработке...
* Сообщите нам (E-mail, комментарий) если требуется решение модели с данными пользователя.

Модель AMPL (фрагмент кода)
set provider :={1..7};               # Поставщики товаров
set payment_scheme := {'A','B','C'}; # Виды оплаты
set payment_day := {'1','30'};       # Набор дней оплаты по всем схемам оплаты
param scheme_atribute{payment_scheme, payment_day} >= 0;
set LINKS within {provider, payment_scheme};
param cost {LINKS} >=0;              # Стоимость товаров при различной системе оплаты
param demand := 450;                 # Общий спрос на товары
set param_coat := {'price', 'count', 'pace'};# Характеристики поставляемых товаров
param atribute {provider,param_coat} >= 0;  # Характеристики поставляемых товаров
param Total_money>= 0;               # Выделенный на закупку бюджет
var X{LINKS} >= 0;                   # Количество закупаемых товаров по каждой из схем оплаты
var Y{LINKS} binary;                 # = 1 только если LINKS используется
maximize Total_revenue: sum {(pr,pa) in LINKS: pa!='C'} X [pr,pa] * atribute [pr,"price"] - 
    sum {(pr,pa) in LINKS: pa!='C'} X[pr,pa] / atribute[pr,'pace'] * cost [pr, pa] + 
    sum {(pr,pa) in LINKS: pa ='C'} X[pr,pa] * (atribute[pr,'price'] - cost [pr, pa]); # Максимизация дохода
subject to 
A_2: sum {(pr,pa) in LINKS} X[pr,pa] * cost [pr,pa] * scheme_atribute[pa,'1'] <= Total_money;
data;
param Total_money := 300000;
param scheme_atribute: '1'    '30':=
'A'                      1    0       # 100% при приемке товара на реализацию
'B'                      0.5  0.5     # 50% при приемке, 50% через 30 дней
'C'                      0    1 ;     # сразу не платится ничего, через месяц после поставки выплачиваются деньги за реализованный 
                                      # товар и возвращается нереализованный
param: LINKS: cost :    'A'      'B'      'C':=
1                               2400    2500    .     
2                               2100    2400    2700    
3                               2000    2200    2400
4                               1500    1600    1900    
5                               1600    1900    .
6                               1300    1400    1600
7                               .       1000    1200   ;
param atribute: 'price'     'count'     'pace' := 
1               5000        50          0.9
2               4800        110         0.8
3               4300        70          0.85
4               3000        50          0.8
5               3200        50          0.9       
6               2800        70          0.7
7               2300        50          0.7 ;
solve;
display X,