00 - Úvod - pohyb, náhoda a pravdepodobnosť

Class vs Object

Úvodom si pripomeňme trocha princípy .

Object

Obsahuje dáta (premenné) a funkcionalitu (metódy).

Class

Je "šablóna" ktorá definuje "danú triedu objektov". Ako si to predstaviť? Class je ako "vykrajovač perníkov" a object je perník samotný (jeden vykrajovač triedy "stromček" vie vytvoriť ľubovoľný počet perníkov stromčekov).

Random Walker

Po tomto úvode si poďme zadefinovať triedu Walker. Ale začnime tým, čo vlastne chceme, aby tento objekt dokázal.

Chceme, aby sa "náhodne" pohyboval. Ak by nám stačil pohyb v jednom rozmere (napr. osi X) - hodíme si mincou, či má ísť dozadu alebo dopredu. Pre pohyb v 2D priestore potrebujeme náhodný pohyb aj v Y-vej osi.

Dáta: poloha (pozícia X/Y)

Funkcionalita: konštruktor, pohyb a zobrazenie

Pripomeňme si, ako sa definujú triedy v p5.js: https://p5js.org/reference/#/p5/class

class Walker {
  constructor() {
    this.x = width / 2;
    this.y = height / 2;
  }

  render() {
    stroke(0);
    point(this.x, this.y);
  }

  step() {
    const choice = floor(random(4));
    if (choice === 0) {
      this.x++;
    } else if (choice === 1) {
      this.x--;
    } else if (choice === 2) {
      this.y++;
    } else {
      this.y--;
    }
  }
}

Vychádzať môže zo sketchu.

Príklad 1.1

Úloha 1

V tejto chvíli sa vie hýbať 4 smermi. Uprav kód aby sa hýbal 8 smermi:

Úloha 2

Nedovoľ objektu opustiť plochu.

Hint: contrain()

Úloha 3 (bonus, možno vo dvojici?)

Nechaj ChatGPT vygenerovať kód pre "random walker" v P5.js. Porovnajte so svojím kódom. Čo je iné?

Pre rýchly bootstrap projektov je OK a väčšinou výhodné nechať si kostru vygenerovať cez ChatGPT. Ale pozor, niekedy veľmi presvedčivo klame 😆

Náhoda? (Nemyslím...)

Ďaľší azda ešte väčší problém je prehnaná uniformita distribúcie vygenerovaných čísel.

Random distribution

Brownov pohyb

Brownov pohyb je neustály neusporiadaný chaotický pohyb častíc. Prvýkrát ho zaznamenal v roku 1827 botanik Robert Brown, ktorý pozoroval správanie peľových zrniečok v tuši.

Pravú podstatu tohto javu objasnil v roku 1905 Albert Einstein. Vychádzal pritom z kinetickej teórie látok. Molekuly v roztoku sa pod vplyvom tepelného pohybu neustále zrážajú, pričom smer a sila týchto zrážok sú náhodné a vďaka tomu je aj poloha častíc náhodná.

Brownian motion

Pravdepodobnosť

Normálne rozdelenie pravdepodobnosti - Gauss (alebo to, akú náhodilosť vidíme okolo seba)

Gaussova krivka nám zrkadlí "normálne rozdelenie pravdepodobnosti", ktoré vidíme všade okolo seba. Ak by chcel generovať náhodnú výšku človeka, náhodný brushstroke, náhodnú dĺžku vlasov a podobne... pokiaľ by bola distribúcia pravdepodobnosti rovnaká - výsledky by boli neprirodzené.

Gaussova krivka - so svojím typickým tvarom - známa tiež aj ako Bell curve

Úloha 4

Uprav random walker tak, aby dĺžka kroku reflektovala gaussov rozptyl. Hint: randomGaussian()

Vlastná pravdepodobnosť (Lévy flight)

Pre prelomenie uniformnej distribúcie náhodnosti generovaných čísel si môžeme pomôcť, keď zapojíme vlastnú pravdepodobnosť (P).

Ako príklad pri efektívnom skúmaní priestoru sa dá použiť vlastný variant Lévyho letu. Ten funguje rovnako ako náš random walker... ale občas odskočí o oveľa väčší krok preskúmať iné územie. Takto ho pokryje rýchlejšie a podobný pattern môžeme hľadať aj pri hladaní potravy u živočíchov.

Úloha 5

Uprav random walker tak, aby s určitou pravdepodobnosťou (7%) spravil náhle veľký krok úplne inam.

Last updated