Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
met.uk.po-MPPSP (1).doc
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
1.05 Mб
Скачать

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]