Begreper & referanser
Alle nøkkelbegrepene, formlene og referansene fra Hierarkisk planlegging og planlegging under usikkerhet, samlet på én side. Bruk denne som oppslag når du leser, øver flashcards eller tar quiz.
Begreper
Sentrale begreper fra kapittelet med korte definisjoner.
En abstrakt handling, som «klargjør hytta», som ikke kan utføres direkte, men som har én eller flere forfininger. Forkortes HLA (high-level action).
En rekke handlinger som en høynivåhandling kan erstattes med. Rekka kan inneholde både høynivåhandlinger og primitive handlinger (refinement).
En rekke av bare primitive handlinger som en høynivåhandling kan forfines til, eventuelt gjennom flere nivåer. Høynivåhandlingen når målet hvis minst én av implementasjonene gjør det (implementation).
En handling agenten kan utføre direkte, som «hent ved». Den har forutsetning og effekt som i PDDL og ingen forfininger (primitive action).
Søk som starter med en plan med én høynivåhandling og gjentatte ganger erstatter en høynivåhandling i planen med en av forfiningene, til planen er primitiv og når målet (hierarchical search, HTN planning).
Planlegging uten percepter: agenten vet bare at starttilstanden er én av flere mulige, og planen må nå målet fra alle (sensorless planning).
En effekt som bare inntreffer når en betingelse holder, skrevet . Er betingelsen ukjent i oppfatningstilstanden, blir fluentene i ukjente (conditional effect).
Planlegging der planen forgrener seg på percepter med hvis–så–ellers, slik at agenten velger neste handling etter hva den observerer (contingent planning).
Planlegging som veves sammen med utførelsen: agenten planlegger, handler, observerer og planlegger på nytt når verden ikke er som ventet (online planning).
Å sjekke underveis om planen fortsatt virker, og utløse replanlegging når den ikke gjør det (execution monitoring).
Overvåking der agenten før hver handling bare sjekker at forutsetningen for neste handling holder (action monitoring).
Overvåking der agenten før hver handling sjekker at tilstanden oppfyller målet regressert gjennom resten av planen, altså at hele resten av planen fortsatt virker (plan monitoring).
Overvåking der agenten sjekker om det har dukket opp et bedre mål å arbeide mot (goal monitoring).
Å lage en ny plan fra tilstanden agenten faktisk er i, når overvåkingen viser at den gamle ikke lenger virker. Ofte planlegges bare veien tilbake til et punkt i den gamle planen (replanning).
Formler
Hver formel: hva den heter, hvordan den ser ut, og hva symbolene betyr.
Oppfatningstilstanden etter en handling
Brukes for hver handling i en sensorløs plan. Fjern komplementene til effektene og legg til effektene. En betinget effekt gir når er kjent sann, ingenting når er kjent usann, og gjør fluentene i ukjente når er ukjent. Vanlig feil: å anta at en ukjent fluent er usann.
Kravet til en sensorløs løsning
En sensorløs plan med handlinger er en løsning når hver mållitteral er kjent sann i den siste oppfatningstilstanden. Da når planen målet fra alle starttilstandene. Vanlig feil: å teste planen fra bare én starttilstand.
Kravet i planovervåking
Sjekkes før handling : tilstanden må oppfylle målet regressert gjennom resten av planen. Holder det, fortsetter agenten; ellers replanlegger den. Handlingsovervåking sjekker bare forutsetningen til .
Antall forfiningstrær
Antall måter å forfine en plan med primitive handlinger på når hver høynivåhandling har forfininger med steg, mot handlingsrekker i et primitivt søk. Eksponenten er antall indre noder i forfiningstreet; med nivåer av høynivåhandlinger er .
Kodesnutter
Kodesnutter fra kapittelet, vist literal.
Implementasjoner mot primitive planer
forfininger = 2 # @param 1..4nivaaer = 3 # @param 1..4k = 2 # steg i hver forfiningb = 6 # handlinger per tilstand i et primitivt søk d = k ** nivaaer # primitive handlinger i en ferdig planindre = (d - 1) // (k - 1) # høynivåhandlinger som forfines (indre noder i treet)tall = lambda x: f"{x:,}".replace(",", " ")print(f"HLA-er som forfines: {indre}")print(f"Primitive handlinger per implementasjon: {d}")print(f"Antall implementasjoner: {tall(forfininger ** indre)}")print(f"Planer i primitivt søk med b = {b}: {tall(b ** d)}")Prøv: sett nivaaer til 4 og se at linja Antall implementasjoner: blir 32 768, mens det primitive søket får over to billioner planer å velge mellom.
En sensorløs plan for lysene i flere rom
from itertools import product antall_rom = 3 # @param 2..5alt_av = 1 # @param 0..1 rom = [f"R{i}" for i in range(1, antall_rom + 1)]plan = (["AltAv"] if alt_av else []) + [f"Vipp({r})" for r in rom] def utfor(lyser, a): # lyser = mengden rom der lampa er på if a == "AltAv": return frozenset() r = a[5:-1] # Vipp(r) bytter lampa i r: betinget effekt return lyser - {r} if r in lyser else lyser | {r} def kjente(b): # literaler som er sanne i alle fysiske tilstander i b paa = [f"Lys({r})" for r in rom if all(r in s for s in b)] av = [f"¬Lys({r})" for r in rom if all(r not in s for s in b)] return "{" + ", ".join(paa + av) + "}" # Oppfatningstilstanden som mengde av fysiske tilstander: alle 2^n i startenb = {frozenset(r for r, p in zip(rom, bits) if p) for bits in product([0, 1], repeat=antall_rom)}print(f"Fysiske tilstander i starten: {len(b)}")for a in plan: b = {utfor(s, a) for s in b} print(f"Etter {a}: {kjente(b)}, fysiske tilstander = {len(b)}")print(f"Planen virker i alle starttilstander: {'ja' if b == {frozenset(rom)} else 'nei'}")Prøv: sett alt_av til 0 og se at hver Vipp etterlater en tom mengde kjente literaler, og at linja Planen virker i alle starttilstander: blir nei.
Planovervåking når kranen kan svikte
import random p_feil = 0.30 # @param 0.00..0.60 0.05random.seed(4) H = {"Fyll": ({"Ved(Kran)", "¬Full"}, {"Full"}, set())} # navn -> (PRECOND, ADD, DEL)for b in ["B1", "B2", "B3"]: H[f"TilBed({b})"] = ({"Ved(Kran)"}, {f"Ved({b})"}, {"Ved(Kran)"}) H[f"TilKran({b})"] = ({f"Ved({b})"}, {"Ved(Kran)"}, {f"Ved({b})"}) H[f"Vann({b})"] = ({f"Ved({b})", "Full"}, {f"Vannet({b})"}, {"Full"})maal = {"Vannet(B1)", "Vannet(B2)", "Vannet(B3)"}res = lambda s, a: frozenset((s - H[a][2]) | H[a][1])ok = lambda s, a: all((l[1:] not in s) if l[0] == "¬" else (l in s) for l in H[a][0]) def planlegg(s): # bredde-først progresjon: korteste plan fra s forelder, i = {s: []}, 0 # forelder er også køen: nøklene i innsettingsrekkefølge while not maal <= (s := list(forelder)[i]): forelder |= {res(s, a): forelder[s] + [a] for a in H if ok(s, a) and res(s, a) not in forelder} i += 1 return forelder[s] def utfor(s, plan): # kjør resten av planen; en handling som ikke er anvendbar, stopper alt for a in plan: s = res(s, a) if ok(s, a) else frozenset() return s s, plan, utfort, replan = frozenset({"Ved(Kran)"}), [], 0, 0while not maal <= s and utfort < 60: if not maal <= utfor(s, plan): # planovervåking: når resten av planen målet? plan, replan = planlegg(s), replan + (utfort > 0) a, plan, utfort = plan[0], plan[1:], utfort + 1 s = res(s, a) if a != "Fyll" or random.random() >= p_feil else s # kranen kan svikteprint(f"Utførte handlinger: {utfort}")print(f"Replanlegginger: {replan}")print(f"Mål nådd: {'ja' if maal <= s else 'nei, stoppet etter 60 handlinger'}")Prøv: sett p_feil til 0 og se at Replanlegginger: er 0 og Utførte handlinger: er 11, og øk den så til 0.5: hver mislykket fylling koster én handling og én replanlegging.
Læringsmål
Hva du skal kunne etter å ha lest kapittelet.
- 01Forklar høynivåhandling, forfining og implementasjon, og finn implementasjonene til en høynivåhandling i et hierarki
- 02Regn ut antall implementasjoner med , og sammenlign med for primitivt søk
- 03Spor oppfatningstilstanden gjennom en sensorløs plan, også med betingede effekter
- 04Sammenlign sensorløs, betinget og online planlegging, og velg riktig form for et gitt miljø
- 05Forklar handlings-, plan- og målovervåking, og avgjør når planovervåking utløser replanlegging