Математическая постановка задачи

Автор работы: Пользователь скрыл имя, 20 Декабря 2012 в 14:37, курсовая работа

Краткое описание

Целью данной курсовой работы является построение простейшей статистической модели системы массового обслуживания и написание универсальной программы по её реализации. Для достижения этой цели в работе решены следующие задачи:
 изучен алгоритм построения простейшей модели системы массового обслуживания;
 изучены основные характеристики простейшей модели системы массового обслуживания
 выбран язык программирования, позволяющий реализовать указанную модель;

Вложенные файлы: 1 файл

Курсовая Груздев.docx

— 74.98 Кб (Скачать файл)

Q = 1 + 1 = 2 (при

 

IV событие

Ттек=0.54 – время поступления четвёртой заявки.

Сгенерируем время поступления  пятой заявки:

R=0.230243

T5 = Tтек. + P5 = 0.54 – (1/5)* ln 0.230243=0.83

Так как система работает, ставим заявку в очередь и увеличиваем длину очереди:

Q = 2 + 1 = 3 (при

V событие

Tтек = 0.81 – время окончания обслуживания второй заявки.

Так как очередь не пустая, то берем на обслуживание следующую в очереди заявку , генерируем  время её обслуживания и вычисляем время окончания обслуживания:

R = 0.595449

R>0.5 q = q2 = 0.6

Tок.2 = Tтек. + q = 0.81 + 0.6 = 1.41

Изменяем длину очереди:

Q = 3 – 1 = 2 (при

Определим время ожидания обслуживания:

W = 0+ ( 0.81-0.35 ) = 0.46

 

VI событие

Ттек=0.83 – время поступления пятой заявки.

Сгенерируем время поступления  шестой заявки:

R= 0.542293

T6 = Tтек. + P6 = 0.84 – (1/5)* ln 0.542293=0.96

Так как система работает, ставим заявку в очередь и увеличиваем длину очереди:

Q = 2 + 1 = 3 (при

Примем период моделирования Т=0.9 и определим основные параметры системы.

Определить коэффициент простоя:

Kпрост. = Tпрост. / T * 100% = 0.21/0.9 * 100 = 23.3%

Определим среднее время ожидания обслуживания:

W = 0.46 + ( 0.9 – 0.37 ) = 0.98

Ŵ = W / n = 0.99 / 5 =0.196

Определим среднюю длину очереди:

Q = 0  0 <= T < 0.35  A = 0

Q = 1  0.35 <= T < 0.38  A = 0 + 1 * (0.38 – 0.35) = 0.03

Q = 2  0.37 <= T < 0.54  A = 0.03 + 2 * (0.54 – 0.38) = 0.35

Q = 3  0.54 <= T < 0.81  A = 0.35 + 3 * (0.81 – 0.54) = 1.16

Q = 2  0.81 <= T < 0.84  A = 1.16 + 2 * (0.84 – 0.81) = 1.22

Q = 3  0.84 <= T < 0.9  A = 1.23 + 3 * (0.9 – 0.84) = 1.4

Q = A / T = 1.41 / 0.9 = 1.56

 

3.Интерпретация

Первые задачи теории систем массового обслуживания (ТСМО) были рассмотрены сотрудником Копенгагенской телефонной компании, датским ученым А.К. Эрлангом (1878- 1929г) в период между 1908 и 1922гг. Эти задачи были вызваны  к жизни стремлением упорядочить  работу телефонной сети и разработать  методы, позволяющие заранее повысить качество обслуживания потребителей в  зависимости от числа используемых устройств. Оказалось, что ситуации, возникающие на телефонных станциях, являются типичными не только для  телефонной связи. Работа аэродромов, морских и речных портов, магазинов, терминальных классов, электронных  вычислительных комплексов, радиолокационных станций и т.д. может быть описана  в рамках ТСМО.

Примерами СМО (см. табл. 1) могут служить:

Пример 1. Телефонная связь времен Эрланга представляла из себя телефонную станцию, связанную с большим числом абонентов. Телефонистки станции по мере поступления вызовов соединяли телефонные номера между собой.

Задача: Какое количество телефонисток (при  условии их полной занятости) должно работать на станции для того, чтобы  потери требований были минимальными.

Пример 2. Система скорой помощи некоего городского района представляет собой пункт (который принимает требования на выполнение), некоторое количество автомашин скорой помощи и несколько врачебных бригад.

Задача: Определить количество врачей, вспомогательного персонала, автомашин, для того чтобы  время ожидания вызова было для больных  оптимальным при условии минимизации  затрат на эксплуатацию системы и  максимизации качества обслуживания.

Пример 3. Важной задачей является организация морских и речных перевозок грузов. При этом особое значение имеют оптимальное использование судов и портовых сооружений.

Задача: Обеспечить определенный объем перевозок  при минимальных расходах. При  этом сократить простои судов  при погрузочно-разгрузочных работах.

 

Пример 4. Система обработки информации содержит мультиплексный канал и несколько ЭВМ. Сигналы от датчиков поступают на мультиплексный канал, где буферизуются и предварительно обрабатываются. Затем поступают в ту ЭВМ, где очередь минимальна.

Задача: Обеспечить ускорение обработки  сигналов при заданной суммарной  длине очереди.

 

Таблица 1 
Примеры систем массового обслуживания

СМО

Заявки

Каналы

Автобусный маршрут и  перевозка пассажиров

Пассажиры

Автобусы

Производственный конвейер по обработке деталей

Детали, узлы

Станки, склады

Влетающая на чужую территорию эскадрилья самолетов, 
которая «обслуживается» зенитками ПВО

Самолеты

Зенитные орудия, радары, 
стрелки, снаряды

Ствол и рожок автомата, которые «обслуживают» патроны

Патроны

Ствол, рожок

Электрические заряды, перемещающиеся в некотором устройстве

Заряды

Каскады технического 
устройства

     

 

 

 

4. Перечень идентификаторов

 

 

5. Описание алгоритма

 

 

6. Блок-схема алгоритма

 

 

7. Проверка счёта по программе

При сравнении данных, полученных при решении задачи линейного  программирования, приведённых в  разделе 2 «Решение задачи», с результатами, полученными в ходе работы программы, можно сделать вывод, что программа, реализующая моделирование СМО, работает верно. 

Заключение

В ходе данного курсового  проектирования была написана программа  по построению модели простейшей системы массового обслуживания. Программный продукт был реализован в среде  программирования Delphi 7.0 и протестирована на платформе Windows 7 Начальная 32-разрядная, Процессор Intel(R) Atom(TM) CPU N570 1.66 GHz (4 CPus) ОЗУ 2 Гб

Написанная программа  позволяет построить модель простейшей системы массового обслуживания и провести анализ данной модели на такие параметры, как: среднее время  ожидания обслуживания, средняя длина  очереди, коэффициент простоя. Программа позволяет отражать процесс решения в виде временной диаграммы, что значительно облегчает проверку хода решения и повышает наглядность. Ввод данных в программу осуществляется через поля, специально запрограммированные на отказ от неверного ввода данных и сообщающие об этом в специальном поле. Все эти программные решения и расчёты были реализованы с помощью объектно-ориентированного языка Delphi  (на диалекте Object Pascal в среде разработки Delphi 7.0). Данный язык программирования предоставляет множество достаточно мощных и в тоже время простых для понимания компонентов, позволяющих создать интуитивно-понятный и настраиваемый пользовательский интерфейс, что позволяет сосредоточиться на программной логике кода и написании сложных алгоритмов для решения практически любых задач.

Рассмотрим Delphi подробнее.

Язык программирования Паскаль (Pascal) был создан Н. Виртом в 1968 году специально для обучения студентов. Язык Паскаль представлял собой  квинтэссенцию технологий программирования середины 60-х — эпохи создания структурного программирования. Язык был популярен в университетской  среде Европы (в том числе и  в Советском Союзе). Однако бедная и не вполне удачная система ввода/вывода и отсутствие поддержки разбиения  программ на модули не позволили в  то время Паскалю выйти за пределы  учебных аудиторий. Однако прозрачный и мощный язык послужил основой для  многих экспериментов в области  языков программирования. В начале 80-х годов появилась система  программирования Turbo Pascal фирмы Borland, в  которой использовался расширенный  диалект языка Паскаль с усовершенствованной  системой ввода/вывода и поддержкой модулей. Именно этот диалект языка  и стал наиболее распространенным, так как мог быть использован в создании современных больших приложений. В конце 80-х годов в диалект языка Паскаль от Borland были добавлены объектно-ориентированные расширения, а 1992 году Borland Pascal стал поддерживать программирование для MS Windows. При этом Паскаль сохранил простоту и выразительную мощь учебного языка.

Объектно-ориентированные  средства языка Паскаль прошли большой  путь от простейших объектных расширений в TurboPascal 5.5 до современной объектной  модели Delphi, не уступающей по своим  потенциальным возможностям ни одному объектно-ориентированному языку. Объектная  модель Delphi поддерживает все средства которые могут понадобиться при  объектно-ориентированном программировании. Кроме того, Delphi поддерживает объектные  технологии Microsoft и, следовательно, может  использоваться для создания приложений и компонент COM/DCOM, а в последних версиях и dotNET.

Но основным преимуществом Delphi является его среда программирования с визуальным конструктором программ. Эта среда (вместе с объектной  библиотекой VCL) позволяет эффективно программировать под MS Windows, не отвлекаясь на выяснение всех деталей Win API, а  работать над логикой программы.

Среди этих достоинств Delphi:

  • простой и мощный язык программирования Pascal;
  • удобная и полная объектная модель;
  • достаточно удобная среда разработки;
  • обширная объектная библиотека VCL;
  • мощные средства разработки приложений баз данных.

Достоинствами разработанной программы можно считать:

    • понятный пользовательский интерфейс;
  • Контроль ввода данных.
    • возможность пользователя самому выбирать период моделирования для расчётов программы на основе анализа схемы;

К недостаткам программы  можно отнести:

  • Для построения новой модели приходится перезапускать программу;

Список используемой литературы

 

Приложение 1. Листинг программы

unit Kurs;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, Buttons, Grids, ComCtrls, Menus;

type

  TForm1 = class(TForm)

    pnl1: TPanel;

    lbl1: TLabel;

    pnl2: TPanel;

    lbl2: TLabel;

    edt11: TEdit;

    lbl3: TLabel;

    edt12: TEdit;

    edt13: TEdit;

    edt14: TEdit;

    lbl4: TLabel;

    lbl5: TLabel;

    lbl6: TLabel;

    mmo1: TMemo;

    btn1: TButton;

    Image1: TImage;

    BitBtn1: TBitBtn;

    Memo1: TMemo;

    Panel1: TPanel;

    ScrollBar1: TScrollBar;

    strngrd1: TStringGrid;

    edt1: TEdit;

    ud1: TUpDown;

    Panel2: TPanel;

    Edit1: TEdit;

    BitBtn3: TBitBtn;

    Label1: TLabel;

    LabeledEdit1: TLabeledEdit;

    Edit2: TEdit;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Edit3: TEdit;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    BitBtn4: TBitBtn;

    MainMenu1: TMainMenu;

    N1: TMenuItem;

    N3: TMenuItem;

    N4: TMenuItem;

    Label8: TLabel;

    Label9: TLabel;

    Label10: TLabel;

    Label11: TLabel;

    procedure btn1Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure ScrollBar1Change(Sender: TObject);

    procedure ud1Click(Sender: TObject; Button: TUDBtnType);

    procedure BitBtn3Click(Sender: TObject);

    procedure strngrd1KeyPress(Sender: TObject; var Key: Char);

    procedure edt11KeyPress(Sender: TObject; var Key: Char);

    procedure edt1KeyPress(Sender: TObject; var Key: Char);

    procedure edt12KeyPress(Sender: TObject; var Key: Char);

    procedure edt13KeyPress(Sender: TObject; var Key: Char);

    procedure edt14KeyPress(Sender: TObject; var Key: Char);

    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    procedure BitBtn4Click(Sender: TObject);

    procedure N4Click(Sender: TObject);

    procedure N3Click(Sender: TObject);

    //procedure N21Click(Sender: TObject);

   // procedure prov(Sender: TObject);

  private

 

    { Private declarations }

 

  public

procedure prov;

    { Public declarations }

 

  end;

 

var

 

  Form1: TForm1;

  buf,li,lin:integer;

  tprost:double;

  znach:array of double;  // ìàññèâ ÿíà÷åíèé  íà ëèíèè

  och,pom:array of Integer;  // ìàññèâ î÷åðåäè  è ïîìåòîê

  zap:array of boolean;

implementation

 

//uses Unit2;

 

{$R *.dfm}

 

procedure TForm1.prov;

var i:integer;

begin

if panel2.Visible=false then

begin

mmo1.Clear;

li:=0;

lin:=0;

for i:=0 to strngrd1.Rowcount-1 do if (strngrd1.Cells[0,i]<>'')and (strtofloat(strngrd1.Cells[0,i])<>0) then if strtofloat(strngrd1.Cells[0,i])<1 then li:=li+1;

memo1.lines.Add(inttostr(li));

if li<>strngrd1.RowCount then begin

mmo1.Lines.Add('Ñëó÷àéíûå ÷èñëà íå  ââåäåíû èëè ââåäåíû íå ïðàâèëüíî.');

mmo1.Lines.add('Óäîñòîâåðüòåñü ÷òî âñå  ñëó÷àéíûå ÷èñëà ìåíüøå åäèíèöû.');

end;

if (edt11.text='') or (strtofloat(edt11.text)=0)or(strtofloat(edt11.Text)<1) then begin

mmo1.Lines.Add('Íå ââåäåíî ñðåäíåå  êîëè÷åñòâî êëèåíòîâ â ÷àñ.');

end else lin:=lin+1;;

if (edt12.text='') or (strtofloat(edt12.text)=0)or (strtofloat(edt12.Text)>=1)then begin

mmo1.Lines.Add('Íå ââåäåíî âðåìÿ îáñëóæèâàíèÿ  êëèåíòà â ñëó÷àå, êîãäà ñëó÷àéíîå  ÷èñëî ìåíüøå çíà÷åíèÿ èíòåðâàëà');

//mmo1.Lines.Add('.');

end else lin:=lin+1;

if (edt13.text='') or (strtofloat(edt13.text)=0) or (strtofloat(edt13.Text)>=1) then begin

mmo1.Lines.Add('Íå ââåäåíî âðåìÿ îáñëóæèâàíèÿ  êëèåíòà â ñëó÷àå, êîãäà ñëó÷àéíîå  ÷èñëî áîëüøå èëè ðàâíî çíà÷åíèþ  èíòåðâàëà.');

//mmo1.Lines.Add('');

end else lin:=lin+1;

if (edt13.text='') or (strtofloat(edt13.text)=0) then begin

memo1.Lines.Add('Íå ââåäåí èíòåðâàë.');

end else lin:=lin+1;

if (li=strngrd1.RowCount) and (lin=4) then btn1.Enabled:=true else btn1.Enabled:=false;

end;

end;

 

procedure TForm1.btn1Click(Sender: TObject);

var

r: array  of Double; // ìàññèâ ðàíäîìíûõ  ÷èñåë

q,i,q1,q2,pprost,tok,ttek,tpost,b,w,buf1:double; //p ïðîñòîÿ,? ïðîñòî P, Tîêîí÷àíèÿ Tòåêóùåå Òíà÷àëà  ,tprost ñóììàðíîå âðåìÿ ïðîñòîÿ

shag,s1,s2,l,prost,qo,a,z,j,f,vh,vih,buf2,intr:Integer;// øàã,  ñ÷¸ò÷èê1, ñ÷¸ò÷èê 2 ,ñ÷¸ò÷èê ïðîñòîÿ  ,a,z,j - ïåðåìåííûå äëÿ öèêëîâ çàíåñåíèÿ  â ìàññèâ çíà÷åíèé

begin

setlength(r,strngrd1.RowCount+1);

setlength(znach,strngrd1.RowCount+1);

setlength(och,strngrd1.RowCount+1);

setlength(pom,strngrd1.RowCount+1);

for j:=0 to strngrd1.RowCount-1 do r[j+1]:=StrToFloat(strngrd1.Cells[0,j]);

l:=StrToInt(edt11.Text); //çàíåñåíèå ëÿìáäû

q1:=StrToFloat(edt12.Text);

q2:=StrToFloat(edt13.Text);

i:=StrToFloat(edt14.Text);

shag:=1;

s1:=1;  //ñ÷¸ò÷èê äëÿ ðàíäîìíûõ  ÷èñåë

tpost:=0;

s2:=0;

ttek:=0;

tok:=0;

prost:=0;

q:=0;

qo:=0;

znach[0]:=0;

strngrd1.Options:=[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRangeSelect];

edt11.ReadOnly:=true;

edt12.ReadOnly:=true;

edt13.ReadOnly:=true;

edt14.ReadOnly:=true;

//ïåðâàÿ èòåðàöèÿ îáÿçàòåëüíàÿ  áåç ïðîâåðêè íà çàêîí÷åííîñòü

znach[1]:=ttek+(-(1/l)*ln(r[s1]));

mmo1.Lines.Add(floattostr(znach[1]));

znach[1]:=(round(znach[1]*100))/100;

mmo1.Lines.Add(floattostr(znach[1]));

Информация о работе Математическая постановка задачи