15.06.2011, 13:48 | #1 (permalink) |
Новичок
Регистрация: 15.06.2011
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Программа имитационного моделирования
Код:
Program masterskayaSMO; uses crt,graph; Const m=4; { конечная длина очереди} n=3; {количество каналов} T=8; {время работы СМО} Lam=5; {интенсивность потока заявок} tobsl_a=1; {время обслуживания} eps=0.15; {погрешность} alfa=0.01; {уровень значимости} Var kol: integer; {количество заявок поступивших в систему} kobr: integer; {количество обработанных заявок} kotk: integer; {количество заявок, получивших отказ} tpost: real; {момент поступления заявки} tau: real; {промежуток между поступлдениями заявок} pmin: integer; {номер прибора (канала) освободившегося раньше всех} Tob: real; {время поступления заявки, которую мы взяли на обслуживание} tauob: real; {длительности обслуживания приборами} tosv: array [1..n] of real; {моменты освобождения приборов} indoch: integer; {индикатор очереди (количесвто заявок в очереди)} ocht: array [1..m] of real; {моменты поступления заявок в очереди} potk: array [1..100] of real; {вероятность отказа в обслуживании} otnpropsp: array [1..100] of real; abspropsp: array [1..100] of real; stog: array [1..100] of real; {среднее время ожидания заявки в очереди} Srtog: real; tog: real;{общее время ожидания в офереди заявок} stpreb: array [1..100] of real; {ср. время пребывания заявки в очереди} tpreb: real; {общее время пребывания заявки в системе} ploA: real; {площадь А, где А - величина для определения средней длины очереди } sdloch: array [1..100] of real; {средняя длина очереди} Ni: integer; {число проведенных испытаний} Nz: integer; {число испытаний всего (заданное)} {вспомогательные элементы} i: integer; R: real; temp: real; {задание начальных данных для одной реализации} Procedure BeginData; Begin kol:=0; {количество заявок поступивших в систему} kobr:=0; {количество обработанных заявок} kotk:=0; {количество заявок получивших отказ} tpost:=0; {момент поступления заявки} pmin:=0; {номер прибора (канала)освободившегося раньше всех} Tob:=0; {время поступления заявки, которую мы взяли на обслуживание} tauob:=0; {длительности обслуживания приборами} for i:=1 to n do begin tosv[i]:=0; {моменты освобождения приборов} end; indoch:=0; {индикатор очереди (количество заявок в очереди)} for i:=1 to m do begin ocht[i]:=0; {моменты поступления заявок} end; tog:=0; {общее время ожидания в очереди заявок} tpreb:=0; {общее время пребывания заявок в системе} ploA:=0; {площадь А, где А - величина для определения средней длины очереди} End; Procedure GenerateNewZayavka; var R:real; {случайное число от 0 до 1} tau: real; {промежуток между поступлениея заявки} Begin R:=0; while R=0 do R:=random; tau:=(-1/Lam)*ln(R); {} Tpost:=Tpost+tau; {} PloA:=PloA+tau*IndOch; End; Procedure WriteZayavkaToOchered; Begin OchT[IndOch+1]:=Tpost; IndOch:=IndOch+1; End; Procedure ReadFromandModifyOchered; var I: integer; { вспомогательная переменная} Begin Tob:=OchT[1]; I:=1; while (I+1<IndOch) do begin OchT[I]:=OchT[I+1]; I:=I+1; end; OchT[IndOch]:=0; IndOch:=IndOch-1; Kobr:=Kobr+1; End; Procedure Obslugivanie; Var R:real; {случайное число от 0 до 1} Begin tog:=tog+TOsv[Pmin]-Tob; R:=0; While R=0 do R:=random; if R>0.4 then tauob:=tobsl_a else tauob:=tobsl_b; Tosv[Pmin]:=Tosv[Pmin]+tauob; tpreb:=tpreb+TOsv[Pmin]-Tob+tauob; End; Procedure FormTosv; Var R: real; {случайное число от 0 до 1} Begin R:=0; While R=0 do R:=random; if R>0.4 then tauob:=0.4 else tauob:=0.8; Tosv[Pmin]:=Tpost+tauob; Kobr:=Kobr+1; End; Procedure BMSp1; Begin ReadFromandModifyOchered; Obslugivanie; End; Procedure BMSp2; Begin FormTosv; GenerateNewZayavka; Kol:=Kol+1; End; Procedure BMSz1; Begin WriteZayavkaToOchered; GenerateNewZayavka; Kol:=Kol+1; End; Procedure BMSz2; Begin Kotk:=Kotk+1; GenerateNewZayavka; Kol:=Kol+1; End; Procedure BASp; Begin if indoch=0 then BMSp2 else BMSp1; End; Procedure BASz; Begin if IndOch=m then BMSz2 else BMSz1; End; Procedure BOOS; var i:integer; {вспомогательная переменная} Begin Pmin:=1; for i:=2 to n do begin if Tosv[i]<Tosv[Pmin] then Pmin:=i; end; if Tosv[Pmin]<Tpost then BASp else BASz; End; BEGIN randomize; Nz:=1000; Ni:=1; for i:=1 to Nz do begin potk[i]:=0; stog[i]:=0; stpreb[i]:=0; sdloch[i]:=0; otnpropsp[i]:=0; abspropsp[i]:=0; end; While Ni<=Nz do Begin {WriteLn('Новая реализация!');} BeginData; R:=0; while R=0 do R:=random; tau:=(-1/Lam)*ln(R); Tpost:=Tpost+tau; While Tpost<T do begin { writeln('---пришла заявка---'); writeln('Bpeмя поступления =', Tpost:5:3); writeln('Cocтoяниe приборов до обработки заявки'); } BOOS; { writeln('---Результаты ее обработки---'); writeln ('Количество=',коl, 'бработанных=',kobr,' Отказано=', kotk); writeln('HoMep "наиболее свободного" прибора=',pmin); writeln('Bpeмя поступления заявки, которую взяли обслужить=',Tob:5:3); writeln ('Длительность обслуживания=', tauob:5:3); writeln ('Время освобождения приборов'); for i:=1 to n do begin write(' ',i,'=',tosv[i]:5:3); end; writeln; writeln ('Количество занятых мест в буфере=', indoch); for i:=1 to m do begin writeln ('Время поступления заявки, которая находится на',i,'месте в буфере=', ocht[i]:5:3); end; writeln(); if readkey=#27 then halt; } end; kotk:=kotk+indoch; if (kol<>0) and (kobr<>0) then begin writeln(); write('Realizaciya #_',Ni) ; Writeln('_Kolichestvo=_', kol,'_Obrabotannih=_',kobr,'_Otkazano=_',kotk); Potk[Ni]:=kotk/kol; write('_Potk=_',Potk[Ni]:5:3); Otnpropsp[Ni]:=kobr/kol; write('_q=_', Otnpropsp[Ni]:5:3); Abspropsp[Ni]:=kobr/T; write('_Q=_', Abspropsp[Ni]:5:3); Stog[Ni]:=tog/kobr; write('_Stog=_', Stog[Ni]:5:3); Stpreb[Ni]:=tpreb/kobr; write('_Stpreb=_',Stpreb[Ni]:5:3); SdlOch[Ni]:=PloA/T; writeln('_L=_', round(SdlOch[Ni])); writeln(); if readkey=#27 then halt; Ni:=Ni+1; end; temp:=0; for i:=1 to Nz do begin temp:=temp+Potk[i]; end; end; writeln('Potk=_',temp/Nz:5:3); temp:=0; for i:=1 to Nz do temp:=temp+Sdloch[i]; writeln('L =_', round(temp/Nz)); temp:=0; for i:=1 to Nz do temp:=temp+Stog[i]; writeln('Stog=_',(temp/Nz):5:3); temp:=0; for i:=1 to Nz do temp:=temp+Stpreb[i]; writeln('STpreb=_', (temp/Nz):5:3); temp:=0; for i:=1 to Nz do temp:=temp+Otnpropsp[i]; writeln('q=_', (temp/Nz):5:3); writeln('Q=_',Lam*(temp/Nz):5:3); readln; END. |
15.06.2011, 13:48 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Посоветую вам прочитать эти темы, они схожи с вашей Помогите найти программу для 3D моделирования Программа для трёхмерного моделирования Программа |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|