§
Celularni programski algoritem - Polnjenje pravokotnika

Lastnosti dokumenta

Naslov
Celularni programski algoritem
Del
Polnjenje pravokotnika
Datum vsebine
31. 05. 2007
Original
cpa_rectbound.pdf
Vrsta
seminarska naloga
Jezik
slovenščina
Različica
1.0
Ustanova
Fakulteta za računalništvo in informatiko, Univerza v Ljubljani
Študij
Računalništvo in informatika, Logika in sistemi, 4. letnik
Predmet
Celularne strukture in sistemi
Mentor
dr. Branko Šter
Avtor
Tine Lesjak
Ocena
10 od 5-10

Priloge

cpa_rectbound.zip
Implementacija algoritma v Javi 1.4.2, skupaj z izvorno kodo in dokumentacijo (javadoc).
Osnovni parametri se nastavijo v kodi - ni vhodnih parametrov.
cpalg.pdf
CPA po Mosheju Sipperju

Opis problema

Cilj naloge je s pomočjo celularnega programskega algoritma (CPA) razviti nabor pravil, ki v celularnem avtomatu (CA) napolnijo prostor pravokotne oblike omejen s štirimi stranicami - pravokotnik. Pri tem ostane prostor zunaj pravokotnika prazen.

Algoritem je razvit iz CPA-ja dr. Mosheja Sipperja. Njegov opis algoritma in knjigo Evolution of Parallel Cellular Machines je moč dobiti na spletni strani http://www.moshesipper.com/.

Specifikacije

Lastnosti celularnega avtomata (prostora) in algoritma:

Nastavljive lastnosti, na katerih sem izvajal meritve:

Algoritem sem napisal v programskem jeziku Java (različice 1.4.2). Razvijal sem ga v razvojnem okolju Eclipse.

Meritve

Meritve sem opravljal na svojem delovnem računalniku, ki ima 1500 MHz procesor AMD in 1 GB pomnilnika.

Meritve sem opravil na treh različnih konfiguracijah algoritma. Pri 1. sem pognal 500 generacij, pri 2. pa 5000. Pri 3. konfiguraciji sem po naključni napolnitvi pravokotnika dodatno nastavil stanja celic v njegovih kotih na 1 ter pognal algoritem za 5000 generacij.

Vsako konfiguracijo algoritma sem pognal petkrat in za prikaz meritev izbral eno, na oko najprimernejšo.

Konfiguracija algoritma Uspešnost nabora pravil Najuspešnejša generacija Število izvedenih generacij Trajanje izvajanja
1. 88,34 % 341. 500 14,77 s
2. 91,07 % 4367. 5000 143,41 s
3. 100,00 % 1578. 1578 46,34 s

Tabela 1 - Rezultati meritev.

Uspešnost pravil

Graf 1 - Časovni potek (po generacijah) povprečne uspešnosti nabora pravil za vse tri konfiguracije algoritma. Graf prikazuje uspešnost od 50 % navzgor.

Razvoj pri najboljših pravilih

V spodnjih tabelah so zapisana stanja posameznih celic CA-ja ob začetni (naključni) konfiguraciji (0) in razvoj vseh dvanajstih korakov (1-12) ob najboljšem naboru pravil, ki je nastopil v najboljši generaciji. S sivo barvo je označen prostor zunaj pravokotnika (črne celice so znotraj pravokotnika).

00000000
00000000
0
1111100
0
1010010
0
0110100
00000000
00000000
00000000
(0)

00000000
00100000
0
0111100
0
0011000
0
1111010
00000000
00000000
00000000
(1)

00000000
01010000
0
0111100
0
0111110
0
1111100
00000010
00000000
00000000
(2)

00000000
01010000
0
1011100
0
0111110
0
1111100
00000110
00000000
00000000
(3)

00000000
00010000
0
0111100
0
1011110
0
1111100
00000100
00000000
00000000
(4)

00000000
00010000
0
0111100
0
1011110
0
1111110
00000000
00000000
00000000
(5)

00000000
00010000
0
0111100
0
1011110
0
1111110
00000010
00000000
00000000
(6)

00000000
00010000
0
0111100
0
1011110
0
1111110
00000110
00000000
00000000
(7-12)

Tabela 2 - Časovni razvoj začetne konfiguracije CA-ja pri najboljšem naboru pravil pri 1. konfiguraciji algoritma. Od koraka 7 dalje CA ostane enak. Pravilnost CA-ja je 90,63 %.

00000000
00000000
00
111100
00
011100
00
110100
00
110100
00000000
00000000
(0)

00000000
00000000
00
111100
00
111100
00
110100
00
111100
00000100
00000000
(1)

00000000
00000000
00
111100
00
111100
00
111100
00
111100
00001000
00000000
(2-12)

Tabela 3 - Časovni razvoj začetne konfiguracije CA-ja pri najboljšem naboru pravil pri 2. konfiguraciji algoritma. Od 2. koraka dalje ostane CA enak. Pravilnost CA-ja je kar 98,44 % - samo ena celica ima napačno stanje.

00000000
00000000
00
110110
00
011110
00
110110
00000000
00000000
00000000
(0)

00000000
00000000
00
111110
00
111110
00
111110
00000000
00000000
00000000
(1-12)

Tabela 4 - Časovni razvoj začetne konfiguracije CA-ja pri najboljšem naboru pravil pri 3. konfiguraciji algoritma. Že v 1. koraku CA doseže 100 % pravilnost.

Najpogostejša pravila

Pravila so zaradi svoje velikosti (32 bitna) zapisana v šestnajstiški obliki s pripono "0x".

Pravilnostna tabela 0xFFFFAFF0 0xFFFFDE68 0x80998408
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
0
0
0
0
1
1
1
1
1
1
1
1
0
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
1
0
1
1
0
0
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
0
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
1
0
0
1
1
0
0
1
0
0
0
0
0
0
0
1

Tabela 5 - Tri najpogostejša pravila v vseh treh konfiguracijah algoritma.

Seznam ostalih zelo pogostih pravil:
0x7F78AAC0
0xE4BE70A2
0x2E75604C
0xFFFFEEEC
0xFFFE97B4
0xFFFFEFF0

Sklep

Meritve so pokazale razmeroma slab rezultat. Uspešnost pravil bi se naj gibala med 90 % pa vse tja do 99 %. Vse to nakazuje, da bi bilo treba algoritem izvajati dlje časa, na precej večjem številu generacij (10-100 krat).
Zanimivo pa je, da je v 3. konfiguraciji algoritma, kjer sem stanja celic v kotih pravokotnika nastavil na 1, uspešnost precej večja. Večkrat (v mojem primeru kar trikrat od petih poskusov) je uspešnost tudi 100 % in to na primeru "samo" 5000 generacij.

Najpogostejša pravila so bolj ali manj enaka. V bistvu popolnoma enakih pravil niti ni tako veliko, saj se večinoma razlikujejo le v enem, morda dveh bitih. V sredini pravokotnika so tako v večini pravila, ki se pričnejo z 0xFFFF.