Ifi6057w4
Allikas: Lambda
4. Nädal
Heuristiline otsing. AIMA chapter 3.5, TI 17 (eeldab ka 16 lugemist).
Hinnangufunktsioon, heuristiline funktsioon. Ahne otsing.
A*; selle optimaalsus ja täielikkus. Introduction to A* (mängu-AI / Python)
Loenguslaidid: PDF
Harjutustund
Ülesanne - 4st ruumist ("A", "B", "C", "D") koosnev tolmuimejamaailm. Leiame lühima lahenduse algolekust seisu, kus kõik ruumid on puhtad. Lõppolekus pole oluline, kus on tolmuimeja. Kasutame search.Problem
klassi, et maailma kirjeldada.
import search
class VacWorld(search.Problem): def actions(self, state): act = [] # ... return act def result(self, state, action): newstate = state.copy() # action on yks nendest: "Left", "Right", "Suck", "NoOp" return newstate def goal_test(self, state): # kui on k6ik puhas, return True # muidu return False
Oleku esitus
algolek = { "A" : "Dirty", "B": "Clean", "C": "Clean", "D": "Dirty", "loc": "C" }
Poolik actions
def actions(self, state): act = [] vac_loc = state["loc"] if state[vac_loc] == "": act.append("") if vac_loc == "A": act.append("Right") # ... return act
Poolik result
def result(self, state, action): newstate = state.copy() # action on yks nendest: "Left", "Right", "Suck" vac_loc = state["loc"] if action == "Suck": newstate[vac_loc] = "Clean" elif action == "Right": # vastavalt ruumile peab panema uue newstate["loc"] = ? väärtuse # näiteks kui tolmuimeja oli ruumis "A" siis uues olekus on ta ruumis "B" elif action == "Left": # nagu "Right", aga vastassuunas ("B" muutub "A"-ks) jne return newstate
goal_test
peab kontrollima, et kõik ruumid on puhtad
Testimiseks
p=VacWorld(algolek) # print(p.actions(olek)) # asi = search.breadth_first_tree_search(p) # asi = search.iterative_deepening_search(p) # print(asi.solution())