ITI0140:Ülesanne 6
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 - 'N', 'S' ... 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 ja sõnetüüpi current_state, mis sisaldab infot, kuhu poole robot antud hetkel vaatab.
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 alguses current_state suunda 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
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