|
Prehľad priestorov (spaces)
Priestory v RePast-e slúžia na dva účely. Môžu byť podkladom pre priestorových agentov ako napríklad
priestor aplikácie. Tiež môžu slúžiť ako
zbierka agentov ktorá definuje priestorové vzťahy agenta k iným agentom.
RePast ponúka nasledovné priestory. Pre viac informácií o nich viď API dokumentáciu. Poznamenajme,
že sieťové priestory sú od ostatných odlišné.
-
Diffuse2D Diskrétna dvojrozmerná aproximácia priestoru, v ktorom
môže prebiehať difúzia. Samotný priestor je toroidná mriežka, ktorej bunky sú tvorené premennými
typu double .
-
Object2DGrid Diskrétna dvojrozmerná mriežka, ktorej bunky obahujú
Object -y.
-
Object2DTorus Diskrétna dvojrozmerná mriežka, ktorej bunky obahujú
Object -y.
-
Multi2DGrid Diskrétna dvojrozmerná mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je nedefinované.
-
OrderedMulti2DGrid Diskrétna dvojrozmerná mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je FIFO
(first in, first out ).
-
Multi2DTorus Diskrétna dvojrozmerná mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je nedefinované.
-
OrderedMulti2DTorus Diskrétna dvojrozmerná mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je FIFO
(first in, first out ).
-
Diffuse2DHexagonalDiskrétna dvojrozmerná aproximácia priestoru, v ktorom
môže prebiehať difúzia. Samotný priestor je toroidná hexagonálna mriežka, ktorej bunky sú tvorené premennými
typu double .
-
Object2DHexagonalGrid Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky obahujú
Object -y.
-
Object2DHexagonalTorus Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky obahujú
Object -y.
-
Multi2DHexagonalGrid Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je nedefinované.
-
OrderedMulti2DHexagonalGrid Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je FIFO
(first in, first out ).
-
Multi2DHexagonalTorus Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je nedefinované.
-
OrderedMulti2DHexagonalTorus Diskrétna dvojrozmerná hexagonálna mriežka, ktorej bunky môžu obsahovať
viac ako jeden Object . Poradie Object -ov v každej bunke je FIFO
(first in, first out ).
-
RasterSpace Dvojrozmerná mriežka vyjadrujúca geografické údaje. Každá bunka môže obsahovať
jeden Object . Pohyb v tomto priestore používa vzdialenosti, súradnice, alebo diskrétne polohy buniek.
Tieto priestory obsahujú metódy na vkladanie a vyberanie položiek na platných súradniciach. Tiež obsahujú
metódy na obnovovanie zoznamu položiek v susedných poliach rovnako ako na získanie minimálnej a mazimálnej
položky v susedstve. Čo znamená "minimum" a "maximum" je používateľsky definovateľné.
Použitie priestorov ako priestorovej zbierky agentov je skutočne jednoduché a je typicky predmetom záujmu
pri vkladaní a odoberaní agentov do a z prostredia a možno pri dotazovaní sa na susedov agentov. Typickým
vzorom je, keď všetky agenty sú v jednotnom priestore a majú referenciu na priestor. Napríklad v metóde
buildModel() v našom modeli môžeme mať niečo ako:
Object2DGrid space = new Object2DGrid(spaceWidth, spaceHeight);
for (int i = 0; i < numAgents; i++) {
int x, y;
do {
x = Random.uniform.nextIntFromTo(0, space.getSizeX() - 1);
y = Random.uniform.nextIntFromTo(0, space.getSizeY() - 1);
} while (space.getObjectAt(x, y) != null);
MyAgent agent = new MyAgent(x, y, space);
space.putObjectAt(x, y, agent);
agentList.add(agent);
}
Prvý riadok vytvorí objekt typu Object2DGrid . V tomto priestore vytvorí niekoľko agentov typu
MyAgent . Slučka do generuje pseudonáhodné súradnice x a y
pre agenta a zapamätá si ich, ak miesto v priestore s týmito súradnicami je prázne. Potom je vytvorený agent,
sú mu priradené vygenerované súradnice a referencia na priestor a je pridaný do priestoru na tieto
súradnice. Poznamenajme, že pokiaľ používame jeden z Multi priestorov, nemusíme kontrolovať
obsadenosť miesta kam chceme priradiť agenta, nakoľko na jednom mieste môže byť súčasne viacero agentov.
Bez ohľadu na to, aký typ prostredia použijeme, tento vzor je typický: agent má referenciu na priestor a pozná
svoje vlastné súradnice. Pohyb agenta je záležitosťou zmeny interných súradníc agenta, jeho odstránenie z predchádzajúcej
pozície a umiestnenie na novú. Napríklad:
space.putObjectAt(x, y, null);
x = newX;
y = newY;
space.putObjectAt(x, y, this);
Ako môžeme vidieť, odstránenie agenta je dosiahnuté vložením hodnoty null na jeho pôvodnú pozíciu.
Tento kód sa nachádza v agentovi, preto používame referenciu this na agenta, ktorého umiestňujeme.
newX a newY boli nastavené mimo uvedeného výseku kódu a nenachádza sa tu ani žiadna kontrola
obsadenosti miesta. Poznamenajme, že tento vzor (nastavenie hodnoty null na odstránenie, etc.) nie
je pre prácu s Multi priestormi; pre bližšie informácie viď API dokumentáciu.
|