Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант 11 КР-МЭП.doc
Скачиваний:
4
Добавлен:
23.08.2019
Размер:
382.98 Кб
Скачать

5. Формализация и алгоритмизация модели

Входные перемен­ные для построения данной модели:

  1. Среднее значение дневной выручки от продажи всех видов товаров на всех пунктах торговли;

  2. Средняя величина внеплановых убытков на каждом пункте;

  3. Вероятность того, что в каждом из пунктов торговой точки будет причинен внеплановый убыток;

  4. Относительная величина среднего квадратического отклонения дневной выручки, одинакового для всех пунктов торговли и всех видов товара;

  5. Минимальное значение случайной величи­ны для эталонного усеченного нормального распределения;

  6. Максимальное значение случайной величи­ны для эталонного усеченного нормального распределения;

  7. Число случайных реализаций товара.

  8. Квантиль нормального распределения Ка = 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.