- •Глава 1. Обзор и анализ технических решений
- •1.1. Характеристика тпк
- •1.2. Обзор программных продуктов для управления предприятиями с дискретными технологическими процессами
- •1.3. Анализ методов моделирования
- •1.4. Сети Петри
- •Выводы по главе
- •Глава 2. Моделирование тпк.
- •2.1. Краткая характеристика объекта моделирования.
- •2.2. Перечень маркеров первичного и вторичного сырья, специалистов, построек, типов местности.
- •2.3. Карта местности и ее районирование
- •2.4. Схемы получения первичного и вторичного сырья.
- •2.5. Реакции получения сырья.
- •Выводы по главе
- •Глава 3. Алгоритмы и программная часть.
- •3.1. Дерево достижимости.
- •3.1.1.Общее описание.
- •3.1.2. Алгоритм построения дерева достижимости.
- •3.1.3. Блок-схема дерева достижимости.
- •3.1.4. Процедура построения дерева достижимости.
- •3.2. Процедуры инициализации и получения сырья.
- •Выводы по главе
- •Заключение
- •Список использованной литературы
3.2. Процедуры инициализации и получения сырья.
Таблица 3.2.1.
TABLE_PROFESSION 1 (Таблица профессий для получения первичного сырья)
PROFESSION_QUALIFICATION |
E |
∆e |
∆θ |
DENSITYINDUSTRY (M2/MAN) |
RESULT |
FARMER |
1 |
0.1 |
∆θFARMER=60 |
5 |
100MFOOD |
SUGAR_PLANTER |
1 |
0.1 |
∆θSUGAR_PLANTER=60 |
5 |
100MSUGAR |
TOBACCO_PLANTER |
1 |
0.1 |
∆θTOBACCO_PLANTER=60 |
5 |
100MTOBACCO |
COTTON_PLANTER |
1 |
0.1 |
∆θCOTTON_PLANTER=60 |
5 |
100MCOTTON |
FUR_TRAPPER |
1 |
0.1 |
∆θFUR_TRAPPER=30 |
10 |
100MFURS |
LUMBERJACK |
1 |
0.1 |
∆θLUMBERJACK=40 |
10 |
100MLUMBER |
ORE_MINOR |
1 |
0.1 |
∆θORE_MINOR=50 |
10 |
100MORE |
SILVER_MINOR |
1 |
0.1 |
∆θSILVER_MINOR=50 |
10 |
100MSILVER |
EXPERT_FARMER |
1 |
0.1 |
∆θEXPERT_FARMER=60 |
5 |
200MFOOD |
EXPERT_SUGAR_PLANTER |
1 |
0.1 |
∆θEXPERT_SUGAR_PLANTER=60 |
5 |
200MSUGAR |
EXPERT_TOBACCO_PLANTER |
1 |
0.1 |
∆θEXPERT_TOBACCO_PLANTER=60 |
5 |
200MTOBACCO |
EXPERT_COTTON_PLANTER |
1 |
0.1 |
∆θEXPERT_COTTON_PLANTER=60 |
5 |
200MCOTTON |
EXPERT_FUR_TRAPPER |
1 |
0.1 |
∆θEXPERT_FUR_TRAPPER=30 |
10 |
200MFURS |
EXPERT_LUMBERJACK |
1 |
0.1 |
∆θEXPERT_LUMBERJACK=40 |
10 |
200MLUMBER |
EXPERT_ORE_MINOR |
1 |
0.1 |
∆θEXPERT_ORE_MINOR=50 |
10 |
200MORE |
EXPERT_SILVER_MINOR |
1 |
0.1 |
∆θEXPERT_SILVER_MINOR=50 |
10 |
200MSILVER |
Таблица 3.2.2.
TABLE_PROFESSION 2 (Таблица профессий для получения вторичного сырья)
PROFESSION_QUALIFICATION |
E |
∆e |
∆θ |
RAW |
ITEM |
RESULT |
DISTILLER |
1 |
0.1 |
∆θDISTILLER=60 |
100MSUGAR |
SUGAR |
50MRUM |
TOBACCONIST |
1 |
0.1 |
∆θTOBACCONIST=60 |
100MTOBACCO |
TOBACCO |
50MCIGARS |
WEAWER |
1 |
0.1 |
∆θWEAWER=60 |
100MCOTTON |
COTTON |
50MCLOTH |
FUR_TRADER |
1 |
0.1 |
∆θFUR_TRADER=60 |
100MFURS |
FURS |
50MCOATS |
EXPERT_DISTILLER |
1 |
0.1 |
∆θEXPERT_DISTILLER=60 |
100MSUGAR |
SUGAR |
100MRUM |
EXPERT_TOBACCONIST |
1 |
0.1 |
∆θEXPERT_TOBACCONIST=60 |
100MTOBACCO |
TOBACCO |
100MCIGARS |
EXPERT_WEAWER |
1 |
0.1 |
∆θEXPERT_WEAWER=60 |
100MCOTTON |
COTTON |
100MCLOTH |
EXPERT_FUR_TRADER |
1 |
0.1 |
∆θEXPERT_FUR_TRADER=60 |
100MFURS |
FURS |
100MCOATS |
BLACKSMITH |
1 |
0.1 |
∆θBLACKSMITH=60 |
100MLUMBER + 100MORE |
LUMBER, ORE |
50MTOOLS |
ARMOURER |
1 |
0.1 |
∆θARMOURER=60 |
100MLUMBER + 100MORE |
LUMBER, ORE |
50MMUSKETS |
EXPERT_BLACKSMITH |
1 |
0.1 |
∆θEXPERT_BLACKSMITH=60 |
100MLUMBER + 100MORE |
LUMBER, ORE |
100MTOOLS |
EXPERT_ARMOURER |
1 |
0.1 |
∆θEXPERT_ARMOURER=60 |
100MLUMBER + 100MORE |
LUMBER, ORE |
100MMUSKETS |
Таблица 3.2.3.
TABLE_AREA (Таблица территорий)
AREA |
LOCATION |
INDUSTRIAS |
FLAG |
FORMULAS |
Mountains |
(49, 40), (47, 39), (43, 29), (43, 28), (44, 29) |
ORE, FORE =0.8, ∆fORE =0.05; SILVER, FSILVER =0.9, ∆fSILVER=0.05; |
ORE=1; SILVER=1 |
FORE:=FORE - ∆fORE; FSILVER:=FSILVER - ∆fSILVER; |
Hill |
(48, 39), (50, 33) |
ORE, FORE =0.8, ∆fORE=0.05; |
ORE=1 |
FORE:=FORE - ∆fORE; |
Rain Forest |
(48, 40), (48, 38), (43, 30) |
SUGAR, FSUGAR =0.1, ∆fSUGAR=0.005; LUMBER, FLUMBER =0.9, ∆fLUMBER=0.05; ORE, FORE =0.8, ∆f=ORE0.05; |
SUGAR=1; LUMBER=1; ORE=0 |
FSUGAR:=FSUGAR - ∆fSUGAR; FLUMBER:=FLUMBER - ∆fLUMBER; FORE:=FORE+FLAG*∆fSUGAR+FLAG*∆fLUMBER - ∆fLUMBER;
|
Conifer Forest |
(47, 40), (49, 34), (42, 28) |
FURS, FFURS=0.8, ∆fFURS=0.004; LUMBER, FLUMBER =0.9, ∆fLUMBER=0.05; TOBACCO, FTOBACCO=0, ∆fTOBACCO=0.05; |
FURS=1; LUMBER=1; TOBACCO=0 |
FFURS:=FFURS- ∆fFURS; FLUMBER:=FLUMBER - ∆fLUMBER; FTOBACCO :=FTOBACCO + ∆fLUMBER; FTOBACCO := FTOBACCO+ FLAG*∆fFURS+FLAG*∆fLUMBER - ∆fTOBACCO;
|
Tropical Forest |
(47, 38), (48, 36), (48, 35), (47, 35), (47, 34), (48, 33), (47, 33), (46, 33) |
FURS, FFURS=0.8, ∆fFURS=0.004; LUMBER, FLUMBER =0.9, ∆fLUMBER=0.05; SUGAR, FSUGAR =0, ∆fSUGAR=0.05; |
FURS=1; LUMBER=1; SUGAR=0 |
FFURS:=FFURS- ∆fFURS; FLUMBER:=FLUMBER - ∆fLUMBER; FSUGAR := FSUGAR + FLAG*∆fFURS+FLAG*∆fLUMBER- ∆fSUGAR; |
Wetland Forest |
(50, 32), (42, 29) |
FOOD, FFOOD =0.2, ∆fFOOD=0.05; ORE, FORE =0.8, ∆fORE =0.05; |
FOOD=1; ORE=1 |
FFOOD:=FFOOD - ∆fFOOD; FORE:=FORE - ∆fORE; |
Продолжение таблицы 3.2.3. на след. странице
Продолжение таблицы 3.2.3.
TABLE_AREA (Таблица территорий)
AREA |
LOCATION |
INDUSTRIAS |
FLAG |
FORMULAS |
Wilderness |
(52, 37) |
FOOD, FFOOD =0.2, ∆fFOOD=0.05; COTTON, FCOTTON =0.2, ∆fCOTTON=0.05; |
FOOD=1; COTTON=1 |
FFOOD:=FFOOD - ∆fFOOD; FCOTTON:=FCOTTON- ∆fCOTTON; |
Savannah |
(47, 36) |
SUGAR, FSUGAR =0.8, ∆fSUGAR=0.05; FOOD, FFOOD =0.6, ∆fFOOD=0.05; |
SUGAR=1; FOOD=1 |
FSUGAR:=FSUGAR - ∆fSUGAR; FFOOD:=FFOOD - ∆fFOOD; |
Broadleaf Forest |
(49, 33) |
FURS, FFURS=0.8, ∆fFURS=0.04; LUMBER, FLUMBER =0.9, ∆fLUMBER=0.5; COTTON, FCOTTON =0, ∆fCOTTON=0.05; |
FURS=1; LUMBER=1; COTTON=0 |
FFURS:=FFURS- ∆fFURS;
FLUMBER:=FLUMBER - ∆fLUMBER; FCOTTON := FCOTTON + FLAG*∆fFURS+FLAG*∆fLUMBER - ∆fCOTTON; |
Обобщенный псевдокод реакций получения первичного сырья из территорий:
resident function reaction1_profession_area (industryarea: area; arealocation: location; areaindustry: industry; n_people: byte; professionqualification: profession_qualification);
θ0:=Timer();
θ1:=θ0;
starving:=0;
TABLE_PROFESSION1 (profession qualification, ∆θPROFESSION);
TABLE_PROFESSION1 (profession qualification, IABS);
TABLE_PROFESSION1 (areaindustry, MPRODUCTION);
TABLE_AREA (industryarea, FAREA);
TABLE_AREA (industryarea, ∆fAREA);
while not (change_Task()) do
θ2:=θ1+∆θ;
if (|θ2-∆θ|>=∆θPROFESSION) and (starving <>1) then
IREL:=n*IABS* FAREA;
return IREL* MPRODUCTION;
TABLE_AREA (arealocation).F:=FAREA;
if (TABLE_AREA (arealocation).F<=0)
then End_Task (arealocation, areaindustry);
break;
if (|θ2-θ1|>=∆θ∆e) then
if STOREHOUSE.FOOD.fulness>=∆e then
STOREHOUSE.FOOD.fulness:= STOREHOUSE.FOOD.fulness - ∆e;
else
Message (STOREHOUSE_EMPTY);
if E=0 then
Message (location, profession_qualification, n, 'starving');
starving:=1;
if (starving<>1) and (STOREHOUSE.fullness>=∆e)
θ0:=Timer ();
θ1:=θ0;
θ1:=θ2;
Обобщенный псевдокод реакций получения вторичного сырья из первичного:
resident function reaction2_profession (n_people: byte; professionqualification: profession_qualification);
θ0:=Timer();
θ1:=θ0;
starving:=0;
TABLE_PROFESSION2 (profession qualification, ∆θPROFESSION);
TABLE_PROFESSION2 (profession qualification, IABS);
TABLE_PROFESSION2 (raw, item);
while not (change_Task()) do
θ2:=θ1+∆θ;
if (|θ2-∆θ|>=∆θPROFESSION) and (starving <>1) then
IREL:=n*IABS;
return IREL* MPRODUCTION;
if (|θ2-θ1|>=∆θ∆e) then
if STOREHOUSE.FOOD.fulness>=∆e then
STOREHOUSE.FOOD.fulness:= STOREHOUSE.FOOD.fulness - ∆e;
else
Message (STOREHOUSE_EMPTY);
if E=0 then
Message (profession_qualification, n, 'starving');
starving:=1;
if (starving<>1) and (STOREHOUSE.fullness>=∆e)
θ0:=Timer ();
θ1:=θ0;
θ1:=θ2;
Таблица 3.2.4.
TABLE_COMPATIBILITY1 (ТАБЛИЦА СОВМЕСТИМОСТИ1)
AREA |
CORE_MARKER |
PEOPLE_QUALIFICATION |
WETLAND FOREST |
FOOD |
FARMER |
WETLAND FOREST |
FOOD |
EXPERT_FARMER |
WILDERNESS |
FOOD |
FARMER |
WILDERNESS |
FOOD |
EXPERT_FARMER |
SAVANNAH |
FOOD |
FARMER |
SAVANNAH |
FOOD |
EXPERT_FARMER |
RAIN FOREST |
SUGAR |
SUGAR_PLANTER |
RAIN FOREST |
SUGAR |
EXPERT_SUGAR_PLANTER |
TROPICAL FOREST |
SUGAR |
SUGAR_PLANTER |
TROPICAL FOREST |
SUGAR |
EXPERT_SUGAR_PLANTER |
SAVANNAH |
SUGAR |
SUGAR_PLANTER |
SAVANNAH |
SUGAR |
EXPERT_SUGAR_PLANTER |
CONIFER FOREST |
TOBACCO |
TOBACCO_PLANTER |
CONIFER FOREST |
TOBACCO |
EXPERT_TOBACCO_PLANTER |
WILDERNESS |
COTTON |
COTTON_PLANTER |
WILDERNESS |
COTTON |
EXPERT_COTTON_PLANTER |
BROADLEAF FOREST |
COTTON |
COTTON_PLANTER |
BROADLEAF FOREST |
COTTON |
EXPERT_COTTON_PLANTER |
CONIFER FOREST |
FURS |
FUR_TRAPPER |
CONIFER FOREST |
FURS |
EXPERT_FUR_TRAPPER |
TROPICAL FOREST |
FURS |
FUR_TRAPPER |
TROPICAL FOREST |
FURS |
EXPERT_FUR_TRAPPER |
BROADLEAF FOREST |
FURS |
FUR_TRAPPER |
BROADLEAF FOREST |
FURS |
EXPERT_FUR_TRAPPER |
RAIN FOREST |
LUMBER |
LUMBERJACK |
RAIN FOREST |
LUMBER |
EXPERT_LUMBERJACK |
CONIFER FOREST |
LUMBER |
LUMBERJACK |
CONIFER FOREST |
LUMBER |
EXPERT_LUMBERJACK |
Продолжение таблицы 3.2.4. на след. странице
Продолжение таблицы 3.2.4.
TABLE_COMPATIBILITY1 (ТАБЛИЦА СОВМЕСТИМОСТИ1)
AREA |
CORE_MARKER |
PEOPLE_QUALIFICATION |
TROPICAL FOREST |
LUMBER |
LUMBERJACK |
TROPICAL FOREST |
LUMBER |
EXPERT_LUMBERJACK |
BROADLEAF FOREST |
LUMBER |
LUMBERJACK |
BROADLEAF FOREST |
LUMBER |
EXPERT_LUMBERJACK |
MOUNTAINS |
ORE |
ORE_MINOR |
MOUNTAINS |
ORE |
EXPERT_ORE_MINOR |
HILL |
ORE |
ORE_MINOR |
HILL |
ORE |
EXPERT_ORE_MINOR |
RAIN FOREST |
ORE |
ORE_MINOR |
RAIN FOREST |
ORE |
EXPERT_ORE_MINOR |
WETLAND FOREST |
ORE |
ORE_MINOR |
WETLAND FOREST |
ORE |
EXPERT_ORE_MINOR |
MOUNTAINS |
SILVER |
SILVER_MINOR |
MOUNTAINS |
SILVER |
EXPERT_SILVER_MINOR |
Таблица 3.2.5.
TABLE_COMPATIBILITY2 (ТАБЛИЦА СОВМЕСТИМОСТИ2)
IN_MARKER |
HOUSE |
OUT_MARKER |
PEOPLE_QUALIFICATION |
SUGAR |
RUM_DISSTILLER_HOUSE |
RUM |
DISTILLER |
SUGAR |
RUM_DISSTILLER_HOUSE |
RUM |
EXPERT_DISTILLER |
TOBACCO |
TOBACCONIST'S_HOUSE |
CIGARS |
TOBACCONIST |
Продолжение таблицы 3.2.5. на след. странице
Продолжение таблицы 3.2.5.
TABLE_COMPATIBILITY2 (ТАБЛИЦА СОВМЕСТИМОСТИ2)
IN_MARKER |
HOUSE |
OUT_MARKER |
PEOPLE_QUALIFICATION |
TOBACCO |
TOBACCONIST'S_HOUSE |
CIGARS |
EXPERT_TOBACCONIST |
COTTON |
WEAVER'S_HOUSE |
CLOTH |
WEAWER |
COTTON |
WEAVER'S_HOUSE |
CLOTH |
EXPERT_WEAWER |
FURS |
FUR_TRADER'S_HOUSE |
COATS |
FUR_TRADER |
FURS |
FUR_TRADER'S_HOUSE |
COATS |
EXPERT_FUR_TRADER |
LUMBER |
BLACKSMITH'S_HOUSE |
TOOLS |
BLACKSMITH |
LUMBER |
BLACKSMITH'S_HOUSE |
TOOLS |
EXPERT_BLACKSMITH |
LUMBER, ORE |
MECHANIC'S_HOUSE |
MUSKETS |
ARMOURER |
LUMBER, ORE |
MECHANIC'S_HOUSE |
MUSKETS |
EXPERT_ARMOURER |
Процедура инициализации
procedure init;
var people: TPeople;
type TPeople=record;
begin
FARMER : byte;
EXPERT_FARMER : byte;
SUGAR_PLANTER : byte;
EXPERT_SUGAR_PLANTER : byte;
TOBACCO_PLANTER : byte;
EXPERT_TOBACCO_PLANTER : byte;
COTTON_PLANTER : byte;
EXPERT_COTTON_PLANTER : byte;
FUR_TRAPPER : byte;
EXPERT_FUR_TRAPPER : byte;
LUMBERJACK : byte;
EXPERT_LUMBERJACK : byte;
ORE_MINOR : byte;
EXPERT_ORE_MINOR : byte;
SILVER_MINOR : byte;
EXPERT_SILVER_MINOR : byte;
end;
var positions: TPositions;
TPositions = array of TMarkers;
var TABLE_COMPATIBILITY1;
begin
n:=length (people);
for x:=1 to n do
begin
y:=n-x;
EX:=x*IABS*FAREA;
if (EX/(∆e*x+∆e*y))≥1 then
break;
end;
end;
x1:=dispatch_farmers (x);
if (x1>0) then fortify (x1);
y1:=dispatch_rest (y);
if (y1>0) then fortify (y1);
procedure fortify (k);
var k;
begin
PBUFFER:= PBUFFER+k;
end;
function dispatch_farmers (x): byte;
var i;
begin
for i:=1 to n do
begin
for k:=x - downto=1 do
begin
if (Density (P[i]/k)>1) then
break
end;
if compatible (p[i], profession_qualification (k)) then
x:=x-k;
p[i]:=p[i] + k;
reaction_Mprofession_area (industryarea p[i] : area; arealocation p[i] : location; areaindustry p[i] : industry; n_people: byte; professionqualification (k): profession_qualification);
if x=0 then break
end;
function dispatch_rest (y): byte;
var i;
begin
for i:=1 to n do
begin
for k:=y – downto=1 do
begin
if (Density (P[i]/k)>1) then
break
end;
if compatible (p[i], profession_qualification (k)) then
y:=y-k;
p[i]:=p[i] + k;
reaction_Mprofession_area (industryarea p[i] : area; arealocation p[i] : location; areaindustry p[i] : industry; n_people: byte; professionqualification (k): profession_qualification);
if y=0 then break
end;
end.