ITI0140:Ülesanne 6

Allikas: Kursused
Mine navigeerimisribale Mine otsikasti

Newspeak intelligence

On aasta 2184 2. oktoobri hommik. Winston ärkab 6.15 ja tunneb, kuidas Suure Venna hommikutervitus elektromagnetlainetena tema mõtetesse tungib. Pärast esimest hommikukohvi ühendab ta ennast valitsuse töövõrgustikuga ja laseb esimesed ülesanded lühimällu. Pärast teise ülesande kuulmist haarab Winstoni hirm - täna lastakse esimese tehisintelekti generatsiooni kaks prototüüpi - Bobi ja Robi rahva sekka, kuid tema, süsteemi peaprogrammeerijana, on unustanud implementeerida energiasäästurezhiimi suunaotsustusloogika. Nimelt just hämarates Okeaania meelelahutuskohtades võivad üritused pikale venida ning robotid peavad varem lahkuma energiavaeguse tõttu. Niisiis, Winston võtab oma seinaarvutist lahti Bobi alternatiivliikumisalgoritmi ja näeb järgnevat:

power_saver_simple_cases.py

<source lang="python"> def decide(sensor_data, current_state):

   """
   Decide in which direction should robot move using sensor_data.
   Use resources as efficiently as possible.
   Args:
       List of blocking objects in specific direction.
       0  - Free
       -1  - Object
       sensor_data - [n, ne, e, se, s, sw, w, nw]
       current_state - current robot direction ie. 'N', 'NE' ...
   Return:
   One of the possible directions.
   """
   # TODO: implement energy saver decide logic
   pass

</source>

Oma kõrge ametikoha tõttu ei hakka Winston oma pead selle probleemiga vaevama ja usaldab ülesande Sulle. Lihtsuse huvides tuleb Sul luua kaks uut moodulit: robi.py ja bobi.py, mis mõlemad sisaldavad meetodit decide(sensor_data, current_state). Decide võtab sisse pikkusega 8 listi, mis sisaldab informatsiooni iga ilmakaare kohta. Current_state on suurtähena etteantud ilmakaar, näiteks 'NE'

Näiteks:

[-1, -1, 0, 0, 0, 0, 0, 0] ([n, ne, e, se, s, sw, w, nw]  vastavatel kohtadel) tähendab, et saab kõikjale, välja arvatud põhja ja kirdesse. 

Väljundiks oodatakse ühte võimalikku vaba liikumissuunda. Robi ja Bobi erinevus seisneb selles, et Robi saab pöörata 45 kraadise, kuid Bobi 45 ja 90 kraadise nurgaga. Robot vaatab alati current_state poole ja saab liikuda ainult otse (0), paremale 45 kraadi(1), vasakule 45 kraadi(-1), paremale 90 kraadi(2) või vasakule 90 kraadi(-2). Ilmakaared

Ilmakaared

Projektistruktuur

EX06
    ├── bobi.py
    ├── robi.py

Sisend/Väljundnäited

decide([-1,-1,-1,-1,-1,-1, -1, -1], 'N') # Robi korral None, Bobi korral None

decide([0, 0, 0, 0, 0, 0, 0, 0], 'N') # Robi korral 1 või 0 või -1, Bobi korral sama, lisaks 2 või -2

decide([-1, -1, 0, 0, 0, 0, 0, 0], 'N') # Robi korral -1, Bobi korral 2 või -2 või -1