河粉是什么材料做的| 肺炎吃什么| 六月十二日是什么日子| 颈椎疼吃什么药| 碳酸钙d3片什么时候吃最好| 缺铁性贫血吃什么药最好| 经常手麻是什么原因| 荷叶有什么作用| 大便带血是什么原因| 申字五行属什么| 医生是什么生肖| 耳鸣吃什么| 双肺纹理增多增粗是什么意思| 三分三是什么药| 不自爱是什么意思| 赝品是什么意思| p图是什么意思| obsidian什么意思| 阴囊潮湿是什么原因造成的| 脚底发黄是什么原因| 梦见煤是什么意思| 政协主席是干什么的| 苦瓜和什么搭配最好| 天王星代表什么| 心脏早博吃什么药好| 郁金香的花语是什么| 头陀是什么意思| 感冒吃什么食物比较好| 梦到别人给钱是什么意思| 眼镜片什么材质的好| 人得猫癣用什么药| 流鼻血什么原因| 驴友是什么意思| 银耳为什么助湿气| 研讨会是什么意思| 被蜱虫咬了挂什么科| 梦见别人打架是什么意思| 黑木耳不能和什么一起吃| 做梦代表什么生肖| 白带多是什么原因| 炙是什么意思| 中元节注意什么| 捉奸什么意思| 什么的散步| 全组副鼻窦炎什么意思| 膝盖后面叫什么部位| 白色裤子配什么上衣| 狗的尾巴有什么作用| 肺门不大是什么意思| 急性胰腺炎吃什么药| 刷单是什么意思| 八月十号是什么星座| 倒置是什么意思| 蛇酒不是三十九开什么| 腘窝囊肿是什么原因引起的| 微创人流和无痛人流有什么区别| 268是什么意思| psp是什么| 比目鱼是什么鱼| 鱼子酱是什么东西| 桑蚕丝用什么洗最好| 苁蓉有什么功效| 长沙开福寺求什么最灵| 屁股里面疼是什么原因| 什么是美育| m是什么尺码| 痣发痒是什么原因| 7月20是什么星座| superstar是什么意思| 牛拉稀用什么药最快| 检测怀孕最准确的方法是什么| 老凤祥银楼和老凤祥有什么区别| 两班倒是什么意思| 1月2日是什么星座| 白细胞高一点点是什么原因| 宿命是什么意思| 身披枷锁是什么生肖| 孙俪最新电视剧叫什么| 什么是法定节假日| 睡觉爱流口水是什么原因| 阿托伐他汀钙片有什么副作用| 标准的青色是什么颜色| 痔瘘和痔疮有什么区别| 胃疼去医院挂什么科| 袁崇焕为什么被杀| 脸上出汗多是什么原因| 什么什么为笑| 四维是检查什么| 举头三尺有神明是什么意思| 脾虚是什么症状| nb什么意思| suvmax是什么意思| 梦见自己买衣服是什么意思| 右肾肾盂分离什么意思| 牙膏什么牌子最好| 右膝关节退行性变是什么意思| 一个兹一个子念什么| 小便有点红是什么原因| 饮鸩止渴是什么意思| 尿比重偏低是什么原因| 碳足迹是什么| 金屋藏娇定富贵是什么生肖| 输卵管堵塞吃什么药可以疏通| 塑料五行属什么| 喝酒精的后果是什么| 一什么毛驴| 自讨没趣什么意思| belkin是什么牌子| 途字五行属什么| 到底为什么| 牛肉发绿色是什么原因| 出局是什么意思| 珍珠是什么做的| 鬼斧神工是什么意思| 咸池是什么意思| 金达莱是什么花| 血症是什么病| 权衡利弊是什么意思| 女性尿臭味重是什么病| 腋毛癣用什么药膏| 辽宁古代叫什么| 弱视是什么意思| 什么是业力| 五月七号是什么星座| 肺部结节挂什么科| 割包皮挂什么科室| 什么自如| 女性胃火旺吃什么药| 九二共识是什么| 六安瓜片是什么茶| 7月8日什么星座| 鼻息肉长什么样| 少校什么级别| 孕妇吃什么水果好| 条件反射是什么意思| 下发是什么意思| 血压低压高是什么原因造成的| 大校军衔相当于什么官| 楞严神咒是什么意思| 长白班什么意思| 咨询什么意思| 中国的国花是什么| 六十岁是什么之年| 颈动脉b超是检查什么| 孕妇为什么要左侧睡不能右侧睡| 六堡茶属于什么茶| 绿茶什么意思| 冠心病需要做什么检查| 2007年属猪五行属什么| 脚底出汗什么原因| 梦见中奖了预兆什么| 什么原因导致脱发| 批发零售属于什么行业| 为什么乳头会有白色分泌物| 印第安老斑鸠什么意思| 多囊为什么要跳绳而不是跑步| 主管药师是什么职称| 非布司他片是什么药| 梦见抓了好多鱼是什么意思| 骇人听闻是什么意思| 为什么会缺铁性贫血| 女性虚火旺吃什么下火| 做手术后吃什么对伤口恢复快| 吃什么大便能特别通畅| coco什么意思| 智齿旁边的牙齿叫什么| 媛交是什么意思| 评估是什么意思| dle是什么意思| 什么时候测血压最准| 民政局是干什么的| beams是什么品牌| 葡萄上的白霜是什么| 蜥蜴人是什么| 什么鱼最迟钝| 肉桂和桂皮有什么区别| 看望病人送什么东西| 什么药可以治早迣| 好汉不吃眼前亏是什么意思| 阿托伐他汀钙片什么时候吃最好| 每天拉肚子是什么原因引起的| 心脾两虚吃什么药| 下眼睑肿胀是什么原因| 大闸蟹什么时候吃| crp是什么| 学是什么偏旁| 堂哥的女儿叫什么| u盾是什么| 双生是什么意思| 脚趾甲发白是什么原因| 彩超低回声是什么意思| 左卵巢内囊性结构什么意思| 卵巢多囊是什么意思| 睡美人最怕什么脑筋急转弯| 20度穿什么衣服| 什么叫外阴白斑| 三头六臂指什么生肖| 龙胆泻肝丸治什么病| 西米露是什么材料做的| 直击是什么意思| 碳酸氢钠是什么| 孩子咳嗽有痰吃什么药| 血脂高是什么原因| 臭男人是什么意思| 肝区回声密集是什么意思| 3月3日什么星座| 台风什么时候来| 物色是什么意思| 凌厉是什么意思| 腱鞘炎用什么药能治好| 什么魂什么魄| 乾五行属什么| 睡觉打嗝是什么原因| 头顶一阵一阵疼是什么原因| 1991年属羊是什么命| 精神恍惚是什么症状| 耳朵痛用什么药| 鱿鱼和什么炒好吃| 什么菜煮不熟| 小孩风寒感冒吃什么药| 蛋白粉适合什么人群吃| 一见倾心什么意思| 孕初期吃什么对胎儿好| 白球比低是什么原因| charcoal是什么颜色| 小孩上吐下泻吃什么药| 什么的高| 什么和什么丽| 善变是什么意思| 阴道黑是什么原因| 青黛是什么意思| 风热感冒吃什么药好| 颓废是什么意思| 什么条什么理| 治肝病最好的药是什么药| 皮疹是什么症状| 五六月份是什么星座| 贫血吃什么食物| 心悸症状是什么感觉| 小狗不能吃什么| 短阵房速是什么意思| 指鹿为马的反义词是什么| 嗜睡是什么病的前兆| 梦见织毛衣是什么意思| 生源是什么意思| 囊腺瘤是什么| 胃不消化吃什么药| 胃痛去药店买什么药| 血滴子是什么意思| 呆呆的笑是什么笑| 天麻什么时候种植| 爱豆是什么意思| gd是什么意思| www是什么意思| 手指指尖发麻是什么原因| 一个口四个又念什么| 甲状腺球蛋白抗体高说明什么| 梨花代表什么生肖| 三点水一个前读什么| 11月24是什么星座| kerry英文名什么意思| 备孕需要吃什么| 活血化瘀是什么意思| hsil是什么意思| 百度Vai al contenuto

甲状腺球蛋白抗体高是什么意思

Da Wikipedia, l'enciclopedia libera.
Algoritmo A*
ClasseAlgoritmo di ricerca
Struttura datiGrafo
Caso peggiore temporalmente
Caso peggiore spazialmente
Ottimale
Completo
百度 北京小汽车摇号政策始于2011年1月。

In informatica, A* (pronunciato /e? stɑ?r/ in inglese) è un algoritmo di ricerca su grafi che individua un percorso da un dato nodo iniziale verso un dato nodo goal (o che passi un test di goal dato). Utilizza una "stima euristica" che classifica ogni nodo attraverso una stima della strada migliore che passa attraverso tale nodo. Visita il nodo in base a tale stima euristica. L'algoritmo A* è anche un esempio di ricerca best-first.[1][2]

L'algoritmo è stato descritto nel 1968 da Peter Hart, Nils Nilsson, e Bertram Raphael.

Consideriamo un esempio motivante. Ci troviamo ad un incrocio A, e vorremmo andare ad un incrocio B che fortunatamente sappiamo trovarsi a nord rispetto a noi. In questo caso gli incroci sono i vertici di un grafo e le strade sono gli archi.

Se si effettua una ricerca breadth-first come illustrato dall'algoritmo di Dijkstra, cercheremo ogni punto con un raggio circolare fisso, gradualmente espanderemo questo cerchio per cercare gli incroci più lontani dal nostro punto iniziale. Questa può essere una strategia efficace se non si conosce dove si trovi la destinazione, come fa la polizia nella ricerca di un criminale nascosto.

Comunque, essa porta ad uno spreco di tempo se si hanno più informazioni. Una strategia migliore consiste nell'esplorazione degli incroci posizionati a nord del primo, perché essi saranno probabilmente i vertici più prossimi a B. Bisogna tuttavia notare che le strade potrebbero essere chiuse obbligandoci ad andare a sud per poter raggiungere la destinazione con un percorso a forma di C. Allora, se le strade ce lo permettono, andremo ad esplorare gli incroci sempre più vicini all'incrocio goal B. Ci sarà bisogno di qualche backtrack occasionale, ma intuitivamente questa è una strategia che ha buone chance di trovare l'obiettivo velocemente. Inoltre, può essere provato che questa strategia troverà in ogni caso la strada migliore possibile, cioè la soluzione ottimale, come farebbe la ricerca breadth-first. Questa è l'essenza della ricerca A*.

Comunque, non è garantito che l'esecuzione dell'A* sia migliore rispetto ai semplici algoritmi di ricerca. In un ambiente molto contorto, il solo modo per raggiungere la nostra destinazione potrebbe essere quello di dirigerci a sud e in seguito girarci attorno. In questi casi la prova dei nodi più prossimi alla nostra destinazione potrebbe essere uno spreco di tempo.

Veduta d'insieme

[modifica | modifica wikitesto]

Un algoritmo di ricerca che garantisce sempre di trovare il percorso più corto verso una meta è detto ammissibile. Se A* utilizza una euristica allora non bisogna mai sovrastimare la distanza (o in genere, il costo) verso la meta, si può così verificare che A* sarà ammissibile. Una euristica che fa di una ricerca A* ammissibile è detta euristica ammissibile.

Se la stima semplicemente ritorna sempre zero, che non sarà mai una sovrastima, allora A* compirà effettivamente l'algoritmo di Dijkstra e troverà ancora una soluzione ottimale, benché non rapidamente. L'euristica migliore possibile, benché non sia di solito pratico calcolarla, è l'effettiva distanza minima verso la meta. Un esempio di euristica pratica ammissibile è la distanza in linea d'aria dalla meta su una mappa.

Può essere verificato che A* non considera più nodi di qualunque altro algoritmo di ricerca ammissibile, a meno che l'algoritmo alternativo non abbia una stima euristica più accurata. In questo senso A* è l'algoritmo computazionalmente più efficiente che garantisce la ricerca del percorso più breve.

Funzionamento dell'algoritmo
Funzionamento dell'algoritmo

A* comincia a partire dal nodo selezionato. Per ogni nodo è definito un costo di entrata (di solito zero per il nodo iniziale). A* allora valuta la distanza dal nodo meta a partire da quello corrente. Questa stima ed il costo assieme formano l'euristica che sarà assegnata al percorso passante per questo nodo. Il nodo è aggiunto allora a una lista, spesso chiamata "open".

L'algoritmo allora rimuove il primo nodo dalla lista (perché avrà valore della funzione euristica più basso). Se la lista è vuota, non ci saranno percorsi dal nodo iniziale al nodo meta e l'algoritmo si arresterà. Se il nodo è il nodo meta, A* ricostruisce e pone in output il percorso ottenuto e si arresta. Questa ricostruzione del percorso a partire dai nodi più vicini significa che non è necessario memorizzare il percorso in ogni nodo.

Se il nodo non è il nodo meta, nuovi nodi saranno creati per tutti i nodi vicini ammissibili; il modo di fare questo dipende dal problema. Per ciascun nodo successivo A* calcola il "costo" di entrata nel nodo e lo salva col nodo. Questo costo è calcolato dalla somma cumulativa dei pesi immagazzinati negli antenati, più il costo dell'operazione per raggiungere questo nuovo nodo.

L'algoritmo gestisce anche una lista di "closed", un elenco di nodi che sono già stati controllati. Se un nuovo nodo generato è già nella lista con un costo uguale o più basso, non ci sarà alcuna futura indagine su tale nodo o col percorso ad esso associato. Se un nodo nella lista di closed è uguale ad uno nuovo, ma è stato immagazzinato con un costo più alto, allora sarà rimosso dalla lista di closed, e il processo continuerà a partire dal nuovo nodo.

Successivamente, una stima della distanza dal nodo nuovo alla meta è aggiunta al costo per formare il suo valore euristico. Tale nodo è aggiunto allora alla lista "open", a meno che non esista un nodo identico con valore euristico minore o uguale.

L'algoritmo sarà adottato ad ogni nodo vicino, fatto ciò il nodo originale è preso dalla lista e posto nella lista di "closed". Il prossimo nodo sarà ottenuto dalla lista di open e con esso si ripeterà il processo descritto.

Perché A* è ammissibile e computazionalmente ottimo

[modifica | modifica wikitesto]
Animazione dell'algoritmo A* che esplora il Nord America cercando un percorso tra Washington D.C. e Los Angeles.

C'è una spiegazione intuitiva del perché A* è sia ammissibile che ottimo rispetto ad altri algoritmi di ricerca ammissibili. A* ha una stima ottimistica del costo del percorso attraverso ogni nodo considerato, l'ottimismo consiste anche nel sapere che il vero costo del percorso attraverso ciascun nodo verso il nodo goal varrà almeno quanto vale la nostra stima. Tutto è basato su quanto A* "conosce".

Quando A* ha terminato la sua ricerca, per definizione avrà trovato un percorso il cui costo attuale è più basso del costo stimato per ogni percorso attraverso tutti i nodi rimasti in open. Ma essendo tale stima ottimista, A* potrà senza pericoli ignorare tali nodi. In altre parole, A* non trascurerà mai la possibilità di trovare un percorso dal costo minore, e quindi sarà ammissibile.

Supponiamo ora che un altro algoritmo di ricerca A termini la sua ricerca con un percorso il cui costo non sia minore del costo stimato per qualche nodo appartenente ad open. L'algoritmo A non può eliminare la possibilità, basandosi sulle informazioni euristiche che possiede, che un percorso attraverso tale nodo possa avere un costo inferiore a quanto valutato. Così anche se A potrà considerare meno nodi rispetto ad A*, non potrà essere ammissibile. Quindi, A* considera il numero di nodi più basso di qualunque altro algoritmo di ricerca ammissibile che utilizzi una funzione euristica non più accurata di quella adottata da A*.

Monotonicità

[modifica | modifica wikitesto]

Se si può garantire che il primo percorso trovato da A* verso un nodo qualsiasi è quello ottimo, allora la lista CLOSED non sarà necessaria. Sarà necessaria solo una lista dei nodi già visitati (OPEN), così tali nodi non saranno rivisitati (in quanto non sarà necessario farlo). Questa garanzia può essere ottenuta se la funzione euristica è, oltre che ammissibile, anche monotona (o consistente), cioè se la differenza tra i valori dell'euristica per ogni coppia di nodi connessi non supera il costo effettivo associato all'arco che li collega (h(n1) ≤ c(n1,n2) + h(n2)). Questa è una forma di disuguaglianza triangolare, e garantisce che i nodi lungo un qualunque cammino nello spazio di ricerca abbiano sempre f(n) (funzione di valutazione) non decrescente. Si dimostra che A*, con tale euristica, espande i nodi in ordine non decrescente di f(n), poiché grazie al requisito di monotonicità non verrà mai generato un nodo con f(n) minore di quella del padre. Se A* espande i nodi in ordine non decrescente, allora quando anche si trovasse un nuovo cammino verso un nodo già in CLOSED, lo si potrebbe ignorare perché avrebbe sicuramente f(n) maggiore o uguale a quella del nodo già espanso, ed avendo lo stesso valore di stima euristica (è lo stesso nodo) il cammino percorso fino a quel punto avrà sicuramente un costo maggiore o uguale. Lo si può dunque scartare, ed asserire che il primo percorso trovato da A* verso un nodo è il cammino ottimo fino a quel nodo.

Si dimostra che una euristica monotona è ammissibile, e quindi se si rispetta la restrizione di monotonicità si ottiene anche il percorso ottimo fino al goal. Intuitivamente, se il primo cammino trovato verso un nodo è quello ottimo (verso quel nodo) allora ciò vale anche per il nodo goal, e quindi se l'algoritmo termina, lo fa con la soluzione ottima. è utile ricordare che A*, con euristica ammissibile, termina sempre su grafi finiti e con costi strettamente positivi.

La restrizione di monotonicità è un requisito più stringente dell'ammissibilità, ma per molti problemi classici si vede che un'euristica ammissibile è, solitamente, anche monotona. Un esempio molto valido di euristica ammissibile e consistente è quella della distanza in linea d'aria tra due punti, usata nel calcolo del percorso stradale ottimo tra le città di una mappa. Questa euristica ci permette di "vedere" cosa significhi essere ammissibile e consistente. Essa è sicuramente ammissibile, poiché nessuna strada tra due punti può essere più breve della distanza in linea d'aria tra essi, e quindi l'euristica non sovrastima mai il costo da un nodo al goal. è consistente, come si vede facilmente disegnando un triangolo in cui i vertici siano tre città di una piccola mappa. Scegliamo la città di partenza e quella di arrivo, immaginando che la strada passi dalla terza città. Se disegniamo una strada qualsiasi tra la partenza e l'arrivo, la sua lunghezza è maggiore o uguale a quella del lato che li unisce, e ogni lato di un triangolo è a sua volta maggiore o uguale alla differenza tra gli altri due lati. è quindi rispettata la restrizione di monotonicità.

Il seguente pseudocodice descrive l'algoritmo:

 function A*(start,goal)
     closedset := the empty set                 % The set of nodes already evaluated.     
     openset := set containing the initial node % The set of tentative nodes to be evaluated.
     g_score[start] := 0                        % Distance from start along optimal path.
     came_from := the empty map                 % The map of navigated nodes.
     h_score[start] := heuristic_estimate_of_distance(start, goal)
     f_score[start] := h_score[start]           % Estimated total distance from start to goal through y.
     while openset is not empty
         x := the node in openset having the lowest f_score[] value
         if x = goal
             return reconstruct_path(came_from,goal)
         remove x from openset
         add x to closedset
         foreach y in neighbor_nodes(x)
             if y in closedset
                 continue
             tentative_g_score := g_score[x] + dist_between(x,y)
             
             if y not in openset
                 add y to openset
                
                 tentative_is_better := true
             elseif tentative_g_score < g_score[y]
                 tentative_is_better := true
             else
                 tentative_is_better := false
             if tentative_is_better = true
                 came_from[y] := x
                 g_score[y] := tentative_g_score
                 h_score[y] := heuristic_estimate_of_distance(y, goal)
                 f_score[y] := g_score[y] + h_score[y]
     return failure

 function reconstruct_path(came_from,current_node)
     if came_from[current_node] is set
         p = reconstruct_path(came_from,came_from[current_node])
         return (p + current_node)
     else
         return the empty path
  1. ^ Stuart Russell e Peter Norvig, Intelligenza Artificiale, 4a ed., Pearson, 2021, ISBN 9788891904454.
  2. ^ (EN) David L. Poole e Alan K. Mackworth, Artificial intelligence: foundataions of computational agents, Third edition, Cambridge University Press, 2023, ISBN 978-1-009-25822-7.
  • P. E. Hart, N. J. Nilsson, B. Raphael: A Formal Basis for the Heuristic Determination of Minimum Cost Paths, IEEE Transactions on Systems Science and Cybernetics SSC4 (2), pp. 100–107, 1968.
  • P. E. Hart, N. J. Nilsson, B. Raphael: Correction to "A Formal Basis for the Heuristic Determination of Minimum Cost Paths", SIGART Newsletter, 37, pp. 28–29, 1972.
  • N. J. Nilsson, Principles of Artificial Intelligence, Tioga Publishing Company, Palo Alto, California, 1980.

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
桂花什么时候开花 慢性胰腺炎吃什么药 眩晕是什么意思 发烧是什么原因引起的 左下腹疼痛是什么原因
有点尿血是什么原因 喝完酒早上吃什么好 society是什么意思 知柏地黄丸治疗什么病 胃肠性感冒吃什么药
金箔是什么 乌合之众什么意思 弦子为什么嫁给李茂 吃什么可以提高记忆力 翊字五行属什么
消化不良吃什么食物 微量元素六项是什么检查 小腿浮肿是什么原因女性 女人吃什么补肾 感叹号像什么
北京的简称是什么luyiluode.com 打脸是什么意思hcv8jop6ns8r.cn 肝脏在什么位置zsyouku.com 肠胃看病挂什么科hcv9jop5ns6r.cn 脑宁又叫什么名字onlinewuye.com
王为念和王芳什么关系hcv8jop8ns7r.cn 手肿是什么病的前兆adwl56.com 阳五行属什么hcv9jop4ns5r.cn 开车撞死猫有什么预兆hcv8jop4ns5r.cn 低烧头疼吃什么药bysq.com
飞蓬草有什么功效aiwuzhiyu.com 孕妇子痫是什么病hcv9jop7ns9r.cn 小孩做ct对身体有什么影响hkuteam.com 额头老出汗是什么原因hcv8jop3ns5r.cn 肤色不均匀是什么原因hcv9jop5ns9r.cn
突然心跳加快是什么原因hcv8jop7ns0r.cn 酒店五行属什么hcv8jop5ns9r.cn 儿童咳嗽吃什么药管用hcv8jop7ns0r.cn 梦见自己生了个儿子是什么意思cl108k.com 护理是做什么的hcv7jop4ns7r.cn
百度