- •Курсовая работа
- •1) Словесное описание модели.
- •2) Допущения при создании модели.
- •3)Принятие решения о реконструкции.
- •4)Принятие решения о закрытии одного из заводов.
- •1)Дискретно – детерминированная модель.
- •Численность трудоспособного населения
- •Если назаводах проведеноодинаковое кол-во реконструкций, то,
- •2) Непрерывно-детерминированная модель.
- •Численность трудоспособного населения
- •3) Дискретно-стохастическая модель.
- •5) Агрегативная модель.
- •Агрегат а5 – модель сбора и хранения данных для предоставления в дальнейшем высшему управлению.
- •Если заводы в равных условиях, то
Агрегат а5 – модель сбора и хранения данных для предоставления в дальнейшем высшему управлению.
H(t1) = , где t1=0,,2*,... ; t2 = + t1
R(t1) = , где t1=0,,2*,... ; t2 = + t1
D(t1) = , где t1=0,,2*,... ; t2 = + t1
Eco0(t1) = ,где t1=0,,2*,... ; t2 =+ t1
N(t1) = N’(t2),t2 =+ t1
W(t1) =(wм(t2)+ wд(t2) + T7*d(wм(t2)+ wд(t2))/dt2),t2=+t1
gмкр() = , t2=+t1
gдкр (t1) =, t2=+t1
Когда t2 - t1= , то агрегат передает информацию на агрегат А6; t1= t1+.
Агрегат A6 – модель высшего управления
Данный агрегат через каждый равный интервал времени проводит анализ работы заводов и принимает решение о проведении реконструкции и/или инвестициях в экологию и здравоохранение.
Решение принимается на основе следующих соображений:
а) увеличение инвестиций на период 1, 2, 3 принимается по схеме, описанной в непрерывно-детерминированной модели в разделе Принятие решения об административном воздействии.
б) проведение реконструкции в период
кол-во больных составляет более 30% от числа работающих в данном периоде:
(H(t1)+T8*d H(t)/dt) >0.3 * (N(t1) + T6*dN(t)/dt)
2) кол-во работающих на мартеновском не должно опускаться ниже половины имеющихся на заводе рабочих мест:
wм(t1) + dwм(t)/dt < Kolм/2
3) кол-во умерших за период не должно быть более 30% от больных:
(D(t1)+dD(t)/dt)/ (H(t1)+d H(t)/dt) > 0.3
4) кол-во реально работающих не меньше, чем 60% от имеющихся рабочих мест:
(wм(t1)+ dwм(t)/dt+wд(t1)+dwд(t)/dt)/N0 < 0.6, где N0 – кол-во рабочих мест на заводах города.
5) уровень загрязнения превышает критический:
Eco0(t1) > Ecokp
6) если истек запланированный срок эксплуатации и заводу требуется реконструкция:
gм(t1)+dgм(t)/dt >= gмкр и/или gд(t1)+dgд(t)/dt >= gдкр ,
где gмкр , gдкр – критические сроки эксплуатации заводов.
Решение о выборе завода, на котором будет проводиться реконструкция остается неизменным.
Если заводы в равных условиях, то
если Ecoм(t1)+dEcoм(t)/dt < Ecoд(t1)+dEcoд(t)/dt и выполняются условия: (Ecoд(t1)+dEcoд(t)/dt)/ (Eco(t1)+dEco(t)/dt) <0,6 и (gд(t1)+dgд(t)/dt)/gkpд< 0,7, где gkpд – критическое время работы доменного завода, - то реконструируют мартеновский, в противном случае - доменный.
Если же высшим управлением было принято решение о реконструкции в течение времени :
а) мартеновского завода иб) доменного завода агрегаты функционируют ан-но сходным процессам, описанным в части непрерывно-детерминированная модель.
III) Решение о выборе способа моделирования.
На основе приведенных выкладок можно сделать предположение о том, что агрегативная модель наилучшим способом отражает функционирование системы. Однако она требует более сложную математическую базу и в данном случае не оправдает себя; для описания системы подойдет дискретно-стохастическая модель, но при дополнительных условиях:
в систему будут включены новые условия, описанные в разделе непрерывно-детерминированная модель, которые будут влиять на принятие решения либо о закрытии заводов на реконструкцию, либо о дополнительных инвестициях;
интервал будет уменьшен до 2 недели, тогда запланированные реконструкции будут проводиться через 10 лет (240 итераций);
интервалы ,1,2,3 будут соответственно равны 4 недели, 6 недель, 6 недели, 2 недели;
после реконструкций, с целью учета НТР, на соотвествующем заводе будет происходить снижение уровня выбросов на 5%;
фонды FUNDS будут восстанавливаться после окончания последних инвестиций;
инвестиции начинаются все одновременно и сразу же по получении соответствующего сигнала.
В таком случае в формализованном виде имеем следующую модель.
период обычного функционирования:
изменения будут касаться только
а) вида уравнений миграции населения – к миграции в город прибавляется Q*1/2*MNGT3,а из миграции в область вычитают Q*1/2*MNGT3, где Q – коэфф. пропорциональности влияния денежных ср-в на миграцию населения.
б) вида уравнений загрязнения окружающей среды – из каждого вычтут по V*1/2* MNGT1, где V – коэфф. пропорциональности влияния денежных ср-в на загрязнение окружающей среды
в) вида уравнений заболеваемости – к лечению добавляют, а из заболеваемости вычитают S*½ * MNGT2.
период функционирования во время реконструкций и инвестировании:
по аналогии с формализованным видом в разделе непрерывно-детермининированная модельможно записать механизм работы заводов во время реконструкций и дополнительного инвестирования.
Принятие решения об административном воздействии.
Всего администрация выделяет FUNDS средств на проведение мероприятий по контролю за состоянием заводов и работающих там людей. В связи с этим при изменении какого-либо из факторов, влияющих на производительность, администрация проводит ряд мер по уменьшению загрязнения, заболеваемости, убытию населения в область соответственно 1, 2, 3 единиц времени (каждый временной ряд устанавливается по результатам проводимых анализов и специально построенных моделей). Средства восстанавливаются полностью в момент окончания времени воздействия.
Схема функционирования будет схожей с описанной ранее в разделе непрерывно-детерминированная модель.
Таким образом получаем следующие условия:
если Eco0t / Ecokp >0.7
MNGT1=1/4*FUNDS*1/3 в течение 3-х итераций
если Rt/Ht < 0.3
MNGT2=1/2*FUNDS в течение 3-ой итерации
если InMt/OutMt <0.8
MNGT3=1/4*FUNDS в течение 1-ой итерации
Принятие решения о реконструкции одного из заводов.
Если высшим управлением было принято решение о реконструкции в течение времени (2 итерации):
а) мартеновского завода
Миграция трудоспособного населения
Во время реконструкции администрация ограничит отток людей в область таким образом, чтобы InMt >= OutMt
Спустя время в город приедет населения больше на1InM = kolм– (kolм – 1000)/2 + kolд–wд
InMt = 1/ Ecot * Pt * Z + Q*1/2*MNGT3 + 1InM
Состав уезжающих в область не изменится.
Заболеваемость трудоспособного населения.
Кол-во больных на период реконструкции не будет влиять на кол-во трудящихся на обоих заводах, а, сл-но, и на производительность.
Численность трудоспособного населения.
wмt’ = kolм/2 – кол-во работающих на мартеновском заводе
wдt’ = 3/8*(kolд/2) –min кол-во работающих на доменном заводе для нормального функционирования мартеновского завода или (если доменный реконструировался чаще)wд(t’) = 3/8*(kolд-1)/2 ;
если wдt < wдt’, то кол-во работающих на доменном заводе wд = wдt’ и миграция увеличится на InM = wдt’ - wдt.
Тогда кол-во трудоспособного населения
N’t’ = wмt’ + wд +InM + InMt’ – OutMt’ + Ht
В конце периода кол-во рабочих местN0увеличиться на 1000 человек.
Производительность заводов
Производительность мартеновского завода на период реконструкции будет такой же, как при снижении на половину всех рабочих мест
Pмt’=(kolм/2) * A,
а мощность доменного будет не меньше того уровня, при котором мартеновский сможет нормально функционировать:
Pдt’= (wд) * B
Загрязнение окружающей средыбудет происходить по ранее упомянутым законам, учитывая все описанные воздействия.
УправлениеMNGT после проведения реконструкции восстановит свои фондыFUNDS и будет готово к дальнейшей работе.
б) доменного завода
Миграция
Если население в городе Nt’=Nt на начало реконструкции меньшеwдt’+wмt’, то InMt’= wдt’+wмt’-Nt’+InMt;
если больше, то OutMt’= Nt’ – (wдt’+wмt’) + OutMt.
Причем InMt’ >= OutMt’ и InMt’ - OutMt’ <= M
Спустя период в городе в целом на 1000 увеличится кол-во рабочих мест и на доменном заводе в частности,и приедет населения больше на
InM = kolд– (kolд – 1000)/2 + kolм–wм
InMt = 1/ Ecot * Pt * Z + Q*1/2*MNGT3 + InM
Состав уезжающих в область не изменится.
Заболеваемостьан-но реконструкции мартеновского завода.
Численность трудоспособного населения.
wдt’ = kolд/2 – кол-во работающих на доменном заводе
wмt’ = 2/3*(kolм) - кол-во работающих на мартеновском заводе или (если мартеновский ремонтировался чаще) wмt’ = 2/3*(kolм-1000)
Соотвественно с этим остальное трудоспособное население не найдет себе работы и уедет в область (остаться сможет еще М=0,1*(wдt’+wмt’) человек ).
Тогда кол-во трудоспособного населения
N’t’ = wмt’ + wдt’ + InMt’ – OutMt’ + Ht
Производительность заводов.
Производительность доменного завода на период реконструкции будет равна при снижении на половину числа рабочих мест
Рдt’ =(kolд/2) * B .
Вместе с тем снижение мощности доменного повлияет на мощность мартеновского
Рмt’ = (wмt’) * А
Загрязнение окружающей среды происходит по ранее описанным законам.
Управление после проведения реконструкции восстановит свои фонды FUNDS и будет готово к дальнейшей работе. Однако администрация не может себе позволить больше 5 раз в год проводить дополнительное инвестирование.
IV) Приложения.
Приложение 1. Новая формулировка задания на курсовую работу.
Описание проблемной ситуации. Большая часть горожан работает на 2-ух крупных металлоплавильных заводах: доменном и мартеновском. Первый производит продукцию, ¾ которой идет как сырье на мартеновский завод, а остальная часть сдается государству. Причем стоимость продукции мартеновского завода значительно превышает стоимость продукции доменного. Государство в области металлургии проводит политику по увеличению производства стали высокого качества. Внешних поставщиков сырья для мартеновского завода нет, так как такой способ функционирования в данном случае не рентабелен.
Эти заводы ухудшают экологическую ситуацию в городе, приводя к увеличению заболеваемости и повышению смертности. Трудоспособное население в городе уменьшается, происходит отток населения в область. Возможно проведение реконструкции заводов (каждого в отдельности), что позволит не только уменьшить объем выбросов, но и увеличить количество рабочих мест на 1000 на реконструируемом заводе.
На время реконструкции заводов их мощность снижается до уровня при половинной занятости. После проведения реконструкции предприятия выходят на проектную мощность, и возрастает поток населения в город.
Помимо реконструкции администрация города может предпринимать и другие шаги по снижению загрязнения и, соотвественно, заболеваемости, оттоку населения в область, а также предпринимать шаги, направленные на улучшение здравоохранения, привлечению населения в город.
Цель задания: выбрать такой вариант миграционной политики,инвестирования и проведения реконструкций, чтобы государство получало высококачественный металл, а заводы - наивысшую прибыль.
Приложение 2. Реляционные отношения и запросы.
Отношение 1. Трудоспособное население в городе.
№ полугодия |
Численность населения, тыс. человек |
Кол-во больных, тыс. человек |
Кол-во умерших, тыс. человек |
Миграция в город, тыс. человек |
Миграция в область, тыс. человек |
Суммарное загрязнение |
Кол-во инвестирований |
|
|
|
|
|
|
|
|
Отношение 2. Функционирование заводов.
№ полугодия |
Мощность доменного завода, тыс.руб |
Мощность мартеновского завода, тыс.руб |
Количество реконструкций |
Общее кол-во реконструкций |
Выбросы | ||
домен |
мартен |
домен |
мартен | ||||
|
|
|
|
|
|
На основе этих отношений можно сформулировать несколько запросов.
для периодов, в которых проводилось не более 1 реконструкции вывести данные о номере периода, мощности каждого из заводов и их выбросах:
proj № полугодия, Мощность доменного завода, Мощность мартеновского завода, Выбросы (sel Общее кол-во реконструкций 1 (Функционирование заводов))
получить информацию об общем уровне загрязнения, о количестве больных, уровнях мощности каждого из заводов, количестве инвестирований и номера периодов, когда проводилось более 1 инвестирования:
proj № полугодия, Кол-во инвестирований, Суммарное загрязнение, Кол-во больных, Мощность доменного завода, Мощность мартеновского завода
(sel Кол-во инвестирований >1 (Трудоспособное население в городе) join (Функционирование заводов))
определить периоды, мощности каждого из заводов и кол-во инвестирований, когда уровень суммарного загрязнения в периоде был выше 0.6 (вывести уровень загрязнения):
proj № полугодия, Суммарное загрязнение, Кол-во инвестирований, Мощность доменного завода, Мощность мартеновского завода (sel Суммарное загрязнение > 0.6 (Трудоспособное население в городе) join (Функционирование заводов))
для всех периодов, когда уровень загрязнения доменного завода был выше уровня мартеновского, вывести данные о численности населения, количестве больных и умерших:
proj № полугодия, Численность населения, Кол-во больных, Кол-во умерших (sel Выбросы.домен > Выбросы.мартен (Функционирование заводов) join (Трудоспособное население в городе))
получить информацию о кол-ве заболевших в периодах, в которых кол-во умерших было больше кол-ва въехавших в город, и уровень загрязнения доменного завода был не выше уровня мартеновского:
proj № полугодия, Кол-во больных (sel Кол-во умерших > Миграция в город (Трудоспособное население в городе) join (sel Выбросы.домен > Выбросы.мартен (Функционирование заводов))
Приложение 3.Программная реализация.
Алгоритм работы системы реализован на языке Turbo Pascal 7.0.
В целях нормального функционирования системы и получения правдивого прогноза не следует задавать интервал длиной более 6 – 8 лет (156 – 192 итерации по 2 недели).
Оптимальный вариант использования: построение прогноза на период 3 – 4 лет; запоминание результатов последнего интервала; редактирование коэффициентов в соответствие с изменениями в городе и стране и с учетом НТР.
program model;
uses crt,tpuframe;
Type
rel1=record
numzap:integer;
pptn:real;
kill:real;
kdth:real;
kim:real;
kom:real;
ecosum:real;
ki:integer;
end;
rel2=record
numzap:integer;
powerd:real;
powerm:real;
krd:integer;
krm:integer;
sumr:integer;
pltnd:real;
pltnm:real;
end;
mas1 = array [1..100] of rel1;
mas2 = array [1..100] of rel2;
var
masrel1:mas1;
masrel2:mas2;
upgrd,upgrm:integer;
n0,k:integer;{basic amount of workers}
nr,np,nc:real;{amount of workers in fact}
kolm,kold:integer;{basic amount of workers in every industry}
wmc,wmp,wdc,wdp:real;{amount of workers now/before in fact}
eco,ecop,ecok,ecod,ecom,eps:real;
gm,gd,gmk,gdk:real;
hc,hp,rc,rp,dthc,dthp:real;
pd,pm,pc,pp:real;
funds:real;
kinv,krst,krstd,krstm:integer;
isum,nint,i:integer;
x,yng,pns,a,b,c,d,e,f,g,a1,a2,b1,b2,q,s,v,z,koeff:real;
t1,t2,t3,len:integer;
im,imp,om,omp:real;
sumh,sumd,sim,som,sumecod,sumecom,sumpm,sumpd:real;
mngt1,mngt2,mngt3:real;
file1:file of rel1;
file2:file of rel2;
reg1,reg2:string;
tmp1,rasd,rasm:real;
pr,y,tmp2:integer;
procedure variables;
Begin
yng:=1/160;
pns:=1/200;
a:=14;
b:=8;
c:=0.008;
d:=1.5;
e:=0.002;
f:=0.0001;
g:=0.0007;
a1:=0.001;
a2:=0.0012;
b1:=0.00026;
b2:=0.00028;
q:=0.0003;
s:=0.006;
v:=0.009;
z:=0.000003;
koeff:=0.073;
End;
procedure filrecs;
begin
nint:=nint+1;
if k=12 then
begin
masrel1[nint].numzap:=nint;
masrel1[nint].pptn:=np;
masrel1[nint].kill:=sumh;
masrel1[nint].kdth:=sumd;
masrel1[nint].kim:=sim;
masrel1[nint].kom:=som;
masrel1[nint].ecosum:=ecop;
masrel1[nint].ki:=kinv;
sim:=0;
som:=0;
sumh:=0;
sumd:=0;
masrel2[nint].numzap:=nint;
masrel2[nint].powerd:=sumpd;
masrel2[nint].powerm:=sumpm;
masrel2[nint].krd:=upgrd;
masrel2[nint].krm:=upgrm;
masrel2[nint].sumr:=upgrd+upgrm;
masrel2[nint].pltnd:=sumecod;
masrel2[nint].pltnm:=sumecom;
sumpd:=0;
sumpm:=0;
upgrd:=0;
upgrm:=0;
sumecod:=0;
sumecom:=0;
write(file1,masrel1[nint]);
write(file2,masrel2[nint]);
end;
if k=24 then
begin
masrel1[nint].numzap:=nint;
masrel1[nint].pptn:=np;
masrel1[nint].kill:=sumh;
masrel1[nint].kdth:=sumd;
masrel1[nint].kim:=sim;
masrel1[nint].kom:=som;
masrel1[nint].ecosum:=ecop;
masrel1[nint].ki:=kinv-masrel1[nint-1].ki;
kinv:=0;
sim:=0;
som:=0;
sumh:=0;
sumd:=0;
masrel2[nint].numzap:=nint;
masrel2[nint].powerd:=sumpd;
masrel2[nint].powerm:=sumpm;
masrel2[nint].krd:=upgrd;
masrel2[nint].krm:=upgrm;
masrel2[nint].sumr:=upgrd+upgrm;
masrel2[nint].pltnd:=sumecod;
masrel2[nint].pltnm:=sumecom;
isum:=0;
krst:=0;
sumpd:=0;
sumpm:=0;
upgrd:=0;
upgrm:=0;
sumecod:=0;
sumecom:=0;
k:=0;
write(file1,masrel1[nint]);
write(file2,masrel2[nint]);
end;
end;
procedure invest;
begin
if t1=0 then
if ((isum<=12) and (kinv<2)) or ((isum>12) and (isum<=24) and (kinv<5)) then
if ((gm<gmk) or (gd<gdk)) then
if (((eco/ecok)>0.7)or((rc>0.01)and(hc>0.01)and((rc/hc)<0.3))or((abs(nr-n0)>1)and((im/om)<0.8))) then
begin
kinv:=kinv+1;
mngt1:=1/4*funds*1/3;
mngt2:=1/2*funds*1/3;
mngt3:=1/4*funds;
ecom:=ecom-V*1/2*mngt1;
ecod:=ecod-V*1/2*mngt1;
if ecom<=0 then ecom:=0.015;
if ecod<=0 then ecod:=0.017;
eco:=ecop+ecom+ecod;
if eco>0.5 then eco:=0.34;
hc:=hc-s*1/2*mngt2;
if hc<0 then hc:=0.000001;
rc:=rc+s*1/2*mngt2;
if rc>hc then rc:=hc;
dthc:=(1+(eco-ecop)/eco)*hp*koeff;
if dthc<0 then dthc:=0.00001;
om:=om-q*1/2*mngt3;
if om<0 then om:=0.0001;
im:=im+q*1/2*mngt3;
if ((im-om)>0.1*n0) then im:=0.1*n0+om;
if ((imp+np)>1.1*n0) then om:=im+imp+np-1.1*n0;
if om-im>0.08 then om:=im+0.08;
Nr:=nc-dthc-om+im;
wmc:=(nr-hc)*kolm/n0;
wdc:=nr-hc-wmc;
if wmc>kolm then
begin
om:=om+wmc-kolm;
nr:=nr-wmc+kolm;
wmc:=kolm;
end;
if wdc>kold then
begin
om:=om+wdc-kold;
nr:=nr-wdc+kold;
wdc:=kold;
end;
t1:=2;
t2:=2;
mngt3:=0;
end;
end;
procedure reconstrd;
var counter:integer;
uim,u1im:real;
e:integer;
Begin
counter:=1;
sim:=sim-imp;
som:=som-omp;
krst:=krst+1;
upgrd:=upgrd+1;
k:=k-1;
while (counter<3) do
begin
counter:=counter+1;
gd:=gd+0.5;
gm:=gm+0.5;
if counter=2 then
begin
np:=np;
end
else np:=nr;
wdp:=kold/2;
wmp:=wmc;
if (krstd-1=krstm) then
begin
if wmp<(2/3*(kolm)) then
begin
wmp:=(2/3*(kolm));
uim:=wmp-wmc;
end;
wmp:=(2/3*(kolm));
end;
if (krstd-1<krstm) then
begin
if wmp<(2/3*(kolm-1)) then
begin
wmp:=(2/3*(kolm-1));
uim:=wmp-wmc;
end;
wmp:=(2/3*(kolm-1));
end;
if counter=2 then
begin
ecop:=ecop;
hp:=hp;
nint:=nint-1;
end
else
begin
ecop:=eco;
hp:=hc;
end;
sumh:=hp+rp;
if sumh<0 then sumh:=0;
rp:=rc;
dthp:=dthc;
sumd:=sumd+dthp;
{production}
Pm:=3*wmp*a;
sumpm:=sumpm+pm;
Pd:=1.8*(wdp)*b;
sumpd:=sumpd+pd;
pc:=pm+pd;
{eco}
ecom:=rasm*(b1*pm+a1*gm)-eps/2-V*1/2*mngt1;
ecod:=rasd*(b2*pd+a1*gd)-eps/2-V*1/2*mngt1;
if ecom<=0 then ecom:=0.015;
if ecod<=0 then ecod:=0.017;
sumecom:=sumecom+ecom;
sumecod:=sumecod+ecod;
eco:=ecop+ecom+ecod;
if eco>0.69 then eco:=0.63;
{health}
tmp1:=0.00003;
hc:=c*(ecop)+hp-rp+1/(1-eco)*tmp1-s*1/2*mngt2;
if hc<0 then hc:=0.002;
rc:=hp*(1-(eco-ecop)/eco)*d+s*1/2*mngt2;
dthc:=(1+(eco-ecop)/eco)*hp*koeff;
if dthc<0 then dthc:=0.000001;
{migration}
im:=1/eco*pc*Z+q*1/2*mngt3+uim;
if (im>0.1*(wmp+wdp)) then om:=im-0.1*(wmp+wdp);
om:=f*eco+g*(hc-hp+dthc-dthp)-q*1/2*mngt3+om;
if om<0 then om:=0.000001;
if (om-im)>0.08 then om:=im+0.08;
if ((imp+np)>=1.1*(wmp+wdp)) then om:=im+imp+np-1.1*(wmp+wdp);
imp:=im;
omp:=om;
{real population}
Nr:=wdp+wmp;
wmc:=wmp;
wdc:=wdp;
if wmc>kolm then
begin
om:=om+wmc-kolm;
nr:=nr-wmc+kolm;
wmc:=kolm;
end;
if wdc>kold then
begin
om:=om+wdc-kold;
nr:=nr-wdc+kold;
wdc:=kold;
end;
imp:=im;
omp:=om;
sim:=sim+imp;
som:=som+omp;
k:=k+1;
if (k=12)or(k=24) then filrecs;
if counter=2 then i:=i+1;
isum:=isum+1;
end;
i:=i+1;
n0:=n0+1;
kold:=kold+1;
u1im:=kolm-2/3*kolm+1+(kold-1)/2;
wmc:=kolm;
wdc:=kold;
im:=1/eco*pc*z+u1im;
om:=f*eco+g*(hc-hp+dthc-dthp);
if (om-im)>0.08 then om:=im+0.08;
if om<0 then om:=0.000001;
nr:=2/3*kolm+(kold-1)/2+im-om;
gd:=0;
rasd:=rasd-0.05;
i:=isum+1;
End;
procedure reconstm;
var counter:integer;
uim,u1im:real;
Begin
counter:=1;
sim:=sim-imp;
som:=som-omp;
krst:=krst+1;
upgrm:=upgrm+1;
k:=k-1;
while (counter<3) do
begin
counter:=counter+1;
gd:=gd+1;
gm:=gm+0.5;
if counter=2 then
begin
nint:=nint-1;
np:=np;
end
else np:=nr;
wmp:=kolm/2;
wdp:=wdc;
if (krstm-1=krstd) then
if wdp<(3/8*(kold)) then
begin
wdp:=3/8*(kold);
uim:=wdp-wdc;
end;
if (krstm-1<krstd) then
if wdp<(3/8*(kold-1)) then
begin
wdp:=(3/8*(kold-1));
uim:=wdp-wdc;
end;
if counter=2 then
begin
ecop:=ecop;
hp:=hp;
sumh:=hp;
end
else
begin
ecop:=eco;
hp:=hc;
sumh:=hc;
end;
if sumh<0 then sumh:=0;
rp:=rc;
dthp:=dthc;
sumd:=sumd+dthp;
{production}
Pm:=3*(wmp)*a;
sumpm:=sumpm+pm;
Pd:=1.8*(wdp)*b;
sumpd:=sumpd+pd;
pc:=pm+pd;
{eco}
ecom:=(b1*pm+a1*gm)*rasm-eps/2-V*1/2*mngt1;
ecod:=(b2*pd+a1*gd)*rasd-eps/2-V*1/2*mngt1;
if ecom<=0 then ecom:=0.015;
if ecod<=0 then ecod:=0.017;
sumecom:=sumecom+ecom;
sumecod:=sumecod+ecod;
eco:=ecop+ecom+ecod;
if eco > 0.69 then eco:=0.63;
{health}
hc:=c*(ecop)+hp-rp+1/(1-eco)*e-s*1/2*mngt2;
if hc<0 then hc:=0.001;
rc:=hp*(1-(eco-ecop)/eco)*d+s*1/2*mngt2;
dthc:=(1+(eco-ecop)/eco)*hp*koeff;
if dthc<0 then dthc:=0.000001;
{migration}
om:=f*eco+g*(hc-hp+dthc-dthp)-q*1/2*mngt3;
if om<0 then om:=0;
im:=1/eco*pc*Z+q*1/2*mngt3+uim;
if (om-im)>0.08 then
begin
om:=im+0.08;
end;
if ((imp+np)>(wdp+wmp)*1.1) then
begin
om:=im+imp+np-1.1*(wdp+wmp);
end;
{real population}
imp:=im;
omp:=om;
Nr:=wdp+wmp;
wmc:=wmp;
wdc:=wdp;
if wmc>kolm then
begin
om:=om+wmc-kolm;
nr:=nr-wmc+kolm;
wmc:=kolm;
end;
if wdc>kold then
begin
om:=om+wdc-kold;
nr:=nr-wdc+kold;
wdc:=kold;
end;
imp:=im;
omp:=om;
sim:=sim+imp;
som:=som+omp;
k:=k+1;
if counter=2 then i:=i+1;
if (k=12)or(k=24) then filrecs;
isum:=isum+1;
end;
n0:=n0+1;
kolm:=kolm+1;
u1im:=kolm-(kolm-1)/2+kold-wdc;
wmc:=kolm;
wdc:=kold;
im:=1/eco*pc*z+u1im;
if im>0.1*n0 then om:=im-0.1*n0;
om:=f*eco+g*(hc-hp+dthc-dthp)+om;
if om>im then om:=im-0.1*n0;
if om<0 then om:=0.0001;
if ((imp+np)>1.1*n0)then om:=im+imp+np-1.1*n0;
nr:=n0+im-om;
if nr>n0 then
begin
om:=om+nr-n0;
nr:=n0;
end;
gm:=0;
rasm:=rasm-0.05;
End;
procedure reconst;
var flag,f:integer;
Begin
flag:=0;
if t1=0 then
if ((hc>0.3*nr)or((eco/ecok)>0.70)or(wmc<kolm/2)or(dthc/hc>0.3)or((wmc+wdc)/n0<0.6))
then flag:=1;
if ((eco>ecok)or(gm>=gmk)or(gd>=gdk)) then flag:=1;
while (flag<>0) do
begin
repeat
until keypressed;
if krstm=krstd then
if ((ecom<ecod) and ((ecod/eco)<0.6) and ((gd/gdk)<0.7)) then
begin
krstm:=krstm+1;
reconstm;
f:=1;
end
else
begin
krstd:=krstd+1;
reconstrd;
f:=1;
end;
if ((f<>1)and(krstm>krstd))then
begin
krstd:=krstd+1;
reconstrd;
end
else
if ((f<>1)and(krstm<krstd)) then
begin
krstm:=krstm+1;
reconstm;
end;
flag:=0;
end;
end;
procedure filename;
Var
i:integer;
St:string;
rec:rel1;
Begin
ClrScr;
WindowFrame(1,1,80,24,7,0);
clrscr;
WindowFrame(15,10,65,14,1,14);
writeln('Input filename for relation1:');
CursorOn;
readln(reg1); reg1:=reg1+'.rpt';
CursorOff;
assign(file1,reg1);
rewrite(file1);
WindowFrame(1,1,80,24,7,0);
clrscr;
WindowFrame(1,1,80,24,7,0);
clrscr;
WindowFrame(15,10,65,14,1,14);
writeln('Input filename for relation2:');
CursorOn;
readln(reg2); reg2:=reg2+'.rpt';
CursorOff;
assign(file2,reg2);
rewrite(file2);
WindowFrame(1,1,80,24,7,0);
clrscr;
End;
procedure output1;
var
i:integer;
rec:rel1;
tf:text;
s1:string;
Begin
begin
clrscr;
assign(tf,reg1);
rewrite(tf);
writeln(tf,' half і popltn і num of і num of і num of і num of і sumeco і num of');
writeln(tf,' year і і ill і died і in-men і out-men і polutn і investn ');
writeln(tf,'ДДДДДЕДДДДДДЕДДДДДДДЕДДДДДДЕДДДДДДЕДДДДДДДЕДДДДДДЕДДДДДДД');
reset(file1);
For i:=1 to nint do
Begin
write(tf,masrel1[i].numzap:5,'і',masrel1[i].pptn:6:3,'і',masrel1[i].kill:7:3,'і',masrel1[i].kdth:6:3,'і');
writeln(tf,masrel1[i].kim:6:3,'і',masrel1[i].kom:7:3,'і',masrel1[i].ecosum:6:3,'і',masrel1[i].ki:4);
end;
close(tf);
end;
End;
procedure output2;
var
i:integer;{ЁвҐа жЁ® п ЇҐаҐ¬Ґ п}
rec:rel2;{ўбЇ®¬®Ј ⥫м п ЇҐаҐ¬Ґ п ¤«п а Ў®вл б д ©«®¬}
tf:text;
s1:string;
Begin
begin
clrscr;
assign(tf,reg2);
rewrite(tf);
writeln(tf,' halfіpowerdі powermіnum of restrtіsumnum іpollution by');
writeln(tf,' yearіmln.r.і mln.r.і domenіmartenіof rectіdomen іmarten ');
writeln(tf,'ДДДДДЕДДДДДДЕДДДДДДДЕДДДДДДЕДДДДДДЕДДДДДДДЕДДДДДДЕДДДДДДД');
reset(file2);
For i:=1 to nint do
Begin
write(tf,masrel2[i].numzap:5,'і',masrel2[i].powerd:6:1,'і',masrel2[i].powerm:7:1,'і',masrel2[i].krd:6,'і');
writeln(tf,masrel2[i].krm:6,'і',masrel2[i].sumr:7,'і',masrel2[i].pltnd:6:3,'і',masrel2[i].pltnm:6:3);
end;
close(tf);
end;
End;
procedure main;
Begin
clrscr;
randomize;
filename;
variables;
sumh:=0;sumd:=0;sim:=0;som:=0;sumecod:=0;
sumecom:=0;sumpm:=0;sumpd:=0;
upgrd:=0;
upgrm:=0;
rasd:=1;rasm:=1;
N0:=24;
Nr:=24;
kolm:=11;
kold:=13;
wmc:=11;
wdc:=13;
eco:=0.10;ecok:=1;
gm:=0;gd:=0;
gmk:=240;gdk:=240;
hc:=0.008;rc:=0.007;
sumh:=0.08;
dthc:=0;
pc:=0;
funds:=20000;
kinv:=0;
krst:=0;krstm:=0;krstd:=0;
isum:=-1;
t1:=0;t2:=0;t3:=0;
nint:=0;
write('Input the length of period (2 weeks) ');
readln(len);
k:=0;
for i:=0 to len-1 do
begin
k:=k+1;
if i>0 then
begin
gm:=gm+1;
gd:=gd+1;
end;
isum:=isum+1;
x:=random(1);
if x<=0.35 then eps:=0.09;
if ((x>0.35) and (x<= 0.6)) then eps:=0.15;
if ((x>0.6) and (x<=0.95)) then eps:=0.17
else eps:=0.25;
np:=nr;
wmp:=wmc;
wdp:=wdc;
pp:=pc;
ecop:=eco;
hp:=hc;
sumh:=sumh+hp;
rp:=rc;
dthp:=dthc;
sumd:=sumd+dthp;
imp:=im;
sim:=sim+imp;
omp:=om;
som:=som+omp;
{incr abs population}
nc:=exp(yng - pns)*np;
{production}
Pm:=3*(wmp)*a;
sumpm:=sumpm+pm;
Pd:=1.8*(wdp)*b;
sumpd:=sumpd+pd;
pc:=pm+pd;
{eco}
if t1<>0 then
begin
mngt1:=1/4*funds*1/3;
mngt2:=1/2*funds*1/3;
t1:=t1-1;
t2:=t2-1;
end
else
begin
mngt1:=0;
mngt2:=0;
mngt3:=0;
end;
ecom:=rasm*(b1*pm+a1*gm)-eps/2-V*1/2*mngt1;
ecod:=rasd*(b2*pd+a2*gd)-eps/2-V*1/2*mngt1;
if ecom<=0 then ecom:=0.015;
if ecod<=0 then ecod:=0.017;
if ((ecom>1) or (ecod>1))then
begin
tmp2:=1;
break;
end;
sumecom:=sumecom+ecom;
sumecod:=sumecod+ecod;
eco:=ecop+ecom+ecod;
if (k=12)or(k=24) then filrecs;
{health}
hc:=c*(ecop)+hp-rp+1/(1-eco)*e-s*1/2*mngt2;
if hc<0 then hc:=0.002;
rc:=hp*(1-(eco-ecop)/eco)*d+s*1/2*mngt2;
if hc<rc then rc:=hc;
dthc:=(1+(eco-ecop)/eco)*hp*koeff;
if dthc<0 then dthc:=0;
{migration}
om:=f*eco+g*(hc-hp+dthc-dthp)-q*1/2*mngt3;
if om<0 then om:=0.0001;
im:=1/eco*pc*Z+q*1/2*mngt3;
if ((imp+np)>=1.1*n0) then om:=im+imp+np-1.1*n0;
{real population}
if (om-im)>0.080 then om:=im+0.08;
Nr:=nc-dthc-om+im;
wmc:=(nr-hc)*kolm/n0;
wdc:=nr-hc-wmc;
if wmc>kolm then
begin
om:=om+wmc-kolm;
nr:=nr-wmc+kolm;
wmc:=kolm;
end;
if wdc>kold then
begin
om:=om+wdc-kold;
nr:=nr-wdc+kold;
wdc:=kold;
end;
invest;
if t1=0 then reconst;
end;
close(file1);close(file2);
clrscr;
if tmp2=1 then
begin
WindowFrame(1,1,80,24,7,0);
WindowFrameWithTitel(20,7,60,21,1,14,'WARNING');
writeln('System has made error. To continue');
writeln('write down the last good result,');
writeln('Change parameters of system');
writeln('according to the scientific progress');
writeln('and ecological demands.');
readkey;
end;
output1;
output2;
clrscr;
End;
procedure usermenu(var y:integer);
var
ch:char;
begin
clrscr;
CursorOff;
WindowFrame(1,1,80,24,7,0);
WindowFrameWithTitel(20,7,60,12,1,14,'Њ…Ќћ ЏЋ‹њ‡Ћ‚Ђ’…‹џ');
{writeln; }
writeln(' Запуск системы ');
writeln(' Выход из программы ');
ch:=#1;
while (ch<>#13) do
begin
MakeColorString(22,y,59,magenta,white);
ch:=readkey;
MakeColorString(22,y,59,blue,14);
if ch=#72 then y:=y-1;
if ch=#80 then y:=y+1;
if y=7 then y:=9;
if y=10 then y:=8;
end;
end;
Begin
pr:=0;
y:=8;
while (pr=0) do
BEGIN
UserMenu(y);
clrscr;
case y of
8 : main;
9 : pr:=1;
end;
clrscr;
end;
End.
Список использованной литературы:
Годин В.В.,Маджуга Н.В. Методическое пособие. Математические основы информатики. М.:ГАУ, 1992 г. - 70 с.
Годин В.В.,Маджуга Н.В. Методическое пособие. Математические основы модеоирования. М.:ГАУ, 1992 г. - 70 с.
Советов В.Я.,Яковлев С.А. Моделирование систем. М.: Высш. шк., 1985 г.-271с.