- •Аннотация
- •Бланк задания Особенности и методы создания модели торговой точки
- •Постановка задачи
- •Задания для самостоятельной работы
- •Содержание
- •Введение
- •1. Формулировка проблемы
- •2. Аналитический обзор возможностей исследования подвижной торговой точки
- •3. Обоснование выбранного подхода к моделированию
- •4. Описание концептуальной модели
- •5. Формализация и алгоритмизация модели
- •6. Описание алгоритмов и программы
- •7. Инструкции по использованию программы при моделировании
- •8. Результаты моделирования и анализ полученных на модели результатов
- •Заключение
- •Список используемой литературы
5. Формализация и алгоритмизация модели
Входные переменные для построения данной модели:
Среднее значение дневной выручки от продажи всех видов товаров на всех пунктах торговли;
Средняя величина внеплановых убытков на каждом пункте;
Вероятность того, что в каждом из пунктов торговой точки будет причинен внеплановый убыток;
Относительная величина среднего квадратического отклонения дневной выручки, одинакового для всех пунктов торговли и всех видов товара;
Минимальное значение случайной величины для эталонного усеченного нормального распределения;
Максимальное значение случайной величины для эталонного усеченного нормального распределения;
Число случайных реализаций товара.
Квантиль нормального распределения Ка = 1,645 (Надежность α = 0,95). Константа, заданная в условии задачи.
Требуется установить:
– минимальная гарантированная прибыль с уровнем гарантии а (при α = 0,95 квантиль нормального распределения Kα = 1,645) для каждого пункта торговли.
В качестве показателя эффективности моделируемого процесса целесообразно выбрать минимальную гарантированную выручку для каждой торговой точки.
В качестве критерия выбора оптимального режима работs склада можно выбрать торговую точку, для которой величина показателя эффективности – средней прибыли – будет максимальной.
6. Описание алгоритмов и программы
В качестве языка программирования для разработки компьютерной модели рассматриваемого процесса выбран Delphi 7.0.
Общий вид стартовой формы показан на рис. 1. Она включает следующие объекты управления:
1– 9 текстовые поля «Средняя выручка»
10–12 текстовые поля «Средний убыток»
13–15 текстовые поля «Вероятность убытка»
16 текстовое поле «Относительное СКО выручки»
17 текстовое поле «Минимальная относительная выручка»
18 текстовое поле «Максимальная относительная выручка»
19 текстовое поле «Число случайных реализаий»
20–23 текстовые поля «Гарантийная минимальная прибыль»
Командная кнопка «Расчет»
Командная кнопка «Очистка»
Командная кнопка «Выход»
1-9
10-12
13-15
16
17
18
19
20-23
Рис.1. Макет стартовой формы
Схема алгоритма процедур обработки объектов показана на рис. 2.
Рис.2. Схема алгоритма процедур обработки объектов
При запуске файла Start.exe активизируется стартовая форма. С этого момента программа находится в режиме ожидания действий пользователя.
Цифрой 1 обозначено действие, заключающееся в корректировке исходных данных. Необходимые изменения вносятся в соответствующие текстовые поля.
Цифрой 2 обозначено действие, заключающееся в нажатии (с помощью мыши) кнопки «Расчет». В процедуре, связанной с этой кнопкой, оператор 3 осуществляет перевод исходных данных из символьной формы в числовую. Затем оператор 4 обращается к модулю общего назначения «MyModule». После окончания работы модуля и выдачи на экран результатов моделирования работа процедуры, связанной с кнопкой «Расчет», заканчивается. Программа вновь переходит в режим ожидания действий пользователя
Цифрой 5 на схеме обозначено действие пользователя, заключающееся в нажатии кнопки «Очистка». В процедуре, связанной с ней, производится очищение текстовых полей для вывода показателя эффективности и значения числового фактора. Затем может быть произведено изменение исходных данных и проведены новые расчеты с использованием кнопки «Расчет».
Цифрой 7 на схеме обозначено действие пользователя, заключающееся в нажатии кнопки «Выход». В результате работа программы прекращается.
Схема алгоритма (в соответствии с корректировкой исходного задания) модуля «MyModule» показана на рис. 3.
Рис. 3. Схема алгоритма модуля «MyModule»
Оператор 1 обнуляет глобальные переменные:
суммарную прибыль длzкаждого пункта торговли для всех случайных реализаций моделируемого процесса Tsumi (i= 1, 2, 3);
сумму квадратов прибыли для каждого пункта торговли ли всех случайных реализаций моделируемого процесса Tsum2i (i=1,2,3).
Оператор 2 является началом циклического перебора случайных реализаций, а оператор 3 осуществляет циклический пер бор пунктов торговли.
Оператор 4 обращается к процедуре, вырабатывающей возможные значения случайной величины η с усеченным нормальным распределением при заданных нормированных параметра Tmin и Tmax/
Оператор 5 определяет возможное значение выручки для 1-г пункта торговли от продажи 1-го вида товара и помещает результат в сумматор:
где η – возможное значение случайной величины с усеченным нормальным распределением.
Операторы 6 и 7 определяют случайное приращение выручки для 1-го пункта торговли от продажи 2-го вида товара и помещают результат в сумматор:
Аналогичным образом операторы 8 и 9 определяют случайное приращение выручки для 1-го пункта торговли от продажи 3-1 вида товара и помещают результат в сумматор:
Операторы 10 и 11 моделируют появление случайного события с заданной вероятностью. Оператор 10 с помощью датчика случайных чисел с равномерным распределением в интервале (0,1) вырабатывает возможное значение этой величины z. Если в операторе 11 выполняется условие z< Pi то считается, что в даyном пункте торговли имели место внеплановые убытки.
Операторы 12 и 13 определяют возможное значение внепланового убытка, который вычитается из накопленной суммарной выручки:
В операторе 14 определяются:
• суммарная величина прибыли для всех случайных реализаций моделируемого процесса, определяемая по рекурсивной формуле
;
• сумма квадратов величин прибыли для всех случайных реализаций моделируемого процесса, определяемая по рекурсивной формуле
.
После этого управление в алгоритме передается оператору 3 для моделирования процесса продажи товаров на 2-м, а затем и на 3-м пунктах торговли.
Оператор 15 служит для расчета показателя эффективности моделируемого процесса по следующим зависимостям:
;
;
где МПР.i – математическое ожидание (среднее значение) прибыли для i-го пункта торговли; – среднее квадратическое отклонение прибыли для i-го пункта торговли; – минимальная гарантированная прибыль с уровнем гарантии а (при α = 0,95 квантиль нормального распределения Kα = 1,645).
Оператор 16 выводит на экран значения показателей эффективности для всех трех пунктов торговли.
Ниже представлен листинг программы с исправлениями, дополнениями (выделены темно-красным цветом) и комментариями (выделены синим цветом).
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, Mask, DBCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Edit13: TEdit;
Edit14: TEdit;
Edit15: TEdit;
Edit16: TEdit;
Edit19: TEdit;
Edit20: TEdit;
Edit21: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit17: TEdit;
Edit18: TEdit;
Edit22: TEdit;
Edit23: TEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Edit24: TEdit;
Edit25: TEdit;
Edit26: TEdit;
Button2: TButton;
Button3: TButton;
Label11: TLabel;
Label12: TLabel;
Shape1: TShape;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
Procedure MyModule(Sender:TObject);
Function UNR(sender:tobject):real;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j:integer;
T:array[1..3,1..3] of real;
U,P:array[1..3]of real;
sigm,tmin,tmax,z:real;
eta,TS:real;
Nr:integer;
implementation
{$R *.dfm}
//процедура завершения программы
procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Close;
end;
//процедура заполнения заголовков
procedure TForm1.FormActivate(Sender: TObject);
begin
Edit16.Text:='Средняя выручка';
memo1.Text:='Средний убыток';
memo2.Text:='Вероятность убытка';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
//проверка на введенные данные, иначе вывод сообщения об ошибке
If (Edit2.text='')or(Edit5.text='')or(Edit8.text='')or(Edit10.text='')or
(Edit13.text='')or(Edit3.text='')or(Edit6.text='')or(Edit9.text='')or
(Edit11.text='')or(Edit14.text='')or(Edit19.text='')or(Edit21.text='')or
(Edit12.text='')or(Edit15.text='')or(Edit17.text='')or(Edit18.text='')or
(Edit22.text='')or(Edit23.text='')then
MessageDlg('Внимание! Заполнены не все поля исходных данных! Заполните пустые и нажмите кнопку "Расчет"',mtInformation,[mbCancel],0)else begin
//присваиваем значение полей таблицы переменным
t[1,1]:=strtofloat(Edit2.text);
t[1,2]:=strtofloat(Edit3.text);
t[1,3]:=strtofloat(Edit19.text);
t[2,1]:=strtofloat(Edit5.text);
t[2,2]:=strtofloat(Edit6.text);
t[2,3]:=strtofloat(Edit20.text);
t[3,1]:=strtofloat(Edit8.text);
t[3,2]:=strtofloat(Edit9.text);
t[3,3]:=strtofloat(Edit21.text);
U[1]:=strtofloat(Edit10.text);
U[2]:=strtofloat(Edit11.text);
U[3]:=strtofloat(Edit12.text);
P[1]:=strtofloat(Edit13.text);
P[2]:=strtofloat(Edit14.text);
P[3]:=strtofloat(Edit15.text);
sigm:=strtofloat(edit17.Text);
Tmin:=strtofloat(edit18.Text);
Tmax:=strtofloat(edit22.Text);
Nr:=strtoint(edit23.Text);
mymodule(sender);
end;
end;
//Вводим только числа и запятые+backspace
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if not(key in['0'..'9',',','.',#8,#13]) then key:=#0; //перечисление всех допустимых символов
end;
//очистка текстовых полей
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit2.Clear;
Edit5.Clear;
Edit8.Clear;
Edit10.Clear;
Edit13.Clear;
Edit3.Clear;
Edit6.Clear;
Edit9.Clear;
Edit11.Clear;
Edit14.Clear;
Edit19.Clear;
Edit20.Clear;
Edit21.Clear;
Edit12.Clear;
Edit15.Clear;
Edit17.Clear;
Edit18.Clear;
Edit22.Clear;
Edit23.Clear;
Edit24.Clear;
Edit25.Clear;
Edit26.Clear;
end;
// Функция "усеченное нормальное распределение"
Function Tform1.UNR(sender:tobject):real;
var e:real;
k:byte;
begin
e:=0;
For k:=1 to 12 do
begin
z:=random;
e:=e+z;
end;
e:=e-6;
if (e>=tmin) and (e<=tmax) then unr:=e; end;
//процедура, в которой производятся все расчеты
Procedure TForm1.MyModule(Sender:TObject);
Var
Tsum,tsum2:array[1..3] of real;
ir:integer;
mcp:array[1..3] of real;
sigma:array[1..3] of real;
Gar:array[1..3] of real;
disp:real;
const R=1.645;
begin
//обнуление сумм, используемых для расчета МО и СКО
For i:=1 to 3 do
begin
tsum[i]:=0;
tsum2[i]:=0;
end;
// начало цикла случайных реализаций
For Ir:=1 to Nr do begin
//начало цикла перебора торговых точек
For i:=1 to 3 do
begin
eta:=UNR(sender);
TS:=T[i,1]*(1+sigm*eta);
eta:=UNR(sender);
TS:=TS+T[i,2]*(1+sigm*eta);
eta:=UNR(sender);
TS:=TS+T[i,3]*(1+sigm*eta);
z:=random;
if z<P[i] then begin
eta:=UNR(sender);
TS:=Ts-U[i]*(1+sigm*eta);
end;
Tsum[i]:=Tsum[i]+TS;
Tsum2[i]:=Tsum2[i]+TS*TS;
end;
end;
// расчет показателей (МО и СКО) для каждой точки
For i:=1 to 3 do begin
Mcp[i]:=Tsum[i]/Nr; // расчет средней прибыли
// расчет дисперсии и СКО прибыли
If Nr>1 then
begin
Disp:=(Tsum2[i]-Nr*sqr(Mcp[i]))/(Nr-1);
sigma[i]:=sqrt(disp);
end else sigma[i]:=0;
// минимальная гарантированная прибыль
Gar[i]:=Mcp[i]-R*sigma[i];
end;
// вывод результатов расчета
edit24.text:=floattostr(round(Gar[1]));
edit25.text:=floattostr(round(Gar[2]));
edit26.text:=floattostr(round(Gar[3]));
end;
end.