Iti0210lab1

Allikas: Lambda

Tolmuimejamaailma simulatsioon

Sissejuhatus

Ifi6057lab1-1.png

Esmalt tutvu lühidalt teooriaga: Intelligentne agent (slaidid)

Agent (robot-tolmuimeja) tegutseb Tolmuimejamaailmas, mis koosneb kahest ruumist A ja B (vt. joonis). Ruum võib olla kas puhas või on seal prügi, agendi eesmärgiks on ruumid puhtana hoida. Maailmas kehtib diskreetne aeg: igal sammul loeb agent korra oma sensoreid ja teeb ühe tegevuse.

  • Sensorid: agent näeb ruumi tähist (A ja B) ning ruumi olekut (puhas või must)
  • Tegevused: agendi tegevused on: Left ja Right liiguvad ruumide vahel, Suck üritab ruumi puhtaks teha. NoOp ei tee midagi.

Maailmast välja liikuda ei ole võimalik, tegevuse Left ruumis A tagajärg on see, et agent on endiselt ruumis A.

Simulaator

Simulaatori ülesehitus peaks olema selline, et see on agentidest loogiliselt eraldatud. Ehk siis võib samas simulaatoris erineva käitumisega agente jooksutada ja neid omavahel võrrelda. Kirjuta simulaator Pythoni funktsioonina, mis teeb kindla arvu simulatsioonisamme (vastab aja edas liikumisele tolmuimejamaailmas).

def vacworld_sim(ini_state={}, steps=10):
    for step in range(steps):
        # call agent program with data about the current environment
        # perform agent action (update world state)

Lisa lihtne agent, nii et simulatsiooni sees oleks midagi käivitada.

def reflex_agent(percepts):
    # decide action based on environment perception
    action = "NoOp"
    return action

Täienda nüüd maailma nii, et see muutuks vastavalt agendi tegevustele. Näiteks, agendi liikumisel peab agendi asukoht muutuma, Suck tegevuse tagajärjel peab ruum saama puhtaks.

Reflex agent

Implementeeri lihtne agent, mis käitub nii:

  1. kui ruumis on tolm, tuleb tolmu imeda;
  2. kui ruum on puhas ja ruum on "A", siis liigu paremale;
  3. kui ruum on puhas ja ruum on "B", siis liigu vasakule.

Performance mõõt

Lisa simulatsiooni tolmuimeja töötamise efektiivsuse mõõt. Mõtle see ise välja. Vihjed:

  • Halb on, kui ruumid on mustad
  • Hea on, kui ruumid on puhtad
  • Mida vähem energiat agent kulutab, seda parem. Energiat kulutavad kõik tegevused peale NoOp.

Reflex agent with state

Lisa agendile sisemine mälu, mis aitaks tal paremat efektiivsust saavutada. Üks variant, kuidas mälu simulatsiooni sammude vahel säilitada:

def state_reflex_agent(percepts, state):
    # decide action based on environment perception
    # update state
    return action, state

# simulaatoris:
action, agent_state = state_reflex_agent(percepts, agent_state)

Võid kasutada ka objektorienteeritud programmeerimist: tee agendi klass, kus hoitakse nii olekut kui state_reflex_agent meetodit.

Dünaamiline maailm

Mittekohustuslik lisaülesanne:

Lisa simulaatorisse võimalus, et juhuslikult tekib ruumidesse tolmu. Võrdle uuesti olekuga ja olekuta agentide efektiivsust.

Veel teooriat

Õpikud käsitlevad intelligentset agenti kui asja, mis suudab käituda ratsionaalselt mingis keskkonnas, tavaliselt mingit praktilist ülesannet täites. Sinna alla käivad programmid, robotid jne.

Ülesandega seostuvad peatükid:

[AIMA] 2.1-2.4, [ARTINT] 2.1, 2.2, 2.4.1, 2.4.2