Проектирование информационной системы поддержки

advertisement
Содержание:
I.
Введение…………..………………………………………………………………..4
II.
Рассмотрение задачи решаемой приложением…………………………………..5
1. Постановка задачи……………………………………………………………..5
2. Алгоритм решения…………………………………………………………….10
III.
Описание пользовательского приложения………………………………………12
IV.
Модель тестирования……………………………….…………………………….16
1. Моделирование функций……………………….…………………………….18
а) Модель функции выручки…………………………………………………18
б) Модель функции издержек………………………………………………...19
2. Результаты. ……………………………………………………...…………….21
V.
Заключение………………………………………………………………………...23
VI.
Список литературы………………………………………………………………..24
3
Введение.
I.
В наше время, технологии, используемые в торговле, позволяют в любой момент
времени узнать точные данные о продажах, количестве товара на складе и т.д. Но
большинство компаний не пользуются предоставляющимися им возможностями для
улучшения бизнеса и предпочитают устанавливать цены с оглядкой на конкурента, а
зачастую просто наобум. Не состоятельность такой политики доказывают компании,
которые стараются использовать средства автоматизации и прогнозирования. Но и
они не используют в полную силу возможность получать информацию и, обрабатывая
её, добиваться улучшения своего положения на рынке.
В данной работе проектируется информационная система, обеспечивающая
максимизацию валовой прибыли, использую алгоритм типа SPSA. Благодаря этой
системе пользователь получает возможность устанавливать оптимальные цены и
осуществлять оптимальные закупки товаров.
Информационная система включает в себя следующие компоненты:

алгоритм, максимизации валовой прибыли в распараллеленной задаче об
оптимизации функционала с плавающим экстремумом

приложение, реализующее данный алгоритм

модель тестирования алгоритма
Реализация осуществляется через приложение, созданное в среде разработки
Microsoft Visual Studio 2010. Алгоритм реализован на Visual Basic, сервер баз данных
– Microsoft SQL Server, связь с сервером баз данных через технологию .LINQ, а набор
дополнительных функций этой технологии для языка Visual Basic - LINQ to SQL
позволяет эффективно создавать запросы.
4
II.
Рассмотрение задачи решаемой приложением
1. Постановка задачи.
Наша задача заключается в том, чтобы максимизировать валовую прибыль за
один рабочий день. Валовая прибыль равняется разнице доходов (выручки) и
расходов (издержек).
Обозначим за F валовую прибыль за один рабочий день.
Тогда 𝐹 = ∑𝐻
𝑚=1(𝑝𝑚 ∙ 𝑁𝑚 − 𝐾𝑚 ∙ 𝐶𝑚 ), где
H – количество товаров
N – количество проданных экземпляров товара данного типа
K – количество купленных на склад экземпляров товара данного типа
С – себестоимость товара (цена поставщика и транзакционные издержки)
𝑝𝑚 – цена которую устанавливает продавец.
Как правило, предприниматели владеют не одним магазином, а значит, у них
есть возможность устанавливать разные цены в разных магазинах, что позволяет
более тонко отслеживать изменения потребительского спроса. Мы тоже не будем
упускать такую возможность, ведь она поможет ускорить нахождение решения.
Пусть есть K-магазинов.
𝑝𝑚𝑙 - вектор цен l-го магазина
𝐾𝑚𝑙 - вектор закупке товаров l-го
𝑁𝑚𝑙 - вектор продаж товаров l-го магазина
Тогда
𝐻
𝐹 = ∑𝐾
𝑙=1 ∑𝑚=1(𝑝𝑚𝑙 ∙ 𝑁𝑚𝑙 − 𝑘𝑚𝑙 𝐶𝑚 ) → 𝑚𝑎𝑥
Обозначим:
Выручка
𝐻
𝑅 = ∑𝐾
𝑙=1 ∑𝑚=1 𝑝𝑚𝑙 ∙ 𝑁𝑚𝑙 → 𝑚𝑎𝑥
Издержки
𝐻
𝐸 = ∑𝐾
𝑙=1 ∑𝑚=1 𝑘𝑚𝑙 𝐶𝑚 → 𝑚𝑖𝑛
Тогда
𝐹 = 𝑅 − 𝐸 → 𝑚𝑎𝑥
Напомним, что выручка равняется сумме по парных произведений объемов
продаж и цен.
На самом деле объем продаж выражается функцией спроса Q, которая
представляет собой набор состояний. При соединении этих точек состоянии
получается кривая, называемая функцией спроса. Очевидно, что спрос зависит от
бесконечного количества аргументов, таких как цена, индивидуальные предпочтения,
качество, информация о товаре, реклама и многое другое. Их все учесть невозможно.
Но влиять и количественно оценивать мы можем лишь немногие аргументы.
Наибольшее влияние на спрос оказывает цена p.
5
Известно, что между ценой p и количеством продаж n существует обратная
зависимость, которая при фиксированных аргументах, кроме цены, имеет следующий
вид:
𝑄′
P
Но это спрос лишь для одного покупателя, для других он может отличаться. А
нам надо получить показатель для всех. Среднерыночный спрос Q вычисляется
вертикальным суммированием и дает нужный нам результат.
Примем допущение о том, что все аргументы кроме цены являются «помехами»,
искажающими значение функции спроса. Эти помехи обозначим через w. Тогда
получаем, что выручка является функцией от цены, помех и времени.
Итак, выручка за операционный день
𝑅(𝑤, 𝑝, 𝑡) = ∑𝑚 𝑓𝑚 (𝑤𝑚 , 𝑝𝑚 , 𝑡) = ∑𝑚 𝑁𝑚 (𝑡) ∙ 𝑝𝑚 (𝑡) = ∑𝑚 𝑄(⋯ , 𝑝𝑚 (𝑡), ⋯ ) ∙ 𝑝𝑚 (𝑡)
∑𝑄 ∙ 𝑃
P
Таким образом, одной из проблем, встающих перед нами, является нахождение
максимума выручки.
Второй проблемой является минимизация издержек. На цену закупки у
поставщика мы влиять не можем, поэтому нам надо минимизировать количество
покупаемого товара, при этом, не допуская потери выручки. То есть в идеале, если не
учитывать то, что ситуация может измениться 𝑁 𝑚 = 𝐾 𝑚 . Но в действительности
такое невозможно, поэтому нужно закупать с определенным запасом, причем таким,
что его можно будет продать до момента истечения срока годности товара.
6
Обратим внимание на то, что спрос на товар, который проявляет продавец, по
сути, порождается спросом покупателей и копирует его. Таким образом, прибыль
появляется только из-за разницы цены и себестоимости.
PQ
P*
P
Доход
Издержки
Прибыль
Как видно из графиков у функции прибыли существует точка максимума. Это
так же доказывается и в экономической теории, причем эта точка единственна.
Итак, мы пришли к задаче максимизации:
𝐹(𝑤, 𝑝, 𝑡) = 𝑅(𝑤, 𝑝, 𝑡) − 𝐸(𝑝, 𝑡) → max
{𝑝𝑙 }
Существует всего два способа нахождения точки максимума: градиентный и
полный перебор.
В действительности эти подходы реализовать невозможно по следующим
причинам:
1.
не известна формула для функции спроса, а значит и градиент для неё
вычислить не можем.
2.
полный перебор требует очень много время, что ведет потере денег
3.
функция спроса со временем меняется, причем это может носить как
постоянный характер, так и иметь мгновенное качественное изменение
Таким образом, мы видим, что искомую нами точку оптимума для данной
задачи найти не возможно. Поэтому перейдем к решению задачи максимизации
функционала среднего риска, для которого можно построить последовательность
оценок аргумента (цены), позволяющую найти максимум в среднеквадратичном
смысле
7
𝔼𝑤 {𝐹(𝑤, 𝑝, 𝑡)} → max
𝑝
Это задача максимизации функционала с неопределенными помехами 𝑤𝑛 ,
которые мы должны как-то учитывать.
Кроме того нельзя забывать и о том, что во время измерения у нас могут быть и
другие искажение, которые будет влиять на прибыль, не сказываясь на спросе на
товар. Такими искажениями могут быть погодные явления, недоброкачественная
работа персонала, сбои в технике, конкуренты и другие факторы. Будем их учитывать
через слагаемое 𝑣𝑡 .
Запишем функцию F в общем виде и обозначим за y:
𝑦𝑡 = 𝐹(𝑤𝑡 , 𝑝𝑡 , 𝑡) + 𝑣𝑡
Подобного вида функции, как правило, максимизируют или минимизируют при
помощи алгоритмов стохастической оптимизации, которые впервые были применены
в пятидесятые годы двадцатого века Роббинсом, Монро, Кофером и Вольфовицем.
После них область, в которой применялись алгоритмы, предложенные этими
учеными, изучается такими учеными как J.C. Spall, О.Н. Граничин, Б.Т. Поляк. И
достигнутые ими результаты доказывают эффективность такого рода подхода в
решении задач поиска оптимума функции с помехами на входе.
В решаемых
ими
задачах
входящими условиями
были
несколько
параметров, которые искажались некоторыми факторами неопределенности и
помехами измерения. Также можно было в определенный момент времени получить
«зашумленное» значение функционала. Используя лишь эти данные и изменяя
входящее условие функции, находили значение, при котором функционал достигает
своего оптимума.
Поэтому сформулируем нашу задачу аналогично той, что решает алгоритм
SPSA, и разработаем собственный алгоритм, который будет учитывать наши
осложненные условия и возможность получения за один шаг алгоритма нескольких
резальтатов.
𝐹(𝑤, 𝑝, 𝑡): ℝ𝑚 × ℝ𝑚+1 × ℝ1 → ℝ1
𝑝𝑚𝑙 – цена на m-ый товар в l-ом магазине, которую примем за
последовательность точек измерения, в которых в каждый момент времени 𝑡 = 1, 2, …
доступно наблюдение значения функции 𝑦𝑡 с аддитивными помехами 𝑣𝑡 .
{𝑤𝑡 }
-
последовательность
случайных
величин,
выражающих
неконтролируемую неопределенность, 𝑤𝑡 ∈ ℝ𝑚 , имеющих одинаковое неизвестное
распределение 𝑃𝑤 (∙).
8
Требуется по наблюдениям 𝑦1 , 𝑦2 , … построить последовательность оценок {𝜃𝑡 }
неизвестного
вектора
θ,
максимизирующего
функцию
𝑦𝑡 = 𝐹(𝑤𝑡 , 𝑝𝑡 , 𝑡) + 𝑣𝑡
Далее
будем
рассматривать
задачу
о
построении
последовательности
стабилизирующихся оценок {𝜃𝑡 } при следующих условиях:
A. Функция 𝑓(∙) сильно выпуклая, т.е. имеет единственный максимум в ℝ𝑚
для каждого n в некоторой точке 𝜃 = 𝜃(𝑓(∙)).
И ⟨∇𝑓(𝑤, 𝑝, 𝑡), 𝑝 − 𝜃𝑡 ⟩ ≥ 𝜇‖𝑝 − 𝜃𝑡 ‖2 ,∀𝑝 ∈ ℝ𝑚 с некоторой постоянной 𝜇 > 0.
B. Условие Липшица с константой M на градиент функции 𝐹(∙ , 𝑤, 𝑡) для
∀𝑡, 𝑤
‖∇ 𝐹(𝑝, 𝑤, 𝑡) − ∇ 𝐹(𝑞, 𝑤, 𝑡)‖ ≤ 𝑀‖𝑝 − 𝑞‖,
∀𝑝, 𝑞 ∈ ℝ𝑚
С. Локальное свойство Лебега: ∀𝑝 ∈ ℝ𝑚 , ∀𝑛 ∃ окрестность 𝑈𝑝,𝑛 и функция
Ф𝑝 (𝑤, 𝑡): 𝐸𝑤 Ф𝑝 (𝑤, 𝑡) < ∞ такие, что ∀𝑝 ∈ 𝑈𝑝,𝑡 ‖∇ 𝐹(𝑝, 𝑤, 𝑡)‖ ≤ Ф𝑝 (𝑤, 𝑡).
D. Скорость дрейфа точки минимума ограничена следующими условиями:
∀𝑡, ‖𝜃𝑡 − 𝜃𝑡−1 ‖ ≤ 𝐴, 𝐸𝑤 |∇ 𝐹(𝜃𝑡 , 𝑤, 𝑛)|2 ≤ 𝐵,
𝐸𝑤1 ,𝑤2 |𝐹(𝑝, 𝑤1 , 𝑡) − 𝐹(𝑝, 𝑤2 , 𝑡 − 1)|2 ≤ 𝐶‖𝑝 − 𝜃𝑡−2 ‖2 + 𝐷
E. Для помех наблюдения 𝑣𝑛 выполнены условия
|𝑣2𝑡 − 𝑣2𝑡−1 | ≤ 𝜎𝑣
Либо, если они представляют собой последовательность случайных величин, то
𝐸{|𝑣2𝑡 − 𝑣2𝑡−1 |2 } ≤ 𝜎𝑣2
F. Случайные величины ∆𝑡 (рандомизация входа алгоритма) и 𝑤2𝑡 , 𝑤2𝑡−1 не
зависят между собой, а также от 𝜃̃0 , 𝑤𝑘 , 𝑘 = 1, 2, ⋯ , 2𝑡 − 2, и 𝜃𝑘 , 𝑘 = 1, 2, ⋯ , 2𝑡.
Если 𝑣𝑘 предполагаются случайной природы, то ∆𝑡 , 𝑤2𝑡 , 𝑤2𝑡−1 не зависят от 𝑣𝑘 ,
𝑘 = 1, 2, ⋯ , 2𝑡.
Выполнимость выше перечисленных условий в данной задаче можно обосновать
естественными ограничениями, такими как ограниченность склада, ограниченность
функции спроса, разумность покупателя, стремление правительства к поддержанию
стабильной экономической и военной ситуации в стране и др.
Тогда при выполненных условиях и правильно подобранных входных данных
можно построить алгоритм обеспечивающий сходимость в среднеквадратичном
смысле к набору оптимальных цен.
9
2. Алгоритм решения.
Итак, мы сформулировали стоящую перед нами задачу, выбрали область в
которой будем искать решение. Теперь напишем алгоритм, который будет приводить
нас к цели. Как показано ранее, лучше использовать алгоритмы стохастической
оптимизации, к тому же, когда у нас выполнены условия A-F, обеспечена сходимость
в среднеквадратичном смысле.
Рассмотрим пошаговое выполнение этого алгоритма.
t – номера равных временных интервалов, в нашей задаче подойдут интервалы в
1 сутки.
s - номер товара
k – номер магазина.
∆𝑡 - вектор функция одновременного пробного возмущения, равная ±
1
√𝑚
с
вероятностью 50%.
{𝛼𝑡 } и {𝛽𝑡𝑠 } – последовательность положительных чисел, стремящихся к
нулю.
{𝜃̂𝑡 } – последовательность оценок.
𝑗−𝑘+1 𝑠
𝛽𝑡 ∆𝑡 ,
𝑙
= 𝐹(𝑤𝑡 , 𝑝𝑠𝑡𝑘 , 𝑡) + 𝑣𝑡
𝑝𝑠𝑡𝑘 = 𝜃̂𝑡−1 + (−1)𝑡+𝑗
𝑦𝑡𝑘
𝑝𝑠𝑡𝑘 > 𝐶𝑚
𝑦𝑡 = ∑ 𝑦𝑡𝑘
𝜌𝑡 =
{
{𝑝𝑠𝑡𝑗 |
max
1≤𝑘≤𝑙
𝑘
𝑦𝑡𝑘 (𝑤𝑡 , 𝑝𝑠𝑡𝑘 , 𝑡)
𝜃̂𝑡 = 𝜌𝑡 +
= 𝑦𝑡𝑗 (𝑤𝑡 , 𝑝𝑠𝑡𝑗 , 𝑡)}
𝛼𝑡
∆ ∙ (𝑦𝑡 − 𝑦𝑡−1 )
𝛽𝑡𝑠 𝑡
Шаг 1: Инициализация и выбор коэффициентов.
Так как поведение покупателей постоянно меняется и не существует
статической цены, при которой будет достигаться максимум дохода, то и завершать
алгоритм в какой-то конкретный момент не нужно.
Итак, перед запуском алгоритма нам известны товары и их цены, количество
магазинов и данные о продажах в них. Кроме этого нам необходимо еще рассчитать
коэффициенты 𝛼 и 𝛽, что можно сделать опытным путем при учете ограничений,
вводимых условиями A-E. Подробнее вывод коэффициентов изложен в приложении.
10
На первом шаге алгоритма рассчитываем цены, устанавливаемые на
следующий день по формуле 𝑝𝑠𝑡𝑘 = 𝜃̂𝑡−1 + (−1)𝑡
𝑗−𝑘
𝑙
𝛽𝑡𝑠 ∆𝑡
Параметры для инициализации алгоритма:
𝑡 = 1 - первый день.
j = 1 – предположим, что максимум выручки было в первом магазине.
𝜃̂0𝑘 – цены, которые были установлены в магазинах до момента запуска
алгоритма.
𝛽𝑡𝑠 = 0.001 ∙ 𝜃̂0𝑠 - одна десятая процента от стоимости товара
𝛼 = 1/(𝐹(𝑡 = 0) − 𝐹(𝑡 = −1))- единица деленная на разницу функций прибыли в
моменты времени, предшествующие запуску алгоритма
Шаг 2. Генерация вектора пробного возмущения.
Генерируем 𝑚 мерный вектор случайных возмущений ∆𝑡 , в котором все 𝑚
компонент случайно смоделированы по вероятностному распределению Бернулли
±
1
√𝑚
с вероятностью 1⁄2 для каждого результата.
Шаг 3. Измерение значений функции.
По истечении рабочего дня получим k измерений функции 𝑦(∙) в точках 𝜃̂𝑡−1
возмущенной относительно текущей оценки. То есть, узнаем, сколько составили
продажи в магазинах. И посчитаем суммарную выручку. Полученное значение
является искаженным помехами, эффект которых учитываем в коэффициентах 𝛼 и 𝛽.
Шаг 4. Определение лучшей оценки.
По полученным данным определим набор цен, который дал максимальную
выручку.
𝜌𝑡 = {𝑝𝑠𝑡𝑗 | max 𝑦𝑡𝑘 (𝑤𝑡 , 𝑝𝑠𝑡𝑘 , 𝑡) = 𝑦𝑡𝑗 (𝑤𝑡 , 𝑝𝑠𝑡𝑗 , 𝑡)}
1≤𝑘≤𝑙
Шаг 5. Обновление оценки 𝜃̂.
𝜃̂𝑡 = 𝜌𝑡 +
𝛼𝑡
∆ ∙ (𝑦𝑡 − 𝑦𝑡−1 )
𝛽𝑡 𝑡
Шаг 6. Итерация.
Возвратимся к шагу 2, с заменой t на t+1.
Завершение алгоритма.
На самом деле, нет смысла завершать алгоритм, так как поведение клиентов не
устойчиво, и поэтому требуется постоянная корректировка оптимального результата.
11
III.
Описание пользовательского приложения.
Решаемая задача максимизации прибыли достаточно актуально и её решение
очень востребовано, поэтому в качестве её реализации используется удобное и
доступное приложение, которое предоставляет следующие сервисы:

Рекомендация цены для максимизации выручки

Рекомендация объема закупок для минимизации издержек

Просмотр статистики
Приложение реализовано на языке Visual Basic.Net и представляет собой
совокупность связанных между собой файлов форм, файлов обработчиков событий,
модулей функций и базы данных. Рассмотрим эти составляющие подробнее.
Интерфейс приложения состоит из следующих форм:

Стартовая форма

Форма сервиса статистики

Форма сервиса максимизации прибыли

Форма рекомендаций

Форма описания сервисов
На стартовой форме пользователь может выбрать интересующий его сервис и
прочитать краткое описание сервисов.
В форме сервиса статистики пользователь может просматривать изменения
продаж, как по отдельным товарам, так и по всем.
12
В форме сервиса максимизации прибыли пользователь вводить данные
необходимые для произведения итерации алгоритма, а именно размер выручки по
13
всем
магазинам
и
объем
продаж
по
каждому
товару.
После ввода данных пользователь перенаправляется на страницу рекомендаций,
на которой ему предоставляется таблица рекомендаций цен и объема закупок.
Основным элементом управления является элемент форм DataGridView типа
ComboBox. Этот элемент специально предназначен для отображения информации из
баз данных, а тип ComboBox позволяет не только просматривать, но и редактировать.
Именно на этот элемент и созданы обработчики событий связанные с обращениями к
базе данных.
Запросы к базе данных хранятся непосредственно в процедурах обработчиков
событий элементов формы.
Функции, процедуры и переменные/аргументы необходимые для работы
алгоритма максимизации прибыли хранятся в модулях Functions.vb и Arguments.vb
соответственно.
В действительности данное приложение является средой для работы с большими
объемами данных, которые разумнее всего хранить в базе данных. Кроме того
использование структур баз данных позволит избежать создания ненужных массивов,
которые использовались в модели тестирования. Это обстоятельство будет вносить
свои изменения в работу функций, используемых при тестировании. Теперь они будут
брать данных непосредственно из столбцов базы данных, обрабатывать их и сразу
записывать полученный результат в базу данных. Рассмотри подробнее структуру
14
базы данных, чтобы понимать, где какие данные находятся. К тому же это поможет
пониманию шагов выполнения алгоритма.
База данных которую мы используем в приложении создаем заранее на Microsoft
SQL server и потом строим связь с ней через функции технологии LINQ
15
IV.
Модель тестирования.
Для проверки созданного алгоритма максимизации валовой прибыли на
пригодность было разработано приложение для тестирования с управляемыми
входящими параметрами и управляемыми помехами.
После ввода начальных данных запускался алгоритм, который повторялся 1000
раз для каждой пары параметров α и β. В итоге получали максимальное, минимальное
и среднее количество итераций, необходимых паре α и β на то чтобы алгоритм
сошелся.
Чтобы понять, когда нужно закончить испытания, во входящих параметрах
вводится погрешность, которая показывает, на сколько процентов допустимо
отклонение от оптимума. Как только оценка цены дает значение прибыли, которое
попадает в допустимое отклонение, так сразу выводим информацию о количестве
итераций.
Для того чтобы узнать, попала ли прибыль в область допустимых значений
необходимо знать не только погрешность, но значение оптимальной цены. А его
вычислить в условиях постоянно меняющейся функции спроса невозможно.
Поэтому воспользуемся выпуклостью функции прибыли:
𝛿 − отклонение,
𝑃 ∗ − оптимальная цена
Тогда
𝑃∗ ∙ (1 − 𝛿) < 𝑃 ∗ < 𝑃∗ ∙ (1 + 𝛿)
𝐹(𝑃∗ ) > 𝐹(𝑃∗ ∙ (1 ± 𝛿))
𝐼𝑓 𝐹(𝑃? ) > 𝐹(𝑃? ∙ (1 ± 𝛿)) => 𝑃? ∈ (𝑃∗ ∙ (1 − 𝛿); 𝑃∗ ∙ (1 + 𝛿))
F(P)
F(P*)
F(P*±δ)
P*-δ
P* P*+δ
P
16
Для того чтобы было возможно применить такой подход необходимо уметь
считать значения функций выручки и издержки в зависимости от цены на каждом
шаге. Рассмотрим модели для этих функций.
17
1.
Модель функции выручки
Выручка
𝐻
𝑅 = ∑𝐾
𝑙=1 ∑𝑚=1 𝑝𝑚𝑙 ∙ 𝑁𝑚𝑙
Мы знаем, что зависимость N от p выглядит следующим образом:
N
P
Тогда в общем виде можно представить так:
𝑁(𝑝) =
𝐴
+ 𝐷, где 𝐴, 𝐵, 𝐶, 𝐷 ∈ ℝ, 𝐶 ≥ −1
(𝐵 + 𝑝)𝐶
При инициализации алгоритма проверки коэффициенты A,B,C,D заполняем
случайным образом, а в ходе исполнения алгоритма будем их искажать на случайное
значение 𝜀𝑖 .
В итоге
𝐹(𝑝) = 𝑝 ∙ 𝑁(𝑝) = ((𝐵+𝜀
𝐴+𝜀1
(𝐶+𝜀3 )−1
2 )+𝑝)
+ (𝐷 + 𝜀4 ) ∙ 𝑝
18
2.
Модель функции издержек
Издержки
𝐻
𝐸 = ∑𝐾
𝑙=1 ∑𝑚=1 𝑘𝑚𝑙 𝐶𝑚
Как упоминалось в описании задачи объем закупок товара в оптимуме должен
повторять объем продаж и чтобы не упускать выручку необходимо иметь небольшой
запас.
Но кроме выбора оптимального объема закупок нужно постараться
минимизировать себестоимость, которая складывается из закупочной стоимости
товара, затрат на транспортировку, затрат на складирование.
Рассмотрим от чего зависят составляющие себестоимости:

На закупочную стоимость товара мы повлиять не можем, так как она
устанавливается поставщиком.

Затраты на транспортировку зависят от удаленности поставщика и частоты
закупок.

Затраты на складирования зависят от того как долго и как много места
занимает товар.
Условие ограниченности склада и стремление его эффективного использования
ставит перед нами два вопроса: когда и сколько заказывать. Для того чтобы ответить
на них необходимо знать вместимость склада, объем единицы каждого товара,
особенности его размещения и др. Эти данные легко формализуемы и исчислимы, и
существует достаточно много программ и алгоритмов позволяющих контролировать
склад. Поэтому не будем акцентировать внимание на этом и ограничимся созданием
алгоритма, который будет предоставлять рекомендацию об объеме товара, который
необходимо иметь на складе к началу следующего дня.
Выручка в магазине за прошедший день:
𝑅 = ∑𝐾
𝑚=1 𝑃𝑚𝑡−1 ∙ 𝑛𝑚𝑡−1
Нас интересует, какие будут продажи на следующий день 𝑧𝑚𝑡 .
Точно вычислить их невозможно, при этом не хочется допускать потерю
возможной выручки, из-за недостаточного количества товара на складе, или
заскладирование, т.е. излишние запасы, которые ведут к неэффективному
использованию площадей склада.
Предлагается следующий вариант вычисления закупок по товару i.
𝑧𝑖𝑡 = 𝑧𝑖𝑡−1 + 1,1 ∙ (𝑛𝑖𝑡−1 − 𝑛𝑖𝑡−2 ) − (𝑧𝑖𝑡−1 − 𝑛𝑖𝑡−1 )
Где 𝑧𝑖𝑡−1 - закупки на предыдущий день
𝑛𝑖𝑡−1 − 𝑛𝑖𝑡−2 - изменения в продажах
𝑧𝑖𝑡−1 − 𝑛𝑖𝑡−1 - остаток на складе
19
«Изменения в продажах» позволяют прогнозировать возможные изменения в
продажах, а, следовательно, и в закупках. Точно вычислять это значение нам не
требуется, так как все непроданные единицы товара переносятся на остаток склада
следующего дня.
Так же дополнительные 10% товаров позволяют избежать потери выручки, и
при этом не происходит заскладирования, опять же благодаря переносу этих 10% на
остаток склада следующего дня.
20
3. Результаты.
Для получения разносторонних результатов было разработано приложение
тестирования с регулируемыми входными параметрами, отвечающими за
сходимость алгоритма, а остальные показатели генерировались случайным
образом.
Интерфейс
приложения
выглядит
следующим
образом:
В этой форме вводятся входные параметры задачи: количество магазинов и
количество видов товаров. А с помощью кнопок генерируются более объемные
показатели, а также коэффициенты для моделей тестирования.
21
После начала испытаний пользователь попадает на форму настройки коэффициентов
алгоритма
и
просмотра
результатов.
Как видно из скриншотов в данном испытании опробовался случай с 10 магазинами и 500
видами товара. И требовалось с точностью до 0,01% установить оптимальную цену.
𝛽𝑡𝑠 = 0.001 ∙ 𝜃̂0𝑠 - одна десятая процента от стоимости товара
𝛼 = 1/(𝐹(𝑡 = 0) − 𝐹(𝑡 = −1))- единица деленная на разницу функций прибыли в
моменты времени, предшествующие запуску алгоритма
Такая оценка для α и β была получена опытным путем, благодаря проведению
большого количества различных испытаний. И как видно такое задание коэффициентов
обеспечивает хорошие показатели сходимости. А именно в среднем около 6 итераций.
При этом как видно из 1000 случаев встречаются несколько почти точного попадания
цены, то есть к оптимуму приводятся за одну итерацию, об этом нам говорит показатель
минимального количества итераций.
Но так же бывают и единичные случаи фатального сбоя. Как было отмечено, они
чаще встречаются при большом количестве товаров и вызваны изменением функции
спроса так, что существующая оценка цены для предыдущего момента времени будет
давать бесконечный спрос. В реальной жизни такое может случится только в
исключительных случаях, таких как ядерная война.
Красными точками на графике показаны изменения наших приближений от
начального (ближе всего к нулю) к оптимальному.
22
V.
Заключение.
Результатом работы является спроектированная информационная система,
помогающая максимизировать валовую прибыль. алгоритм стохастической
оптимизации функции с почти произвольными помехами и плавающей точкой
экстремума, приложение тестирования разработанного алгоритма.
В итоге спроектированная информационная система представляет собой
эффективный и удобный инструмент, направленный на решение задачи
максимизации валовой прибыли. Эффективность работы алгоритма доказана
множеством испытаний, в большинстве из которых требуется около 6 итераций
на достижение точки оптимума, при этом валовая прибыль при самом плохом
стартовом положении случае увеличивается в несколько раз. А если изначально
цена была близка к оптимальной, то требуется не больше 2х итераций.
Достигнутые высокие результаты свидетельствуют о перспективности
применения алгоритмов типа SPSA к задачам экономики, которые раньше
разрешить не было возможным.
23
VI.
Список литературы.
1) Вахитов А. Т., Граничин О. Н., Гуревич Л. С. Алгоритм стохастической
аппроксимации с пробным возмущением на входе в нестационарной задаче
оптимизации. – 2009.
2) Граничин О. Н., Поляк Б. Т. Рандомизированные алгоритмы оценивания и
оптимизации при почти произвольных помехах. 2003 год.
3) Gurevich L., Vakhitov A. SPSA Algorithm for Tracking // In Proc. 12-th
International Student Olympiad on Automatic Control (Baltic Olympiad). 2008.
PP. 52-57.
4) Вахитов А.Т, Граничин О.Н., Гуревич Л.С. Алгоритм стохастической
аппроксимации с пробным возмущением на входе в нестационарной задаче
оптимизации. 2009 год
5) Paul Krugman,Robin Wells, Microeconomics, 2-е издание, 2008 год
6) В.В. Деньгов, Микроэкономика 2, Часть I и II, 2007 год
24
Download