Robota darbības simulācija

Piedāvāju jums notestēt savas uzrakstītās programmiņas robotam-putekļu sūcējam ar vizuāla interpretatora palīdzību. Varbūt vēl kādas kļūdiņas tajā ir, bet nu tas tapis ātrumā – apmēram dienas laikā. Interpretatorā iespējams arī paskatīties, kā strādā manis rakstītās programmiņas (piedāvāju trīs variācijas).

12 thoughts on “Robota darbības simulācija

  1. Tagad šis pieprasa borlndmm.dll.

    Borland C++’am var nokompilēt projektu, ka nevajadzēs nevienu custom bpl/dll failu. Projekta optionos linkera tabā noņem ķeksi pie Use Dynamics RTL.
    Un Packages opciju meņū noņem ķeksi no “Build with runtime packages”.

    Tad rezultējošais exe fails strādās jebkur.

  2. Pat labāk:
    00Reset
    01Clean
    02Add
    03Can(04,06)
    04Go
    05Been(07,01)
    06Turn
    07Rnd(06,08)
    08Can(04,06)

    Izskatās ka robots brauc cauri sienai no rūtiņas (5,1) uz (5,2), bet atdurās pret neredzamu sienu starp (4,1) un (5,1)

  3. Ja Tu saki, ka simulācijā ir kļūda, tad es Tev varu ticēt, jo arī esmu pamanījis šādu lietu reizēm, bet tā kā laukums (robežas) katru palaišanas reizi tiek ģenerētas nejauši, tad Tavu piemēru nevaru redzēt tieši uz tām Tevis minētajām rūtiņām..

  4. Vispār pēdejā piemērā man nevajag arī 08 komandu. To var mierīgi izdzēst un 07 pārtaisīt par 07Rnd(06,03). Tādā veidā es būšu izmantojis katru komandu tikai vienu reizi.🙂

  5. Tiesa Tev ir! Bet jautājums tagad – vai nevar uztaisīt kaut ko efektīvāku? Šajā gadījumā redzams, ka robots stundām to istabu sūks. Ar esošajām komandām laikam neko daudz labāku nepanākt, bet varbūt vajag pievienot kādu jaunu komandu?

  6. Es arī sāku domāt par to efektivitāti. Mana pirmā doma tavu rakstīto programmu efektivitātes uzlabošanai bija – jāļauj tam robotam sūkt istabu pa taisni līdz galam un griezties tikai tad, ja ceļā sastop jau sūktu kvadrātu. Tas, mauprāt, noveda līdz diezgan ātrai lielākās istabas daļas sasūkšanai, bet atklāja nākamo problēmu – atlikušos mazos kvadrātiņus robots nespēj noteikt, aizbraukt līdz viņiem un sasūkt. To uzkopšana ir vairāk nejaušība nekā normāls darbs.

    Viena iespēja būtu ļaut robotam zināt debespuses un kautkādu primitīvu detektēšanu kvadrantiem “uz kuru pusi ir tuvākais nesasūktais” vai uz kuru pusi apmēram ir jābrauc. Tas atkal novestu pie nākamās problēmas – ja nesasūktajam kvadrantam priekšā būs siena (it sevišķi tāda viltīga ar tikai vienu ieeju), tad robotam būs jāmāk to apbraukt.

    Tāpēc mana cita ideja bija, ka jāliek robotam braukt pa taisnēm. Šajā piemērā istaba ir kvadrātiska un robotam būtu vispirms jāizbrauc no (0,0) uz (0,max), tad jāpāriet uz (1,max) un jābrauc uz (1,0) utt. Ar kautko līdzīgu rekursīvam algoritmam būtu jāsaplāno robota apbraukšana ap sienu, kas ir priekšā.

    Vēl būtu ideāli, ja robots varētu pateikt, vai viņam blakus ir nesaslaucīts kvadrants uz kura var uzbraukt, tas, piemēram, atvieglotu viņa ceļa plānošanu.

  7. Nu tas trešais no maniem iekļautajiem algoritmiem, tieši to arī dara – brauc taisni līdz galam, cik tālu var un tad randomā pagriežas. Bet nu jā – eksistē istabas ar tādu šķēršļu izkārtojumu, kurā robots nekādi nevar izsūkt visu istabu (piemēram, istaba, kurā nav neviena šķēršļa).

    Bet par pēdējo teikumu – to (pateikt, vai blakus ir neizsūkts lauciņš, uz kura var uzbraukt) jau robots var izdarīt arī ar pašreizējiem līdzekļiem..

    Savukārt, par to, ka robotam būtu jāvar noteikt tuvākais neizsūktais lauciņš – to nekādā ziņā nedrīkst pievienot robotam kā jaunu komandu, jo reāli taču robots to nespēs noteikt, tas ir jāuzprogrammē ar esošajām komandām. Un, starp citu, var uztaisīt algoritmu, kas to arī ar esošajām komandām izdara..

  8. Būtu aktuāli optimizēt mazliet rakstāmās komandas. Mani ierosinājumi – iztaisīt apvienoto zzCanGo(x,y) komandu, kas izpilda Can, un, ja var iet, tad arī Go. Tas ietaupītu mazliet koda vietas. Šaubos vai kāds gribēs izpildīt Go komandu bez Can komandas.
    Varētu ieviest arī saīsinājumus, piemēram, Back vai Backwards, kas izpildītu divas Turn komandas. Komanda Right varētu izpildīt trīs Turn komandas (vai arī robots advancēsies un iemācīsies pagriezties pa labi).

Komentēt

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Mainīt )

Twitter picture

You are commenting using your Twitter account. Log Out / Mainīt )

Facebook photo

You are commenting using your Facebook account. Log Out / Mainīt )

Google+ photo

You are commenting using your Google+ account. Log Out / Mainīt )

Connecting to %s