Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Казачков Павел.doc
Скачиваний:
8
Добавлен:
19.04.2013
Размер:
289.79 Кб
Скачать

Агрегат а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 принимается по схеме, описанной в непрерывно-детерминированной модели в разделе Принятие решения об административном воздействии.

б) проведение реконструкции в период 

  1. кол-во больных составляет более 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 будут восстанавливаться после окончания последних инвестиций;

инвестиции начинаются все одновременно и сразу же по получении соответствующего сигнала.

В таком случае в формализованном виде имеем следующую модель.

  1. период обычного функционирования:

изменения будут касаться только

а) вида уравнений миграции населения – к миграции в город прибавляется Q*1/2*MNGT3,а из миграции в область вычитают Q*1/2*MNGT3, где Q – коэфф. пропорциональности влияния денежных ср-в на миграцию населения.

б) вида уравнений загрязнения окружающей среды – из каждого вычтут по V*1/2* MNGT1, где V – коэфф. пропорциональности влияния денежных ср-в на загрязнение окружающей среды

в) вида уравнений заболеваемости – к лечению добавляют, а из заболеваемости вычитают S*½ * MNGT2.

  1. период функционирования во время реконструкций и инвестировании:

по аналогии с формализованным видом в разделе непрерывно-детермининированная модельможно записать механизм работы заводов во время реконструкций и дополнительного инвестирования.

Принятие решения об административном воздействии.

Всего администрация выделяет FUNDS средств на проведение мероприятий по контролю за состоянием заводов и работающих там людей. В связи с этим при изменении какого-либо из факторов, влияющих на производительность, администрация проводит ряд мер по уменьшению загрязнения, заболеваемости, убытию населения в область соответственно 1, 2, 3 единиц времени (каждый временной ряд устанавливается по результатам проводимых анализов и специально построенных моделей). Средства восстанавливаются полностью в момент окончания времени воздействия.

Схема функционирования будет схожей с описанной ранее в разделе непрерывно-детерминированная модель.

Таким образом получаем следующие условия:

  1. если Eco0t / Ecokp >0.7

MNGT1=1/4*FUNDS*1/3 в течение 3-х итераций

  1. если Rt/Ht < 0.3

MNGT2=1/2*FUNDS в течение 3-ой итерации

  1. если 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. для периодов, в которых проводилось не более 1 реконструкции вывести данные о номере периода, мощности каждого из заводов и их выбросах:

proj № полугодия, Мощность доменного завода, Мощность мартеновского завода, Выбросы (sel Общее кол-во реконструкций  1 (Функционирование заводов))

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

proj № полугодия, Кол-во инвестирований, Суммарное загрязнение, Кол-во больных, Мощность доменного завода, Мощность мартеновского завода

(sel Кол-во инвестирований >1 (Трудоспособное население в городе) join (Функционирование заводов))

  1. определить периоды, мощности каждого из заводов и кол-во инвестирований, когда уровень суммарного загрязнения в периоде был выше 0.6 (вывести уровень загрязнения):

proj № полугодия, Суммарное загрязнение, Кол-во инвестирований, Мощность доменного завода, Мощность мартеновского завода (sel Суммарное загрязнение > 0.6 (Трудоспособное население в городе) join (Функционирование заводов))

  1. для всех периодов, когда уровень загрязнения доменного завода был выше уровня мартеновского, вывести данные о численности населения, количестве больных и умерших:

proj № полугодия, Численность населения, Кол-во больных, Кол-во умерших (sel Выбросы.домен > Выбросы.мартен (Функционирование заводов) join (Трудоспособное население в городе))

  1. получить информацию о кол-ве заболевших в периодах, в которых кол-во умерших было больше кол-ва въехавших в город, и уровень загрязнения доменного завода был не выше уровня мартеновского:

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с.

- 1-