日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

人工智能基础复习2——问题求解

發布時間:2024/1/18 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人工智能基础复习2——问题求解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

03 Problem solving search

很多AI任務都可以形式化為搜索問題:尋找路徑、過河問題、解謎題(魔方、數碼問題)、酒壺分水 Outline 問題求解智能體:基于目標Agent 問題形式化 問題實例 基本搜索算法
問題求解Agent function SIMPLE-PROBLEM-SOLVING-AGENT(percept) returns an actionstatic:seq, an action sequence, initially emptystate, some description of the current world stategoal, a goal, initially nullproblem, a problem formulationstate ← UPDATE-STATE(state,percept)if seq is empty then do goal ← FORMULATE-GOAL(state)problem ← FORMULATE-PROBLEM(state, goal)seq ← SEARCH(problem)action ← FIRST(seq)seq ← REST(seq)return action這是離線問題,在求解問題時是閉眼執行的,而聯機問題在解決問題時不需要完整的知識
搜索問題 搜索問題包括:狀態空間、后繼函數、開始狀態和目標測試 問題的解是從初始狀態到目標狀態的一組行動序列 搜索樹:計劃和結果的“what if"樹;開始狀態對應根結點;孩子結點對應后繼函數;結點標記為狀態,分別對應這些狀態的計劃;對大多數問題不可能建立整個樹 狀態空間圖:每個狀態是一個結點,每個后繼是一條發出的邊
實例:羅馬尼亞問題 構造目標:在Bucharest 構造問題:狀態:各個城市;行為:駕駛往返于各個城市 尋找問題的解:城市序列,如Arad,SIbiu,Fagaras,Bucharest 單狀態問題形式化: 初始狀態,如“at Arad” 行動或后繼函數,S(x)=set of action-state pairs,如S(Arad) = { <Arad→Zerind, Zerind>,... } 目標測試:明確的,如x = "at Bucharest",隱含的,如Checkmate(x) 路徑損耗:如距離,行動執行的次數等,c(x,a,y)>=0 問題的解是一組從初始狀態到目標狀態的行動序列 選擇一個狀態空間 真實世界中狀態空間必須抽象化 (抽象)狀態=真實狀態的集合 (抽象)行動=真實行動的復雜組合 (抽象)解=真實世界解決方案的真實路徑集合 每個抽象動作都應該比原問題更簡單 例子:吸塵器狀態空間圖 狀態:地板是否臟、機器人的位置 行動:Left, Right, Suck, NoOp 目標測試:沒有灰塵 路徑損耗:每次行動消耗1,NoOp則消耗0 例子:8數碼 狀態:數碼塊的位置 行動:move blank left, right, up, down 目標測試:給定的數碼塊位置狀態 路徑損耗:每次行動消耗1 注意:求解n數碼問題的最優解是NP完全的
基本搜索算法
Tree search algorithms——搜索樹 function Tree-Search(problem, strategy) returns a solution, or failureinitialize the search tree using the initial state of problemloop doif there are no candidates for expansion then return failurechoose a leaf node for expansion according to strategy(根據不同策略選擇擴展節點)if the node contains a goal then return the corresponding solutionelse expand the node and add the resuling nodes to the search treeend
實現:狀態 vs. 節點 狀態是物理配置的一種表現形式 一個節點是一個數據結構構成的搜索樹的一部分,包括狀態、父節點、行動、路徑成本g(n)、深度 實現:生成樹搜索 function TREE-SEARCH(problem, fringe) returns a solution, or failurefringe ← INSERT(MAKE-NODE(INITIAL-STATE[problem],fringe)loop doif fringe is empty then return failurenode ← REMOVE-FRONT(finge)if GOAL-TEST[problem](STATE[node]) then return SOLUTION(node)fringe ← INSERTALL(EXPAND(node, problem), fringe) function EXPAND(node, problem) returns a set of nodessuccessors ← the empty setfor each action, result in SUCCESSOR-FN[problem](STATE[node]) dos ← a new NODEPARENT-NODE[s] ← node; ACTION[s] ← action; STATE[s] ← resultPATH-COST[s] ← PATH-COST[node] + STEP-COST(node,action,s)DEPTH[s] ← DEPTH[node] + 1add s to successorsreturn successors
搜索策略:節點擴展順序的選取 性能評價:完備性、時間復雜度、空間復雜度、最優性 衡量時間和空間復雜度相關的項:分支因子b、最淺的目標節點的深度d、最大深度m
無信息搜索策略:只利用問題定義中提供的狀態信息 廣度優先搜索、一致代價搜索、深度優先搜索、深度受限搜索、迭代加深的深度優先搜索 1.廣度優先搜索:擴展未擴展過的最淺節點,將邊緣組織成FIFO隊列實現,新的厚積節點加入到隊列尾 完備性?是的(若d有限) 時間?1+b+b^2+b^3+...+b^d+b(b^d-1) = O(b^(d+1)),即d的指數 空間?O(b^(d+1))(保存所有節點在內存中) 最優?是的(若每步的路徑損耗為1),通常情況下不是最優的 空間代價是最大的問題,生成節點的速度可達100MB/sec,24hrs = 8640GB 2.一致代價搜索:擴展代價最小的未擴展的節點,邊緣組織成按路徑損耗排序的隊列實現,若單步代價均相等則等價于廣度優先搜索 完備性?是的,若單步代價>=ε 時間?空間? C*為最優解的代價,對于g<=C*,O(b^(ceiling(C*/ε))) 最優?是的,節點根據g(n)的遞增順序擴展 3.深度優先搜索:擴展深度最深的未擴展過的節點,邊緣=LIFO隊列,后繼結點放在隊列前 完備性?否,只在有限狀態空間中完備 時間?O(b^m),若m比d大很多,時間消耗更多,但若解是密集的,則比廣度優先搜索更快 空間?O(b^m),即線性 最優?否 4.深度受限搜索:設置界限l,解決無限深度路徑問題 若l<d,不完備,若l>d,非最優 遞歸實現 5.迭代加深的深度優先搜索:每輪增加深度限制的深度受限搜索 function ITERATIVE-DEEPENING-SEARCH(problem) returns a solutioninputs:problem, a problemfor depth o to ∞ do result DEPTH-LIMITED-SEARCH(problem, depth)if result ≠ cutoff then return resultend 完備性?是的 時間?(d+1)b^0 + db^1 + (d-1)b^2 + ... + b^d = O(b^d) 空間?O(bd) 最優?是的,若單步代價=1 對于b=10,d=5, N(IDS)=50+400+3000+20000+100000=123450 N(BFS)=10+100+1000+10000+100000+999990=1111100 IDS表現更優,因為在深度為d的節點不需展開 無信息搜索策略對比表格:見第三版課本P81
重復狀態:未檢測到重復狀態可能導致一個線性的問題變成一個指數的問題 圖搜索 function GRAPH-SEARCH(problem,fringe) returns a solution, or failureclosed ← an empty setfringe ← INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe)loop doif fringe is empty then return failurenode ← REMOVE-FRONT(finge)if GOAL-TEST(problem, STATE[node]) then return nodeif STATE[node] is not in closed thenadd STATE[node] to closedfringe ← INSERTALL(EXPAND(node,problem),fringe)end

04 Informed search

無信息的搜索:除了問題中提供的定義之外沒有任何關于狀態的附加信息 有信息的搜索:在問題本身的定義之外還可利用問題的特定知識
Outline 最佳優先搜索:貪婪最佳優先搜索、A*搜索 啟發式搜索 局部搜索算法:爬山法搜索、模擬退火搜索、局部束搜索、遺傳算法
最佳優先搜索 對每個結點利用評價函數f(n),擴展最需要擴展的還未擴展過的節點 實現:邊緣是一個根據需求的降序進行排列的隊列(優先級隊列) 特殊情況:貪婪搜索、A*搜索 一致代價搜索 策略是擴展最小路徑成本 優點:UCS完備且最優 缺點:在每個方向上進行搜索、沒有最優目標的信息 最佳優先搜索 策略是擴展離目標最近的節點 啟發函數:將狀態映射到距離的函數 一種普遍的情況是最佳優先搜索會使得直接找到錯誤的目標 最壞情況是像badly-guided DFS
貪婪搜索 評價函數f(n)=h(n)=節點n到目標節點的最低耗散路徑的耗散值估計值 h(n)是特定問題的函數,若n是目標節點,則h(n)=0,如hSLD(n)為從n到Bucharest的直線距離 貪婪搜索試圖擴展離目標節點最近的點 完備性?否,可能導致死循環,在有限空間中進行重復性檢查可構成完備性 時間?O(b^m),如果有一個好的啟發式函數,復雜度可以有效降低 空間?O(b^m),保存所有節點在內存中 最優?否
UCS與貪婪算法結合:Uniform-cost按路徑代價g(n)排序,Greedy-search按目標距離h(n)排序 A*按兩者的和f(n)=g(n)+h(n)排序 A*搜索 評價函數:f(n)=g(n)+h(n) g(n):到達節點n的耗散 h(n):啟發函數:從節點n到目標節點的最低耗散路徑的耗散估計值 f(n):經過節點n的最低耗散的估計函數 A*搜索使用可采納啟發式,即h(n)<=h*(n),h*(n)是到n的實際代價,h(n)>=0 如hSLD(n)從不會高估實際路徑長 對任一節點n,有h(n)<=h*(n),則稱h(n)是可采納的 可采納啟發式從不會過高估計到達目標的代價,即樂觀的 定理:如果h(n)是可采納的,A*使用的TREE-SEARCH是最優的 A*的最優性證明:略 一致性啟發函數:如果對于任一節點n,n'是n的后繼,對于某一行動a,有h(n)<=c(n,a,n')+h(n'),則A*啟發式是一致的 若h是一致的,有f(n')=g(n')+h(n')=g(n)+c(n,a,n')+h(n')>=g(n)+h(n)=f(n) f(n)值沿任何路徑都是非遞減的 定理:如果h(n)是一致的,則A*使用的GRAPH-SEARCH是最優的 A*的最優性證明:略 A*的性質: 完備性?是的(除非f<=f(G)的節點是無窮的) 時間?A*算法對于任何給定的啟發函數都是效率最優的,但仍為指數級 空間?保存所有節點在內存中 最優?是的 A*擴展所有f(n)<C*的節點、部分f(n)=C*的節點,不擴展f(n)>C*的節點
8數碼問題——把棋子水平或者豎直地滑動到空格中,直到目標局面: 平均解步數是22步,分支因子約為3 到達深度為22的窮舉搜索將考慮約3^22≈3.1×10^10 狀態個數O((n+1)!),NP完全問題 可采納啟發式函數: h1(n)=錯位的棋子數,h2(n)=所有棋子到其目標位置的水平豎直距離和 統治: 若對于所有n,有h2(n)>=h1(n),則稱h2統治h1(dominate,統治、占優),h2更利于搜索 h(n)=max(ha(n);hb(n))同樣是可采納的,且統治ha,hb 使用f(n)=g(n)+h(n)搜索,h(n)=錯放數字個數,g(n)=節點深度
松弛:減少行動限制 一個松弛問題的最優解的耗散是原問題的一個可采納的啟發式 如果棋子可以任意移動,則h1給出最短的確切步數 如果棋子可以移動到任意相鄰的位置,則h2給出最短的確切步數 松弛問題的最優解不大于實際問題的最優解 構造松弛問題 原問題:一個棋子可以從方格A移動到方格B,如果A與B水平或者垂直相鄰而且B是空的 松弛1:一個棋子可以從方格A移動到方格B,如果A與B相鄰——h2 松弛2:一個棋子可以從方格A移動到方格B,如果B是空的 松弛3:一個棋子可以從方格A移動到方格B——h1 如果有一個可采納啟發式的集合{h1,...,hm},h(n)=max(h1(n),...,hm(n)}可采納并比成員啟發式更有優勢
評價函數f(n) h(n)——節點n到目標節點的最低耗散路徑的耗散估計值 g(n)——初始節點到這個節點的路徑損耗的總和 f(n)=g(n): Uniform Cost f(n)=h(n): Greedy f(n)=g(n)+h(n): A*
局部搜索算法 對大規模問題,A*存在不足:狀態空間太大、不能訪問所有f值小于最優解的狀態、不能存儲整個邊緣值 解決辦法:更好的啟發式、貪婪爬山算法(fringe size = 1)、束搜索(limited fringe size) 有限的內存選擇:無足夠的內存來存儲整個邊緣 爬山搜索:只有最佳節點保持不變,無邊緣,優先根據h選擇后繼(貪婪爬山)與貪婪回溯相比,后者仍舊擁有邊緣 束搜索(限制內存搜索):在邊緣保留K個節點、轉儲所需的最低優先節點、可以單獨根據h來優先排序(貪婪束搜索)、h+g(限制內存的A*) 狀態空間=一系列完全狀態 局部搜索算法:保持單一的一個當前狀態,嘗試去改進它,直至無法變得更好 常數空間,適合在線和離線搜索 通常更有效(但不完備)
例子:n皇后問題 優化問題: 爬山法搜索 從任何地方開始 總是選擇最優的相鄰值 如果所有相鄰值均未比當前值的得分高,則退出 像健忘的人在大霧中試圖登頂珠穆朗瑪峰,不能一下子看到全局 function HILL-CLIMBING(problem) returns a state that is a local maximuminputs:problem, a problemlocal variables: current, a nodeneighbor, a nodecurrent ← MAKE-NODE(INITIAL-STATE[problem])loop do neighbor ← a highest-valued successor of currentif VALUE[neighbor] <= VALUE[current] then return STATE[current]current ← neighbor問題:依賴于初始狀態,可能會陷入局部最大值的困境 隨機重啟爬山法克服了局部極大值 極度完備,易實現(只要不太崎嶇) 隨機側移逃離山肩,極大循環 隨機重啟爬山算法: 1. When stuck, pick a random new starting state and re-run hill-climbing from there 2. Repeat this k times 3. Return the best of the k local optima
模擬退火搜索:通過允許一些“壞”的移動,但逐漸降低它們的頻率逃離局部最大值 function SIMULATED-ANNEALING(problem, schedule) returns a solution stateinputs: problem, a problemschedule, a mapping from time to "temperature"local variables: current, a nodenext, a nodeT, a "temperature" controlling prob. of downward stepscurrent ← MAKE-NODE(INITIAL-STATE[problem])for t ← 1 to ∞ doT ← schedule[t]if T=0 then return currentnext ← a randomly selected successor of currentΔE ← VALUE[next] - VALUE[current]if ΔE > 0 then current ← nextelse current ← net only with probability e^(ΔE/T) 模擬退火搜索的性質: 如果調度讓T下降得足夠慢,算法找到全局最優解的概率逼近于1 廣泛應用于VLSI布局、航空調度等
Local Beam Search(局部剪枝搜索) 記錄k個狀態,而不是1個,從k個隨機生成的狀態開始,每次迭代,全部k個狀態的所有后繼全部生成,如果有目標狀態,停止,否則選擇k個最佳后繼,重復該過程 問題:很多時候,所有k個狀態最終停留在相同的局部最大值上
遺傳算法 利用自然選擇的隱喻,通過結合兩個父狀態生成后繼狀態 從k個隨機生成的狀態開始(種群),一個狀態被表示為一個有限長度字符串(0、1串) 評價函數:適應度函數(fitness function),越好的狀態值越高 通過選擇、雜交、變異產生下一代 8皇后的遺傳算法圖解:見課本P111
有信息/無信息搜索——主要思想 好的啟發式搜索能大大提高搜索性能 但由于啟發式搜索需要抽取與問題本身有關的特征信息,而這種特征信息的抽取有時會比較困難,因此盲目搜索仍不失為一種有用的搜索策略 好的搜索策略應該:引起運動——避免原地踏步;系統——避免兜圈;運用啟發函數——緩解組合爆炸 搜索樹 vs 搜索圖 搜索樹:結點有重復,但登記過程簡單 搜索圖:結點無重復,但登記過程復雜(每次都要查重),省空間,費時間

05 CSP

Constraint Satisfaction Problems 約束滿足問題
Outline CSP實例 CSP的回溯搜索 問題結構和問題分解 CSP局部搜索
標準搜索問題:狀態是一個黑盒——任何可以由目標測試、評價函數、后繼函數訪問的數據結構 CSP:狀態由值域Di中的變量Xi定義;每個約束包括一些變量的子集,并指定這些子集的值之間允許進行的合并 形式化表示方法的簡單例子 實例:地圖著色問題 變量:WA,NT,Q,NSW,V,SA,T 值域:Di={red,green,blue} 約束:相鄰區域染上不同顏色 解:滿足所有約束的顏色分配
約束圖 Binary CSP:每個約束和兩個變量相關 Constraint graph:節點是變量,弧是約束 通用的CSP算法利用圖結構來加速搜索,如Tasmania是獨立的子問題
CSP的種類 離散變量: 有限區域:n個變量,值域大小d → O(d^n)完全分配 例如:Boolean CSPs, incl. Boolean satisfiability (NP-complete) 無限值域(integers,strings,etc.),如作業調度 需要一種約束語言 線性約束可解,非線性不可判定 連續變量: 如:哈勃太空望遠鏡觀測的開始、結束時間 線性規劃方法在多項式時間內是線性約束可解的
約束的種類 一元約束涉及單一變量,如 SA≠green 二元約束涉及變量對,如SA≠WA 高階約束涉及3個或更多變量,如密碼算數的列約束 偏好約束(軟約束),如紅色比綠色更好;偏好約束通常被處理成個體變量賦值的耗散——約束優化問題(COP)
例子:密碼算數 變量:F T U W R O X1 X2 X3 值域:{0,1,2,3,4,5,6,7,8,9} 約束:alldiff (F,T,U,W,R,O) O + O = R + 10.X1 X1 + W + W = U + 10.X2 X2 + T + T = O + 10.X3 X3 = F , T ≠ 0, F ≠ 0
真實世界的CSP 指派問題:誰教授哪一節課、誰閱讀哪篇文獻 時間安排問題:何時何地上什么課 硬件布局、交通調度、工廠調度、平面布置 注意真實世界問題包含了實數值變量
標準搜索的增量形式化 初始狀態:空,{} 后繼函數:分配一個值給未賦值的變量,并且新賦值與當前賦值不沖突(如果不存在合法賦值則失敗) 目標測試:當前分配是完備的 這和所有的CSP是一樣的,每個解在深度n出現n個變量,利用深度優先搜索 由于路徑是不相關的,所以可以使用完全狀態形式化 在深度l,b=(n-1)d,所以n!.d^n 個葉子 !!!!
回溯搜索 變量賦值具有可交換性,如 [WA = red then NT = green] 等價于 [NT = green then WA = red] 只需考慮對每個節點的單一變量的賦值:b = d ?所以有d^n個葉節點 在CSP中,對深度優先搜索的單一變量賦值稱為回溯搜索 回溯搜索是CSP中基本的無信息搜索算法 可以解決規模為n≈25的n皇后問題 function BACKTRACKING-SEARCH(csp) returns solution/failurereturn RECURSIVE-BACKTRACKING({},csp) function RECURSIVE-BACKTRACKING(assignment,csp) returns soln/failureif assignment is complete then return assignmentvar ← SELECT-UNASSIGNED-VARIABLE(VARIABLES[csp],assignment,csp)for each value in ORDER-DOMAIN-VALUES(var, assignment,csp) doif value is consistent with assignment given CONSTRAINTS[csp] thenadd {var = value} to assignmentresult ← RECURSIVE-BACKTRACKING(assignment,csp)if result ≠ failure then return resultremove {var = value} from assignmentreturn failure
另一個回溯搜索例子:滿足{┐a∨b,┐b∨c,┐c,┐a}的值 枚舉法:{a,b,c} = 1 1 1,1 1 0, 1 0 1, 1 0 0, 0 1 1, 0 1 0, 0 0 1, 0 0 0 回溯法:{a,b,c} = 1 - ?-, 0 1 1, 0 1 0, 0 0 1, 0 0 0
提高回溯法的效率 通常的算法有很大的改善空間: 1.下一次賦值應該對哪個變量進行? 2.嘗試的變量應該按照什么順序? 3.是否可以盡早地發現不可避免的失敗? 4.是否可以利用問題結構?
1. Minimum remaining values 最小剩余值(MRV):選擇擁有最少合法值的變量 約束最多的變量先開始,按照最快失敗的順序進行
Degree heuristic 度啟發式 Tie-breaker among MRV variables 度啟發式:通過選擇與其他未賦值變量約束最多的變量來試圖降低未來的分支因子
2. Least constraining value 最少約束值 給定一個變量,選擇最少約束值:優先選擇的值是給鄰居變量留下更多的選擇;可能會需要更大的計算量
Forward checking——前向檢驗 思路:對剩下的未賦值的變量的合法值進行跟蹤檢查,如果發現任一變量不再擁有合法值則終止搜索算法
3. Constraint propagation——約束傳播 前向檢查從已賦值的變量向未賦值的變量傳播信息,但是不對早期的失敗提供早期的發現 NT和SA不能都是藍色(具體例子見課本P181) 約束傳播局部重復地實施約束
Arc consistency——弧相容(定義見課本P174) 使每條弧保持相容(consistent)的最簡單的傳播形式 X → Y is consistent iff for every value x of X there is some allowed y if X loses a value, neighbors of X need to be rechecked 弧相容比前向檢驗更早地發現失敗,可以作為預處理器或在每次賦值之后進行 弧形容算法AC-3: function AC-3(csp) returns the CSP, possibly with reduced domainsinputs:csp, a binary CSP with variables {X1,X2,...,Xn}local variables:queue, a queue of arcs, initially all the arcs in cspwhile queue is not empty do(Xi,Xj) ← REMOVE-FIRST(queue)if REMOVE-INCONSISTENT-VALUES(Xi,Xj) thenfor each Xk in NEIGHBORS[Xi] doadd (Xk,Xi) to queue function REMOVE-INCONSISTENT-VALUES(Xi,Xj) returns true iff succeedsremoved ← falsefor each x in DOMAIN[Xi] do if no value y in DOMAIN[Xj] allows (x,y) to satisfy the constraint Xi ? Xjthen delete x from DOMAIN[Xi]; removed ← truereturn removed
4. 問題結構和問題分解 對Tasmain著色和對mainland著色是兩個獨立的子問題,獨立性可以通過在約束圖中尋找連通域來確定 假設每個子問題包含了n個變量中的c個變量,最壞情況下的工作量是n/c.d^c,是n的線性函數 如:n=80,d=2,c=20,4*2^20
樹結構的CSP 定理:如果約束圖無環,則CSP可以在O(n*d^2)時間內解決;任何一個樹狀結構的CSP問題可以在變量個數的線性時間內求解 與通常的CSP比較,后者的最壞時間為O(d^n) 這個定理也可以用邏輯和概率性原因解釋:在語法約束和推理復雜性之間的一個重要例子
CSP的樹結構算法 1. 選擇一個變量作為根節點,從根節點到葉子節點進行排序,使每個節點的父節點在該節點之前 2. 對j從n到2,執行函數REMOVEINCONSISTENT(Parent(Xi),Xi) 3. 對j從1到n,對Xi相容地賦值Parent(Xi) 復雜度:O(n*d^2)
近似樹結構的CSP 調整:實例化一個變量,刪除其鄰居節點的值域 Cutset conditioning(割集調整):實例化變量的一個集合,使剩余的約束圖變成樹 割集大小c → 運行時間O(d^c(n-c)d^2),對于很小的c速度很快 尋找一個最小的割集是個NP問題
CSP局部搜索 爬山、模擬退火工作于完全狀態化的形式化,即所有已賦值的變量 應用于CSP:允許未滿足約束的狀態、操作對變量的值重新賦值 變量選擇:對任意沖突的變量進行隨機選擇 最小沖突啟發式變量選擇:選擇會造成與其他變量的沖突最小的值,如爬山h(n)=違背約束的總數
例子:4皇后問題 狀態:4個皇后在棋盤的4列(4^4=256個狀態) 行動:在列方向上移動皇后 目標測試:沒有互相攻擊的皇后 評價:h(n)=互相攻擊的對數
最小沖突的性能評價 給定隨機初始狀態,可以在常數時間內解決任意大概率n值的n皇后問題 R=(number of constraints) / (number of variables)
例子:3-SAT問題 每個約束涉及3個變量。。。 加速1:模擬退火 思路:通過一些“壞”的行動來逃離局部最大值,但是逐漸降低它們的頻率 If 新狀態比現有狀態好,移動到新狀態 Else ?以某個小于1的概率接受該移動,此概率隨溫度“T"降低而下降 加速2:最小最大值優化 Putweights on constraints repeatPrimal search: update assignment to minimize weighted violation, until stuckDual step: update weights to increase weighted violation, until unstuck until solution found, or bored

06 GAME PLAYING

博弈被認為是人工智能研究的一個很好的問題 博弈是不平凡的 - 玩家需要類似人類的智能
- 游戲可以很復雜(象棋、圍棋等)
- 在有限的時間內需要作出決定
游戲通常是 - 明確的和可重復的
- 充滿可觀察和有限的環境
可以直接比較人類和計算機

Outline - 游戲
- 最優策略
? ? - 極小極大算法
? ? - α-β剪枝
- 資源限制和近似評估
- 包含幾率因素的游戲
- 不完全信息的游戲
游戲 vs. 搜索問題 - 不可預測的對手=>解決方案是對對手的每種可能的回應選擇一種移動的策略
- 時間限制=>游戲對于低效率有嚴厲的懲罰
游戲的種類
? ? ? ? ? ? ? ? ? ? ? ? ? ? 確定型的 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 隨機的
完全信息 ? ? ? ? ?象棋跳棋圍棋奧賽羅 ? ? ? ? ? ? ? ? ?西洋雙陸棋
不完全信息 ? ?戰列艦、盲的井棋 ? ? ? ? ? 橋牌、撲克、拼字游戲核戰爭

博弈樹(2個玩家、確定性、輪流)
確定性、兩人制
- 一字棋、象棋、跳棋
- 游戲搜索
? ? - 狀態空間搜索樹
? ? - 玩家輪流
? ? - 每一層,包含一輪的移動
? ? - 選擇移動到效用值最高的位置
- 零和游戲
? ? - 一個玩家最大化結果
? ? - 另一個玩家最小化結果

極大極小原則
- 假設雙邊玩家均作最優選擇
- 計算機假設在它移動之后,對手會選擇最小值的移動
- 計算機選擇的最佳移動考慮了它的移動以及對手的最優移動

極大極小值
- 對確定性、完全信息博弈的最優策略
- 策略:選擇移動到具有最高的極大極小值的位置,在對手也使用最優策略的條件下,能導致至少不比其它策略差的結果。
- 假設兩個游戲者都按照最優策略進行,那么節點的極小極大值就是對應狀態的效用值(對于MAX)
? ? - MAX優先選擇有極大值的狀態
? ? - MIN優先選擇有極小值的狀態
- MINMAX-VALUE(n)=
UTILITY(n) 當n為終止狀態
max MINMAX-VALUE(s) 當n為MAX節點
min MINMAX-VALUE(s) 當n為MIN節點?
極大極小值算法
function MINIMAX-DECISION(state) returns an actioninputs: state, current state in gamereturn the a in ACTIONS(state) maximizing MIN-VALUE(RESULT(a,state))function MAX-VALUE(state) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v ← -∞for a, s in SUCCESSORS(state) do v ← MAX(v, MIN-VALUE(s))return vfunction MIN-VALUE(state) returns a utility valueif TERMINAL-TEST(state) then return UTILITY(state)v ← ∞for a, s in SUCCESSORS(state) do v ← MIN(v,MAX-VALUE(s))return v
性質
- 完備性:僅當樹是有限的(國際象棋有特定的規則),在一個無限的樹中甚至存在有限的策略
- 最優性:是的,對戰一個最優策略的對手,不然呢
- 時間復雜度:O(b^m)
- 空間復雜度:O(bm) (深度優先搜索)

α-β剪枝
- 如果對戰一個聰明的對手,博弈樹的一些樹枝不會被遍歷到。
- 剪枝可以忽略一些樹枝
- 為什么稱為α-β
- α是到目前為止在路徑上的任意選擇點發現 的MAX的最佳(即最大值)選擇,β的定義類似
α-β算法 function ALPHA-BETA-DECISION(state) returns an action return the a in ACTIONS(state) maximizing MIN-VALUE(RESULT(a, state)function MAX-VALUE(state,α,β) returns a utility valueinputs: state, current state in gameα, the value of the best alternative for MAX along the path to stateβ, the value of the best alternative for MIN along the path to stateif TERMINAL-TEST(state) then return UTILITY(state)u ← -∞for a, s in SUCCESSORS(state) do v ← MAX(v, MIN-VALUE(s,α,β))if v ≥ β then return vα ← MAX(α,v)return vfunction MIN-VALUE(state,α,β) returns a utility valuesame as MAX-VALUE but with roles of α,β reversed
α-β的效率
- 效果取決于后繼的檢查順序,如果最優的后繼最先被檢查則效果更好。
- 最壞的情況:
? ? - 順序排列所以沒有樹枝被修剪
? ? - 對窮舉算法沒有改進
- 最好的情況:
? ? - 每個玩家的最優移動都被最先評價
- 在實踐中,性能接近最佳,而不是最壞的

α-β的性質
- 剪枝不影響最后的結果
- 好的移動順序提高了剪枝的效率
- 在好的移動順序情況下,時間復雜度=O(b^(m/2))

資源限制
- 標準方法:有限深度搜索
? ? - 利用截斷測試代替終止測試
? ? ? ? - 例如深度限制(可能增加靜態搜索)
? ? - 利用可以估計棋局效用值的啟發式評價函數EVAL取代效用函數
? ? ? ? - 即估計位置期望值的評價函數

評價函數
- 理想函數:返回位置的效用值
- 實際上:典型特征的線性加權和
? ?Eval(s)=w_1f_1(s)+w_2f_2(s)+...+w_nf_n(s)
- 越重要的特征,加權值越高
- 確定性博弈的結果作為一個序數效用函數
有限時間的解決
- 在實際游戲中,通常對每一步移動有個時間限制T
- 怎么考慮進去呢
? ? - 不能中途停止α-β,有信心利用期望的結果
? ? - 所以,我們可以設置一個保守的極限深度,保證我們會在小于T的時間內找到下一步
? ? - 但是,搜索可能會提前停止,進行更多搜索的機會被浪費掉了
- 實際中,常用迭代加深搜索(IDS)
? ? - 以逐漸增加的深度限制進行α-β搜索
? ? - 當時間到時,使用最后一次完成的α-β搜索的策略(即已完成的最深的搜索)
在實踐中的確定性游戲
- 國際象棋:深藍在1997年一場六局的比賽中打敗人類世界冠軍,深藍每秒搜索2億個位置,使用非常復雜的評估,并擴大到40層。
? ? - 計算機能夠預見它的決策中的長期棋局序列。機器拒絕走一步有決定性短期優勢的棋—顯示了非常類似人類的對危險的感覺。
- 西洋跳棋:Chinook,世界人機跳棋冠軍
? ? - Chinook在1994年結束了人類長達40年的世界冠軍統治
? ? - 2007年,跳棋得到解決,最佳算法最終導致平局
? ? - Chinook不會輸
? ? - 使用了一個提前計算好的存有443,748,401,247個不多于8個棋子的棋局數據庫,使它的殘局走棋沒有缺陷
- 奧賽羅:人類冠軍拒絕對戰強大的電腦
- Go,圍棋:人類冠軍拒絕對戰弱小的計算機。在圍棋中,b>300(棋盤為19×19),所以大多數程序使用模式的知識基礎,提出合理的動作。人工智能的試金石。
? ? - AlphaGl:首次在19×19的棋盤上打敗人類
? ? - 谷歌電腦棋手DeepMind
? ? - 深度神經網絡:
? ? ? ? - 價值網絡:評價板的位置
? ? ? ? - 政策網絡:選擇移動
- 訓練于:
? ? ? ? - 有監督的學習
? ? ? ? - 增強自我發揮學習
- 搜索算法
- 蒙特卡羅模擬+價值/政策網絡

AlphaGo:背景
- 減少搜索空間
? ? - 減少深度
? ? ? ? - 位置評價
- 減少分支
? ? - 基于政策的移動采樣
? ? - 政策=概率分布 p (a|s)

AlphaGo中的深度神經網絡
- AlphaGo使用兩種類型的神經網絡
? ? - 政策網絡:下一步的行動是什么
? ? ? ? - 從人類專家的行動學習
? ? - 價值網絡:狀態的值是什么
? ? ? ? - 利用政策網絡從自我學習
- SL=監督學習,RL=強化狀態
不確定的游戲:西洋雙陸棋
- 在不確定的游戲中,機會由骰子、洗牌決定,簡化的例子用擲硬幣表示。
- 最大期望效用
? ? - 為什么對效用求平均,而不是極大極小值
? ? - 最大期望效用原則:一個agent應該根據其知識選擇期望效用最大化的行為
? ? - 決策的一般原則
? ? - 經常作為理性的定義
不確定的游戲算法
- ......
if state is a chance node then
return average of EXPECTIMINIMAX-VALUE of SUCCESSORS(state)

隨機的兩個玩家
- TDGammon采用depth-2搜索+很好的eval函數+強化學習:世界冠軍的水平
- 評價函數應該是棋局的期望效用值的正線性變換

不完全信息的游戲
- 例如,紙牌游戲,對手的初始牌未知,通常我們對每一次出牌計算一次概率值,就像游戲開始時有一個大骰子一樣。
- 策略:在評價一個有未知牌的給定行動過程時,首先計算出每副可能牌的出牌行動的極小極大值,然后再用每副牌的概率來計算得到對所有發牌情況的期望值。

正確的分析
- 行動的價值是在所有的實際狀態的平均值的直覺是錯誤的。
- 局部可觀測性,行動的價值取決于信息的狀態或agent所在的信度狀態。
- 可以生成和搜索一棵信息狀態樹

計算機玩德克薩斯撲克

總結

- 游戲是非常有趣的工作
? ? - 完美是不可能實現的,必須近似
- 游戲的最好模型是搜索問題
? ? - 博弈搜索樹表示電腦/對手的輪流移動
- 評價函數估計給定每個玩家的板的配置質量、
- 極大極小算法選擇最佳移動的假設是對手總是選擇最好的移動
- α-β是可以避免搜索樹的很大一部分來深化搜索深度的算法—消除無關的子樹以提高效率

搜索總結
- 無信息的搜索策略
? ? - 深度優先搜索(BFS),一致代價搜索,深度優先搜索(DFS),深度受限搜索,迭代加深的深度優先搜索
- 有信息的搜索策略
? ? - 最佳優先搜索:貪婪、A*
? ? - 局部搜索:爬山、模擬退火等
- 約束滿足問題
? ? - 回溯=深度優先搜索的給每個節點分配一個變量
? ? - 增強:變量的順序和值選擇啟發式,向前檢查,約束傳播

總結

以上是生活随笔為你收集整理的人工智能基础复习2——问题求解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。