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())