Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Ovládanie pohybu
Ovládanie senzorov
Používanie senzorových programov
Programovanie náhodného správania
Generovanie video záznamu simulácie
Spúšťanie simulácii na pozadí
Premenné prístupné používateľovi



Ostatné kapitoly
Walterove korytnačky
BEAM Robotika
Kolektívne správanie robotov
KANSEI
Braintenbergove vozidlá
POPBUGS
iRobot
Insect Robots
Ešte niekoľko robotov ...
MIT Roboty


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


Programovanie náhodného správania

Existuje viacero spôsobov ako zabezpečiť aby sa robot pohyboval náhodne s ohľadom na signály z jeho senzorov. V najjednoduchšom prípade zadefinujeme atribút behaviour tak, aby bol zoznam dvoch podzoznamov, kde každý z nich vygeneruje silu pohonu pre jeden pás resp. koleso. Počas generovania hodnoty zo zoznamov môže algoritmus počítať aj s hodnotou so snímača uloženou napr. do premennej x.

   1 -> pb_new_world;
   [[if x(1) > 0.85 then 0 else 0.3 endif][0.3]] -> pb_behaviour;
   100 -> pb_cycles;

Atribút behaviour môže byť nastavený ako meno premennej, ktorá obsahuje zoznam alebo vektor.

   vars safe = [[if x(1) > 0.85 then 0 else 0.3 endif][0.3]];
   "safe" -> pb_behaviour;
   100 -> pb_cycles;

Hodnota behaviour môže byť aj procedúra alebo meno procedúry. V tomto prípade sa hodnota behaviour vyhodnocuje opakovane v každom cykle simulácie. Tento spôsob je vhodný pre roboty s viacerými senzormi. Príklad so štyrmi senzormi:

   1 -> pb_new_world;
   [[30] [10] [-10] [-30]] -> pb_sensors;

Najprv definujeme procedúru

   define avoid_obstacles;
      lvars i, inputs = pb_sensor_inputs;
      for i from 1 to length(inputs) do
         if inputs(i) > 0.85 then
            {0.3 0.2} -> pb_action;
            return;
         else
            {0.3 0.3} -> pb_action;
            return;
         endif;
      endfor;
   enddefine;

Potom priradíme meno procedúry do pb_behaviour.

   "avoid_obstacles" -> pb_behaviour;

Hore
Kontakt: Marek Bundzel