[{"data":1,"prerenderedAt":6678},["ShallowReactive",2],{"topic:aidt-iot-mii:topic-02":3},{"content":4,"pz":5145,"lr":5134,"additional":5134,"courseMeta":6620},{"id":5,"title":6,"body":7,"course_slug":5133,"description":17,"env_label":5134,"env_url":5134,"extension":5135,"group":5134,"is_course_project":5136,"is_index":5136,"level":5134,"meta":5137,"navigation":5138,"path":5139,"section":5140,"seo":5141,"stem":5142,"topic_number":5120,"topic_slug":5143,"__hash__":5144},"courses\u002Fcourses\u002Faidt-iot-mii\u002Ftopic-02-content.md","Тема 2. Поиск и логический вывод",{"type":8,"value":9,"toc":5119},"minimark",[10,14,18,21,26,31,382,555,1254,1271,1284,1637,1721,1724,1764,1923,1927,1930,2031,2040,2051,2462,2478,2489,2569,2578,2581,2601,2862,2921,2930,3283,3287,3290,3414,3467,3776,4406,4748,4839,4847,4924,4928,4932,4935,4963,4989,4997,5007,5018,5021,5031,5040,5043,5046,5050,5053,5063,5073,5080,5083,5086,5090],[11,12,6],"h1",{"id":13},"тема-2-поиск-и-логический-вывод",[15,16,17],"p",{},"В предыдущей теме мы отметили, что символьный ИИ исторически предшествовал машинному обучению. Прежде чем перейти к построению моделей на данных, стоит разобраться в методах, которые составляли ядро ИИ на протяжении нескольких десятилетий, — и которые до сих пор применяются в задачах планирования, конфигурирования и автоматического рассуждения. Речь пойдёт о двух больших классах методов: поиске в пространстве состояний и логическом выводе на основе баз знаний.",[15,19,20],{},"Понимание этих методов полезно не только как историческая справка. Алгоритмы поиска лежат в основе навигационных сервисов, игровых движков, систем автоматического планирования. Экспертные системы продолжают использоваться в медицинской диагностике и промышленной автоматизации. Кроме того, ограничения символьного подхода, с которыми мы столкнёмся в конце темы, — это именно те ограничения, ответом на которые стало машинное обучение.",[22,23,25],"h2",{"id":24},"задачи-поиска-в-пространстве-состояний","Задачи поиска в пространстве состояний",[27,28,30],"h3",{"id":29},"формализация-задачи-поиска","Формализация задачи поиска",[15,32,33,34,38,39,113,114,205,206,209,210,262,263,381],{},"Многие задачи ИИ можно свести к поиску пути в некотором абстрактном пространстве. Рассмотрим классический учебный пример — головоломку «восьмёрка» (англ. ",[35,36,37],"em",{},"8-puzzle","). Имеется поле ",[40,41,44,73],"span",{"className":42},[43],"katex",[40,45,48],{"className":46},[47],"katex-mathml",[49,50,52],"math",{"xmlns":51},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[53,54,55,68],"semantics",{},[56,57,58,62,66],"mrow",{},[59,60,61],"mn",{},"3",[63,64,65],"mo",{},"×",[59,67,61],{},[69,70,72],"annotation",{"encoding":71},"application\u002Fx-tex","3 \\times 3",[40,74,78,103],{"className":75,"ariaHidden":77},[76],"katex-html","true",[40,79,82,87,91,96,100],{"className":80},[81],"base",[40,83],{"className":84,"style":86},[85],"strut","height:0.7278em;vertical-align:-0.0833em;",[40,88,61],{"className":89},[90],"mord",[40,92],{"className":93,"style":95},[94],"mspace","margin-right:0.2222em;",[40,97,65],{"className":98},[99],"mbin",[40,101],{"className":102,"style":95},[94],[40,104,106,110],{"className":105},[81],[40,107],{"className":108,"style":109},[85],"height:0.6444em;",[40,111,61],{"className":112},[90]," с восемью пронумерованными фишками и одной пустой клеткой. За один ход разрешается переместить фишку, соседнюю с пустой клеткой, на освободившееся место. Требуется привести фишки в стандартный порядок. На таком масштабе пространство достижимых конфигураций обозримо — ",[40,115,117,157],{"className":116},[43],[40,118,120],{"className":119},[47],[49,121,122],{"xmlns":51},[53,123,124,154],{},[56,125,126,129,133,138,141,144,147,151],{},[59,127,128],{},"9",[63,130,132],{"stretchy":131},"false","!",[134,135,137],"mi",{"mathvariant":136},"normal","\u002F",[59,139,140],{},"2",[63,142,143],{},"=",[59,145,146],{},"181",[148,149,150],"mtext",{}," ",[59,152,153],{},"440",[69,155,156],{"encoding":71},"9!\u002F2 = 181\\,440",[40,158,160,189],{"className":159,"ariaHidden":77},[76],[40,161,163,167,170,174,178,182,186],{"className":162},[81],[40,164],{"className":165,"style":166},[85],"height:1em;vertical-align:-0.25em;",[40,168,128],{"className":169},[90],[40,171,132],{"className":172},[173],"mclose",[40,175,177],{"className":176},[90],"\u002F2",[40,179],{"className":180,"style":181},[94],"margin-right:0.2778em;",[40,183,143],{"className":184},[185],"mrel",[40,187],{"className":188,"style":181},[94],[40,190,192,195,198,202],{"className":191},[81],[40,193],{"className":194,"style":109},[85],[40,196,146],{"className":197},[90],[40,199],{"className":200,"style":201},[94],"margin-right:0.1667em;",[40,203,153],{"className":204},[90]," состояний, и в учебных схемах далее мы пользуемся именно «восьмёркой» для наглядности. Её старший вариант, «пятнашки» (англ. ",[35,207,208],{},"15-puzzle",") на поле ",[40,211,213,232],{"className":212},[43],[40,214,216],{"className":215},[47],[49,217,218],{"xmlns":51},[53,219,220,229],{},[56,221,222,225,227],{},[59,223,224],{},"4",[63,226,65],{},[59,228,224],{},[69,230,231],{"encoding":71},"4 \\times 4",[40,233,235,253],{"className":234,"ariaHidden":77},[76],[40,236,238,241,244,247,250],{"className":237},[81],[40,239],{"className":240,"style":86},[85],[40,242,224],{"className":243},[90],[40,245],{"className":246,"style":95},[94],[40,248,65],{"className":249},[99],[40,251],{"className":252,"style":95},[94],[40,254,256,259],{"className":255},[81],[40,257],{"className":258,"style":109},[85],[40,260,224],{"className":261},[90]," с пятнадцатью фишками, даёт уже ",[40,264,266,299],{"className":265},[43],[40,267,269],{"className":268},[47],[49,270,271],{"xmlns":51},[53,272,273,296],{},[56,274,275,278,280,282,284,287],{},[59,276,277],{},"16",[63,279,132],{"stretchy":131},[134,281,137],{"mathvariant":136},[59,283,140],{},[63,285,286],{},"≈",[288,289,290,293],"msup",{},[59,291,292],{},"10",[59,294,295],{},"13",[69,297,298],{"encoding":71},"16!\u002F2 \\approx 10^{13}",[40,300,302,326],{"className":301,"ariaHidden":77},[76],[40,303,305,308,311,314,317,320,323],{"className":304},[81],[40,306],{"className":307,"style":166},[85],[40,309,277],{"className":310},[90],[40,312,132],{"className":313},[173],[40,315,177],{"className":316},[90],[40,318],{"className":319,"style":181},[94],[40,321,286],{"className":322},[185],[40,324],{"className":325,"style":181},[94],[40,327,329,333,337],{"className":328},[81],[40,330],{"className":331,"style":332},[85],"height:0.8141em;",[40,334,336],{"className":335},[90],"1",[40,338,340,344],{"className":339},[90],[40,341,343],{"className":342},[90],"0",[40,345,348],{"className":346},[347],"msupsub",[40,349,352],{"className":350},[351],"vlist-t",[40,353,356],{"className":354},[355],"vlist-r",[40,357,360],{"className":358,"style":332},[359],"vlist",[40,361,363,368],{"style":362},"top:-3.063em;margin-right:0.05em;",[40,364],{"className":365,"style":367},[366],"pstrut","height:2.7em;",[40,369,375],{"className":370},[371,372,373,374],"sizing","reset-size6","size3","mtight",[40,376,378],{"className":377},[90,374],[40,379,295],{"className":380},[90,374]," состояний — на этом масштабе полный перебор исключён.",[15,383,384,385,389,390,393,394,397,398,478,479,397,482,543,544,547,548,389,551,554],{},"Чтобы решить эту задачу алгоритмически, её нужно формализовать. Обозначим конфигурацию поля как ",[386,387,388],"strong",{},"состояние"," (англ. ",[35,391,392],{},"state","). Начальная конфигурация — ",[386,395,396],{},"начальное состояние"," ",[40,399,401,421],{"className":400},[43],[40,402,404],{"className":403},[47],[49,405,406],{"xmlns":51},[53,407,408,418],{},[56,409,410],{},[411,412,413,416],"msub",{},[134,414,415],{},"s",[59,417,343],{},[69,419,420],{"encoding":71},"s_0",[40,422,424],{"className":423,"ariaHidden":77},[76],[40,425,427,431],{"className":426},[81],[40,428],{"className":429,"style":430},[85],"height:0.5806em;vertical-align:-0.15em;",[40,432,434,438],{"className":433},[90],[40,435,415],{"className":436},[90,437],"mathnormal",[40,439,441],{"className":440},[347],[40,442,445,469],{"className":443},[351,444],"vlist-t2",[40,446,448,464],{"className":447},[355],[40,449,452],{"className":450,"style":451},[359],"height:0.3011em;",[40,453,455,458],{"style":454},"top:-2.55em;margin-left:0em;margin-right:0.05em;",[40,456],{"className":457,"style":367},[366],[40,459,461],{"className":460},[371,372,373,374],[40,462,343],{"className":463},[90,374],[40,465,468],{"className":466},[467],"vlist-s","​",[40,470,472],{"className":471},[355],[40,473,476],{"className":474,"style":475},[359],"height:0.15em;",[40,477],{},", упорядоченная конфигурация — ",[386,480,481],{},"целевое состояние",[40,483,485,504],{"className":484},[43],[40,486,488],{"className":487},[47],[49,489,490],{"xmlns":51},[53,491,492,501],{},[56,493,494],{},[288,495,496,498],{},[134,497,415],{},[63,499,500],{},"∗",[69,502,503],{"encoding":71},"s^*",[40,505,507],{"className":506,"ariaHidden":77},[76],[40,508,510,514],{"className":509},[81],[40,511],{"className":512,"style":513},[85],"height:0.6887em;",[40,515,517,520],{"className":516},[90],[40,518,415],{"className":519},[90,437],[40,521,523],{"className":522},[347],[40,524,526],{"className":525},[351],[40,527,529],{"className":528},[355],[40,530,532],{"className":531,"style":513},[359],[40,533,534,537],{"style":362},[40,535],{"className":536,"style":367},[366],[40,538,540],{"className":539},[371,372,373,374],[40,541,500],{"className":542},[99,374],". Каждый допустимый ход — это ",[386,545,546],{},"оператор перехода",", переводящий одно состояние в другое. Множество всех достижимых состояний вместе с переходами между ними образует ",[386,549,550],{},"пространство состояний",[35,552,553],{},"state space",").",[15,556,557,558,691,692,721,722,816,817,845,846,899,900,1100,1101,1170,1171,1253],{},"Формально задача поиска задаётся четвёркой:\n",[40,559,561,603],{"className":560},[43],[40,562,564],{"className":563},[47],[49,565,566],{"xmlns":51},[53,567,568,600],{},[56,569,570,573,576,579,585,587,590,592,595,598],{},[63,571,572],{"stretchy":131},"⟨",[134,574,575],{},"S",[63,577,578],{"separator":77},",",[411,580,581,583],{},[134,582,415],{},[59,584,343],{},[63,586,578],{"separator":77},[134,588,589],{},"A",[63,591,578],{"separator":77},[134,593,594],{},"G",[63,596,597],{"stretchy":131},"⟩",[63,599,578],{"separator":77},[69,601,602],{"encoding":71},"\\langle S, s_0, A, G \\rangle,",[40,604,606],{"className":605,"ariaHidden":77},[76],[40,607,609,612,616,620,624,627,667,670,673,676,679,682,685,688],{"className":608},[81],[40,610],{"className":611,"style":166},[85],[40,613,572],{"className":614},[615],"mopen",[40,617,575],{"className":618,"style":619},[90,437],"margin-right:0.0576em;",[40,621,578],{"className":622},[623],"mpunct",[40,625],{"className":626,"style":201},[94],[40,628,630,633],{"className":629},[90],[40,631,415],{"className":632},[90,437],[40,634,636],{"className":635},[347],[40,637,639,659],{"className":638},[351,444],[40,640,642,656],{"className":641},[355],[40,643,645],{"className":644,"style":451},[359],[40,646,647,650],{"style":454},[40,648],{"className":649,"style":367},[366],[40,651,653],{"className":652},[371,372,373,374],[40,654,343],{"className":655},[90,374],[40,657,468],{"className":658},[467],[40,660,662],{"className":661},[355],[40,663,665],{"className":664,"style":475},[359],[40,666],{},[40,668,578],{"className":669},[623],[40,671],{"className":672,"style":201},[94],[40,674,589],{"className":675},[90,437],[40,677,578],{"className":678},[623],[40,680],{"className":681,"style":201},[94],[40,683,594],{"className":684},[90,437],[40,686,597],{"className":687},[173],[40,689,578],{"className":690},[623],"\nгде ",[40,693,695,708],{"className":694},[43],[40,696,698],{"className":697},[47],[49,699,700],{"xmlns":51},[53,701,702,706],{},[56,703,704],{},[134,705,575],{},[69,707,575],{"encoding":71},[40,709,711],{"className":710,"ariaHidden":77},[76],[40,712,714,718],{"className":713},[81],[40,715],{"className":716,"style":717},[85],"height:0.6833em;",[40,719,575],{"className":720,"style":619},[90,437]," — множество состояний, ",[40,723,725,748],{"className":724},[43],[40,726,728],{"className":727},[47],[49,729,730],{"xmlns":51},[53,731,732,745],{},[56,733,734,740,743],{},[411,735,736,738],{},[134,737,415],{},[59,739,343],{},[63,741,742],{},"∈",[134,744,575],{},[69,746,747],{"encoding":71},"s_0 \\in S",[40,749,751,807],{"className":750,"ariaHidden":77},[76],[40,752,754,758,798,801,804],{"className":753},[81],[40,755],{"className":756,"style":757},[85],"height:0.6891em;vertical-align:-0.15em;",[40,759,761,764],{"className":760},[90],[40,762,415],{"className":763},[90,437],[40,765,767],{"className":766},[347],[40,768,770,790],{"className":769},[351,444],[40,771,773,787],{"className":772},[355],[40,774,776],{"className":775,"style":451},[359],[40,777,778,781],{"style":454},[40,779],{"className":780,"style":367},[366],[40,782,784],{"className":783},[371,372,373,374],[40,785,343],{"className":786},[90,374],[40,788,468],{"className":789},[467],[40,791,793],{"className":792},[355],[40,794,796],{"className":795,"style":475},[359],[40,797],{},[40,799],{"className":800,"style":181},[94],[40,802,742],{"className":803},[185],[40,805],{"className":806,"style":181},[94],[40,808,810,813],{"className":809},[81],[40,811],{"className":812,"style":717},[85],[40,814,575],{"className":815,"style":619},[90,437]," — начальное состояние, ",[40,818,820,833],{"className":819},[43],[40,821,823],{"className":822},[47],[49,824,825],{"xmlns":51},[53,826,827,831],{},[56,828,829],{},[134,830,589],{},[69,832,589],{"encoding":71},[40,834,836],{"className":835,"ariaHidden":77},[76],[40,837,839,842],{"className":838},[81],[40,840],{"className":841,"style":717},[85],[40,843,589],{"className":844},[90,437]," — множество операторов (действий), ",[40,847,849,868],{"className":848},[43],[40,850,852],{"className":851},[47],[49,853,854],{"xmlns":51},[53,855,856,865],{},[56,857,858,860,863],{},[134,859,594],{},[63,861,862],{},"⊆",[134,864,575],{},[69,866,867],{"encoding":71},"G \\subseteq S",[40,869,871,890],{"className":870,"ariaHidden":77},[76],[40,872,874,878,881,884,887],{"className":873},[81],[40,875],{"className":876,"style":877},[85],"height:0.8193em;vertical-align:-0.136em;",[40,879,594],{"className":880},[90,437],[40,882],{"className":883,"style":181},[94],[40,885,862],{"className":886},[185],[40,888],{"className":889,"style":181},[94],[40,891,893,896],{"className":892},[81],[40,894],{"className":895,"style":717},[85],[40,897,575],{"className":898,"style":619},[90,437]," — множество целевых состояний. Решением является последовательность операторов ",[40,901,903,944],{"className":902},[43],[40,904,906],{"className":905},[47],[49,907,908],{"xmlns":51},[53,909,910,941],{},[56,911,912,919,921,927,929,932,934],{},[411,913,914,917],{},[134,915,916],{},"a",[59,918,336],{},[63,920,578],{"separator":77},[411,922,923,925],{},[134,924,916],{},[59,926,140],{},[63,928,578],{"separator":77},[63,930,931],{},"…",[63,933,578],{"separator":77},[411,935,936,938],{},[134,937,916],{},[134,939,940],{},"n",[69,942,943],{"encoding":71},"a_1, a_2, \\ldots, a_n",[40,945,947],{"className":946,"ariaHidden":77},[76],[40,948,950,954,994,997,1000,1040,1043,1046,1050,1053,1056,1059],{"className":949},[81],[40,951],{"className":952,"style":953},[85],"height:0.625em;vertical-align:-0.1944em;",[40,955,957,960],{"className":956},[90],[40,958,916],{"className":959},[90,437],[40,961,963],{"className":962},[347],[40,964,966,986],{"className":965},[351,444],[40,967,969,983],{"className":968},[355],[40,970,972],{"className":971,"style":451},[359],[40,973,974,977],{"style":454},[40,975],{"className":976,"style":367},[366],[40,978,980],{"className":979},[371,372,373,374],[40,981,336],{"className":982},[90,374],[40,984,468],{"className":985},[467],[40,987,989],{"className":988},[355],[40,990,992],{"className":991,"style":475},[359],[40,993],{},[40,995,578],{"className":996},[623],[40,998],{"className":999,"style":201},[94],[40,1001,1003,1006],{"className":1002},[90],[40,1004,916],{"className":1005},[90,437],[40,1007,1009],{"className":1008},[347],[40,1010,1012,1032],{"className":1011},[351,444],[40,1013,1015,1029],{"className":1014},[355],[40,1016,1018],{"className":1017,"style":451},[359],[40,1019,1020,1023],{"style":454},[40,1021],{"className":1022,"style":367},[366],[40,1024,1026],{"className":1025},[371,372,373,374],[40,1027,140],{"className":1028},[90,374],[40,1030,468],{"className":1031},[467],[40,1033,1035],{"className":1034},[355],[40,1036,1038],{"className":1037,"style":475},[359],[40,1039],{},[40,1041,578],{"className":1042},[623],[40,1044],{"className":1045,"style":201},[94],[40,1047,931],{"className":1048},[1049],"minner",[40,1051],{"className":1052,"style":201},[94],[40,1054,578],{"className":1055},[623],[40,1057],{"className":1058,"style":201},[94],[40,1060,1062,1065],{"className":1061},[90],[40,1063,916],{"className":1064},[90,437],[40,1066,1068],{"className":1067},[347],[40,1069,1071,1092],{"className":1070},[351,444],[40,1072,1074,1089],{"className":1073},[355],[40,1075,1078],{"className":1076,"style":1077},[359],"height:0.1514em;",[40,1079,1080,1083],{"style":454},[40,1081],{"className":1082,"style":367},[366],[40,1084,1086],{"className":1085},[371,372,373,374],[40,1087,940],{"className":1088},[90,437,374],[40,1090,468],{"className":1091},[467],[40,1093,1095],{"className":1094},[355],[40,1096,1098],{"className":1097,"style":475},[359],[40,1099],{},", переводящая ",[40,1102,1104,1121],{"className":1103},[43],[40,1105,1107],{"className":1106},[47],[49,1108,1109],{"xmlns":51},[53,1110,1111,1119],{},[56,1112,1113],{},[411,1114,1115,1117],{},[134,1116,415],{},[59,1118,343],{},[69,1120,420],{"encoding":71},[40,1122,1124],{"className":1123,"ariaHidden":77},[76],[40,1125,1127,1130],{"className":1126},[81],[40,1128],{"className":1129,"style":430},[85],[40,1131,1133,1136],{"className":1132},[90],[40,1134,415],{"className":1135},[90,437],[40,1137,1139],{"className":1138},[347],[40,1140,1142,1162],{"className":1141},[351,444],[40,1143,1145,1159],{"className":1144},[355],[40,1146,1148],{"className":1147,"style":451},[359],[40,1149,1150,1153],{"style":454},[40,1151],{"className":1152,"style":367},[366],[40,1154,1156],{"className":1155},[371,372,373,374],[40,1157,343],{"className":1158},[90,374],[40,1160,468],{"className":1161},[467],[40,1163,1165],{"className":1164},[355],[40,1166,1168],{"className":1167,"style":475},[359],[40,1169],{}," в некоторое ",[40,1172,1174,1196],{"className":1173},[43],[40,1175,1177],{"className":1176},[47],[49,1178,1179],{"xmlns":51},[53,1180,1181,1193],{},[56,1182,1183,1189,1191],{},[288,1184,1185,1187],{},[134,1186,415],{},[63,1188,500],{},[63,1190,742],{},[134,1192,594],{},[69,1194,1195],{"encoding":71},"s^* \\in G",[40,1197,1199,1244],{"className":1198,"ariaHidden":77},[76],[40,1200,1202,1206,1235,1238,1241],{"className":1201},[81],[40,1203],{"className":1204,"style":1205},[85],"height:0.7278em;vertical-align:-0.0391em;",[40,1207,1209,1212],{"className":1208},[90],[40,1210,415],{"className":1211},[90,437],[40,1213,1215],{"className":1214},[347],[40,1216,1218],{"className":1217},[351],[40,1219,1221],{"className":1220},[355],[40,1222,1224],{"className":1223,"style":513},[359],[40,1225,1226,1229],{"style":362},[40,1227],{"className":1228,"style":367},[366],[40,1230,1232],{"className":1231},[371,372,373,374],[40,1233,500],{"className":1234},[99,374],[40,1236],{"className":1237,"style":181},[94],[40,1239,742],{"className":1240},[185],[40,1242],{"className":1243,"style":181},[94],[40,1245,1247,1250],{"className":1246},[81],[40,1248],{"className":1249,"style":717},[85],[40,1251,594],{"className":1252},[90,437],".",[15,1255,1256,1257,389,1260,1263,1264,389,1267,1270],{},"Пространство состояний естественно представляется в виде графа: вершины — состояния, рёбра — допустимые переходы. При этом алгоритм поиска обычно работает не с полным графом (он может быть слишком велик или даже бесконечен), а строит ",[386,1258,1259],{},"дерево поиска",[35,1261,1262],{},"search tree",") «на лету», раскрывая вершины по мере необходимости. Корень дерева — начальное состояние; дочерние вершины порождаются применением операторов; ",[386,1265,1266],{},"лист",[35,1268,1269],{},"leaf",") — вершина без детей, которая либо ещё не раскрыта алгоритмом, либо является тупиком, у которого нет применимых операторов (рис. 2.1).",[1272,1273,1274,1275,1274,1280],"figure",{},"\n  ",[1276,1277],"img",{"src":1278,"alt":1279},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fstate_space_and_search_tree.svg","Пространство состояний и дерево поиска на примере головоломки",[1281,1282,1283],"figcaption",{},"Пространство состояний и дерево поиска на примере «восьмёрки»",[15,1285,1286,1287,1356,1357,1426,1427,1496,1497,1566,1567,1636],{},"Слева на рисунке — фрагмент графа пространства состояний: начальное состояние ",[40,1288,1290,1307],{"className":1289},[43],[40,1291,1293],{"className":1292},[47],[49,1294,1295],{"xmlns":51},[53,1296,1297,1305],{},[56,1298,1299],{},[411,1300,1301,1303],{},[134,1302,415],{},[59,1304,343],{},[69,1306,420],{"encoding":71},[40,1308,1310],{"className":1309,"ariaHidden":77},[76],[40,1311,1313,1316],{"className":1312},[81],[40,1314],{"className":1315,"style":430},[85],[40,1317,1319,1322],{"className":1318},[90],[40,1320,415],{"className":1321},[90,437],[40,1323,1325],{"className":1324},[347],[40,1326,1328,1348],{"className":1327},[351,444],[40,1329,1331,1345],{"className":1330},[355],[40,1332,1334],{"className":1333,"style":451},[359],[40,1335,1336,1339],{"style":454},[40,1337],{"className":1338,"style":367},[366],[40,1340,1342],{"className":1341},[371,372,373,374],[40,1343,343],{"className":1344},[90,374],[40,1346,468],{"className":1347},[467],[40,1349,1351],{"className":1350},[355],[40,1352,1354],{"className":1353,"style":475},[359],[40,1355],{}," и четыре его соседа по одному ходу (B, C, D, E). Рёбра графа двунаправленные: любой ход «восьмёрки» обратим — фишку, передвинутую в пустую клетку, можно тут же передвинуть назад. Справа тот же фрагмент развёрнут в дерево поиска из корня ",[40,1358,1360,1377],{"className":1359},[43],[40,1361,1363],{"className":1362},[47],[49,1364,1365],{"xmlns":51},[53,1366,1367,1375],{},[56,1368,1369],{},[411,1370,1371,1373],{},[134,1372,415],{},[59,1374,343],{},[69,1376,420],{"encoding":71},[40,1378,1380],{"className":1379,"ariaHidden":77},[76],[40,1381,1383,1386],{"className":1382},[81],[40,1384],{"className":1385,"style":430},[85],[40,1387,1389,1392],{"className":1388},[90],[40,1390,415],{"className":1391},[90,437],[40,1393,1395],{"className":1394},[347],[40,1396,1398,1418],{"className":1397},[351,444],[40,1399,1401,1415],{"className":1400},[355],[40,1402,1404],{"className":1403,"style":451},[359],[40,1405,1406,1409],{"style":454},[40,1407],{"className":1408,"style":367},[366],[40,1410,1412],{"className":1411},[371,372,373,374],[40,1413,343],{"className":1414},[90,374],[40,1416,468],{"className":1417},[467],[40,1419,1421],{"className":1420},[355],[40,1422,1424],{"className":1423,"style":475},[359],[40,1425],{},". Среди потомков корня снова появляется ",[40,1428,1430,1447],{"className":1429},[43],[40,1431,1433],{"className":1432},[47],[49,1434,1435],{"xmlns":51},[53,1436,1437,1445],{},[56,1438,1439],{},[411,1440,1441,1443],{},[134,1442,415],{},[59,1444,343],{},[69,1446,420],{"encoding":71},[40,1448,1450],{"className":1449,"ariaHidden":77},[76],[40,1451,1453,1456],{"className":1452},[81],[40,1454],{"className":1455,"style":430},[85],[40,1457,1459,1462],{"className":1458},[90],[40,1460,415],{"className":1461},[90,437],[40,1463,1465],{"className":1464},[347],[40,1466,1468,1488],{"className":1467},[351,444],[40,1469,1471,1485],{"className":1470},[355],[40,1472,1474],{"className":1473,"style":451},[359],[40,1475,1476,1479],{"style":454},[40,1477],{"className":1478,"style":367},[366],[40,1480,1482],{"className":1481},[371,372,373,374],[40,1483,343],{"className":1484},[90,374],[40,1486,468],{"className":1487},[467],[40,1489,1491],{"className":1490},[355],[40,1492,1494],{"className":1493,"style":475},[359],[40,1495],{}," (красный лист в легенде), и это прямое следствие обратимости ходов: каждый ребёнок корня — это ",[40,1498,1500,1517],{"className":1499},[43],[40,1501,1503],{"className":1502},[47],[49,1504,1505],{"xmlns":51},[53,1506,1507,1515],{},[56,1508,1509],{},[411,1510,1511,1513],{},[134,1512,415],{},[59,1514,343],{},[69,1516,420],{"encoding":71},[40,1518,1520],{"className":1519,"ariaHidden":77},[76],[40,1521,1523,1526],{"className":1522},[81],[40,1524],{"className":1525,"style":430},[85],[40,1527,1529,1532],{"className":1528},[90],[40,1530,415],{"className":1531},[90,437],[40,1533,1535],{"className":1534},[347],[40,1536,1538,1558],{"className":1537},[351,444],[40,1539,1541,1555],{"className":1540},[355],[40,1542,1544],{"className":1543,"style":451},[359],[40,1545,1546,1549],{"style":454},[40,1547],{"className":1548,"style":367},[366],[40,1550,1552],{"className":1551},[371,372,373,374],[40,1553,343],{"className":1554},[90,374],[40,1556,468],{"className":1557},[467],[40,1559,1561],{"className":1560},[355],[40,1562,1564],{"className":1563,"style":475},[359],[40,1565],{}," плюс один ход; среди четырёх возможных ходов из этого ребёнка один обязательно возвращает обратно в ",[40,1568,1570,1587],{"className":1569},[43],[40,1571,1573],{"className":1572},[47],[49,1574,1575],{"xmlns":51},[53,1576,1577,1585],{},[56,1578,1579],{},[411,1580,1581,1583],{},[134,1582,415],{},[59,1584,343],{},[69,1586,420],{"encoding":71},[40,1588,1590],{"className":1589,"ariaHidden":77},[76],[40,1591,1593,1596],{"className":1592},[81],[40,1594],{"className":1595,"style":430},[85],[40,1597,1599,1602],{"className":1598},[90],[40,1600,415],{"className":1601},[90,437],[40,1603,1605],{"className":1604},[347],[40,1606,1608,1628],{"className":1607},[351,444],[40,1609,1611,1625],{"className":1610},[355],[40,1612,1614],{"className":1613,"style":451},[359],[40,1615,1616,1619],{"style":454},[40,1617],{"className":1618,"style":367},[366],[40,1620,1622],{"className":1621},[371,372,373,374],[40,1623,343],{"className":1624},[90,374],[40,1626,468],{"className":1627},[467],[40,1629,1631],{"className":1630},[355],[40,1632,1634],{"className":1633,"style":475},[359],[40,1635],{},". На рисунке такие дубликаты показаны под B и E; под C и D они точно такие же (там, где в дереве стоит «…»). Если алгоритм не ведёт список уже посещённых вершин, дубликаты раскрываются повторно, и дерево раздувается в разы по сравнению с самим графом.",[15,1638,1639,1640,1720],{},"Чтобы оценить, как масштабируется такой перебор, удобно сравнить «восьмёрку» с «пятнашками»: 181 440 против ",[40,1641,1643,1663],{"className":1642},[43],[40,1644,1646],{"className":1645},[47],[49,1647,1648],{"xmlns":51},[53,1649,1650,1660],{},[56,1651,1652,1654],{},[63,1653,286],{},[288,1655,1656,1658],{},[59,1657,292],{},[59,1659,295],{},[69,1661,1662],{"encoding":71},"\\approx 10^{13}",[40,1664,1666,1679],{"className":1665,"ariaHidden":77},[76],[40,1667,1669,1673,1676],{"className":1668},[81],[40,1670],{"className":1671,"style":1672},[85],"height:0.4831em;",[40,1674,286],{"className":1675},[185],[40,1677],{"className":1678,"style":181},[94],[40,1680,1682,1685,1688],{"className":1681},[81],[40,1683],{"className":1684,"style":332},[85],[40,1686,336],{"className":1687},[90],[40,1689,1691,1694],{"className":1690},[90],[40,1692,343],{"className":1693},[90],[40,1695,1697],{"className":1696},[347],[40,1698,1700],{"className":1699},[351],[40,1701,1703],{"className":1702},[355],[40,1704,1706],{"className":1705,"style":332},[359],[40,1707,1708,1711],{"style":362},[40,1709],{"className":1710,"style":367},[366],[40,1712,1714],{"className":1713},[371,372,373,374],[40,1715,1717],{"className":1716},[90,374],[40,1718,295],{"className":1719},[90,374]," — отличие в семь порядков при увеличении поля всего на одну строку и один столбец. Это типичная картина для задач поиска: пространство состояний растёт комбинаторно от размера задачи, и выбор стратегии обхода дерева оказывается решающим уже на скромных масштабах.",[15,1722,1723],{},"Алгоритмы поиска оценивают по четырём критериям:",[1725,1726,1727,1737,1746,1755],"ul",{},[1728,1729,1730,389,1733,1736],"li",{},[386,1731,1732],{},"Полнота",[35,1734,1735],{},"completeness","): гарантирует ли алгоритм нахождение решения, если оно существует?",[1728,1738,1739,389,1742,1745],{},[386,1740,1741],{},"Оптимальность",[35,1743,1744],{},"optimality","): находит ли алгоритм решение с минимальной стоимостью?",[1728,1747,1748,389,1751,1754],{},[386,1749,1750],{},"Временная сложность",[35,1752,1753],{},"time complexity","): сколько вершин алгоритм раскрывает в худшем случае?",[1728,1756,1757,389,1760,1763],{},[386,1758,1759],{},"Пространственная сложность",[35,1761,1762],{},"space complexity","): сколько вершин алгоритм одновременно хранит в памяти?",[15,1765,1766,1767,397,1770,1800,1801,397,1804,1833,1834,1888,1889,397,1892,1922],{},"Дальнейший анализ алгоритмов опирается на три параметра дерева поиска. ",[386,1768,1769],{},"Фактор ветвления",[40,1771,1773,1787],{"className":1772},[43],[40,1774,1776],{"className":1775},[47],[49,1777,1778],{"xmlns":51},[53,1779,1780,1785],{},[56,1781,1782],{},[134,1783,1784],{},"b",[69,1786,1784],{"encoding":71},[40,1788,1790],{"className":1789,"ariaHidden":77},[76],[40,1791,1793,1797],{"className":1792},[81],[40,1794],{"className":1795,"style":1796},[85],"height:0.6944em;",[40,1798,1784],{"className":1799},[90,437]," — среднее число дочерних вершин при раскрытии. ",[386,1802,1803],{},"Глубина решения",[40,1805,1807,1821],{"className":1806},[43],[40,1808,1810],{"className":1809},[47],[49,1811,1812],{"xmlns":51},[53,1813,1814,1819],{},[56,1815,1816],{},[134,1817,1818],{},"d",[69,1820,1818],{"encoding":71},[40,1822,1824],{"className":1823,"ariaHidden":77},[76],[40,1825,1827,1830],{"className":1826},[81],[40,1828],{"className":1829,"style":1796},[85],[40,1831,1818],{"className":1832},[90,437]," — длина кратчайшего пути от корня до целевой вершины, то есть число ходов в оптимальном решении. Для «восьмёрки» полным перебором установлено, что ",[40,1835,1837,1857],{"className":1836},[43],[40,1838,1840],{"className":1839},[47],[49,1841,1842],{"xmlns":51},[53,1843,1844,1854],{},[56,1845,1846,1848,1851],{},[134,1847,1818],{},[63,1849,1850],{},"≤",[59,1852,1853],{},"31",[69,1855,1856],{"encoding":71},"d \\leq 31",[40,1858,1860,1879],{"className":1859,"ariaHidden":77},[76],[40,1861,1863,1867,1870,1873,1876],{"className":1862},[81],[40,1864],{"className":1865,"style":1866},[85],"height:0.8304em;vertical-align:-0.136em;",[40,1868,1818],{"className":1869},[90,437],[40,1871],{"className":1872,"style":181},[94],[40,1874,1850],{"className":1875},[185],[40,1877],{"className":1878,"style":181},[94],[40,1880,1882,1885],{"className":1881},[81],[40,1883],{"className":1884,"style":109},[85],[40,1886,1853],{"className":1887},[90],": никакая решаемая начальная конфигурация не требует больше 31 хода до цели. ",[386,1890,1891],{},"Максимальная глубина дерева",[40,1893,1895,1909],{"className":1894},[43],[40,1896,1898],{"className":1897},[47],[49,1899,1900],{"xmlns":51},[53,1901,1902,1907],{},[56,1903,1904],{},[134,1905,1906],{},"m",[69,1908,1906],{"encoding":71},[40,1910,1912],{"className":1911,"ariaHidden":77},[76],[40,1913,1915,1919],{"className":1914},[81],[40,1916],{"className":1917,"style":1918},[85],"height:0.4306em;",[40,1920,1906],{"className":1921},[90,437]," — длина самой длинной ветви, по которой алгоритм может спуститься; в графах с циклами без отсечения повторов она может оказаться сколь угодно большой.",[27,1924,1926],{"id":1925},"неинформированный-поиск","Неинформированный поиск",[15,1928,1929],{},"Неинформированные (слепые) алгоритмы не используют никаких сведений о том, насколько текущее состояние «близко» к цели. Они различаются лишь порядком, в котором раскрывают вершины.",[15,1931,1932,389,1935,1938,1939,1969,1970,2023,2024,389,2027,2030],{},[386,1933,1934],{},"Поиск в ширину",[35,1936,1937],{},"breadth-first search, BFS",") обходит дерево слоями. Глубина вершины — это длина пути от корня до неё: корень имеет глубину 0, его дети — глубину 1, их дети — глубину 2, и так далее. BFS сначала раскрывает корень, затем все вершины на глубине 1, затем все на глубине 2, и пока слой ",[40,1940,1942,1956],{"className":1941},[43],[40,1943,1945],{"className":1944},[47],[49,1946,1947],{"xmlns":51},[53,1948,1949,1954],{},[56,1950,1951],{},[134,1952,1953],{},"k",[69,1955,1953],{"encoding":71},[40,1957,1959],{"className":1958,"ariaHidden":77},[76],[40,1960,1962,1965],{"className":1961},[81],[40,1963],{"className":1964,"style":1796},[85],[40,1966,1953],{"className":1967,"style":1968},[90,437],"margin-right:0.0315em;"," не разобран до конца, к слою ",[40,1971,1973,1992],{"className":1972},[43],[40,1974,1976],{"className":1975},[47],[49,1977,1978],{"xmlns":51},[53,1979,1980,1989],{},[56,1981,1982,1984,1987],{},[134,1983,1953],{},[63,1985,1986],{},"+",[59,1988,336],{},[69,1990,1991],{"encoding":71},"k+1",[40,1993,1995,2014],{"className":1994,"ariaHidden":77},[76],[40,1996,1998,2002,2005,2008,2011],{"className":1997},[81],[40,1999],{"className":2000,"style":2001},[85],"height:0.7778em;vertical-align:-0.0833em;",[40,2003,1953],{"className":2004,"style":1968},[90,437],[40,2006],{"className":2007,"style":95},[94],[40,2009,1986],{"className":2010},[99],[40,2012],{"className":2013,"style":95},[94],[40,2015,2017,2020],{"className":2016},[81],[40,2018],{"className":2019,"style":109},[85],[40,2021,336],{"className":2022},[90]," алгоритм не переходит (рис. 2.2). Реализуется это ",[386,2025,2026],{},"очередью FIFO",[35,2028,2029],{},"first-in-first-out","): новые порождённые вершины кладутся в хвост очереди, а на раскрытие берётся та, что стоит в голове, — то есть попавшая туда раньше всех. Поскольку дети любой вершины оказываются в очереди позже самой вершины, послойный порядок выдерживается автоматически.",[1272,2032,1274,2033,1274,2037],{},[1276,2034],{"src":2035,"alt":2036},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fbfs_traversal.svg","Поиск в ширину: порядок раскрытия вершин по слоям",[1281,2038,2039],{},"Поиск в ширину: вершины раскрываются по слоям, нумерация — в порядке посещения",[15,2041,2042,2043,2046,2047,2050],{},"BFS ",[386,2044,2045],{},"полон",": если решение существует, оно лежит на какой-то конечной глубине, и алгоритм гарантированно до неё доходит — он не оставляет ни одного слоя необработанным. BFS также ",[386,2048,2049],{},"оптимален при одинаковой стоимости переходов",": если каждый ход стоит одинаково (например, любой ход в «восьмёрке» — это один шаг), то первое же найденное решение имеет минимальное число шагов; алгоритм просто не успевает спуститься глубже, пока на текущем слое есть нерассмотренные вершины. Если стоимости разные (скажем, длины участков дороги в задаче навигации), это уже не гарантировано: путь с наименьшим числом ходов не обязательно самый дешёвый, и BFS перестаёт быть оптимальным.",[15,2052,2053,2054,2082,2083,2111,2112,2192,2193,2245,2246,2296,2297,2348,2349,2401,2402,2461],{},"Платит BFS за свои гарантии памятью: на глубине ",[40,2055,2057,2070],{"className":2056},[43],[40,2058,2060],{"className":2059},[47],[49,2061,2062],{"xmlns":51},[53,2063,2064,2068],{},[56,2065,2066],{},[134,2067,1818],{},[69,2069,1818],{"encoding":71},[40,2071,2073],{"className":2072,"ariaHidden":77},[76],[40,2074,2076,2079],{"className":2075},[81],[40,2077],{"className":2078,"style":1796},[85],[40,2080,1818],{"className":2081},[90,437]," при факторе ветвления ",[40,2084,2086,2099],{"className":2085},[43],[40,2087,2089],{"className":2088},[47],[49,2090,2091],{"xmlns":51},[53,2092,2093,2097],{},[56,2094,2095],{},[134,2096,1784],{},[69,2098,1784],{"encoding":71},[40,2100,2102],{"className":2101,"ariaHidden":77},[76],[40,2103,2105,2108],{"className":2104},[81],[40,2106],{"className":2107,"style":1796},[85],[40,2109,1784],{"className":2110},[90,437]," в очереди может оказаться до ",[40,2113,2115,2142],{"className":2114},[43],[40,2116,2118],{"className":2117},[47],[49,2119,2120],{"xmlns":51},[53,2121,2122,2139],{},[56,2123,2124,2127,2130,2136],{},[134,2125,2126],{},"O",[63,2128,2129],{"stretchy":131},"(",[288,2131,2132,2134],{},[134,2133,1784],{},[134,2135,1818],{},[63,2137,2138],{"stretchy":131},")",[69,2140,2141],{"encoding":71},"O(b^d)",[40,2143,2145],{"className":2144,"ariaHidden":77},[76],[40,2146,2148,2152,2156,2159,2189],{"className":2147},[81],[40,2149],{"className":2150,"style":2151},[85],"height:1.0991em;vertical-align:-0.25em;",[40,2153,2126],{"className":2154,"style":2155},[90,437],"margin-right:0.0278em;",[40,2157,2129],{"className":2158},[615],[40,2160,2162,2165],{"className":2161},[90],[40,2163,1784],{"className":2164},[90,437],[40,2166,2168],{"className":2167},[347],[40,2169,2171],{"className":2170},[351],[40,2172,2174],{"className":2173},[355],[40,2175,2178],{"className":2176,"style":2177},[359],"height:0.8491em;",[40,2179,2180,2183],{"style":362},[40,2181],{"className":2182,"style":367},[366],[40,2184,2186],{"className":2185},[371,372,373,374],[40,2187,1818],{"className":2188},[90,437,374],[40,2190,2138],{"className":2191},[173]," вершин. Для «восьмёрки» с ",[40,2194,2196,2215],{"className":2195},[43],[40,2197,2199],{"className":2198},[47],[49,2200,2201],{"xmlns":51},[53,2202,2203,2212],{},[56,2204,2205,2207,2209],{},[134,2206,1784],{},[63,2208,286],{},[59,2210,2211],{},"2.67",[69,2213,2214],{"encoding":71},"b \\approx 2.67",[40,2216,2218,2236],{"className":2217,"ariaHidden":77},[76],[40,2219,2221,2224,2227,2230,2233],{"className":2220},[81],[40,2222],{"className":2223,"style":1796},[85],[40,2225,1784],{"className":2226},[90,437],[40,2228],{"className":2229,"style":181},[94],[40,2231,286],{"className":2232},[185],[40,2234],{"className":2235,"style":181},[94],[40,2237,2239,2242],{"className":2238},[81],[40,2240],{"className":2241,"style":109},[85],[40,2243,2211],{"className":2244},[90]," и оптимальной длиной решения ",[40,2247,2249,2266],{"className":2248},[43],[40,2250,2252],{"className":2251},[47],[49,2253,2254],{"xmlns":51},[53,2255,2256,2264],{},[56,2257,2258,2260,2262],{},[134,2259,1818],{},[63,2261,1850],{},[59,2263,1853],{},[69,2265,1856],{"encoding":71},[40,2267,2269,2287],{"className":2268,"ariaHidden":77},[76],[40,2270,2272,2275,2278,2281,2284],{"className":2271},[81],[40,2273],{"className":2274,"style":1866},[85],[40,2276,1818],{"className":2277},[90,437],[40,2279],{"className":2280,"style":181},[94],[40,2282,1850],{"className":2283},[185],[40,2285],{"className":2286,"style":181},[94],[40,2288,2290,2293],{"className":2289},[81],[40,2291],{"className":2292,"style":109},[85],[40,2294,1853],{"className":2295},[90]," хранение нескольких десятков миллионов вершин ещё допустимо в памяти настольной машины. Для «пятнашек» с ",[40,2298,2300,2318],{"className":2299},[43],[40,2301,2303],{"className":2302},[47],[49,2304,2305],{"xmlns":51},[53,2306,2307,2315],{},[56,2308,2309,2311,2313],{},[134,2310,1784],{},[63,2312,286],{},[59,2314,61],{},[69,2316,2317],{"encoding":71},"b \\approx 3",[40,2319,2321,2339],{"className":2320,"ariaHidden":77},[76],[40,2322,2324,2327,2330,2333,2336],{"className":2323},[81],[40,2325],{"className":2326,"style":1796},[85],[40,2328,1784],{"className":2329},[90,437],[40,2331],{"className":2332,"style":181},[94],[40,2334,286],{"className":2335},[185],[40,2337],{"className":2338,"style":181},[94],[40,2340,2342,2345],{"className":2341},[81],[40,2343],{"className":2344,"style":109},[85],[40,2346,61],{"className":2347},[90]," и ",[40,2350,2352,2371],{"className":2351},[43],[40,2353,2355],{"className":2354},[47],[49,2356,2357],{"xmlns":51},[53,2358,2359,2368],{},[56,2360,2361,2363,2365],{},[134,2362,1818],{},[63,2364,286],{},[59,2366,2367],{},"80",[69,2369,2370],{"encoding":71},"d \\approx 80",[40,2372,2374,2392],{"className":2373,"ariaHidden":77},[76],[40,2375,2377,2380,2383,2386,2389],{"className":2376},[81],[40,2378],{"className":2379,"style":1796},[85],[40,2381,1818],{"className":2382},[90,437],[40,2384],{"className":2385,"style":181},[94],[40,2387,286],{"className":2388},[185],[40,2390],{"className":2391,"style":181},[94],[40,2393,2395,2398],{"className":2394},[81],[40,2396],{"className":2397,"style":109},[85],[40,2399,2367],{"className":2400},[90]," оценка ",[40,2403,2405,2423],{"className":2404},[43],[40,2406,2408],{"className":2407},[47],[49,2409,2410],{"xmlns":51},[53,2411,2412,2420],{},[56,2413,2414],{},[288,2415,2416,2418],{},[134,2417,1784],{},[134,2419,1818],{},[69,2421,2422],{"encoding":71},"b^d",[40,2424,2426],{"className":2425,"ariaHidden":77},[76],[40,2427,2429,2432],{"className":2428},[81],[40,2430],{"className":2431,"style":2177},[85],[40,2433,2435,2438],{"className":2434},[90],[40,2436,1784],{"className":2437},[90,437],[40,2439,2441],{"className":2440},[347],[40,2442,2444],{"className":2443},[351],[40,2445,2447],{"className":2446},[355],[40,2448,2450],{"className":2449,"style":2177},[359],[40,2451,2452,2455],{"style":362},[40,2453],{"className":2454,"style":367},[366],[40,2456,2458],{"className":2457},[371,372,373,374],[40,2459,1818],{"className":2460},[90,437,374]," выходит за пределы реалистичных ресурсов — BFS становится практически неприменимым.",[15,2463,2464,389,2467,2470,2471,389,2474,2477],{},[386,2465,2466],{},"Поиск в глубину",[35,2468,2469],{},"depth-first search, DFS",") идёт в противоположном направлении. Алгоритм раскрывает вершину и сразу переходит к одному из её детей, углубляясь по выбранной ветви, пока не достигнет листа или тупика; только после этого возвращается к ближайшему непросмотренному ветвлению и продолжает оттуда (рис. 2.3). Реализуется это ",[386,2472,2473],{},"стеком LIFO",[35,2475,2476],{},"last-in-first-out","): новые порождённые вершины кладутся на верх стека, а на раскрытие берётся та, что положена туда последней — самая «свежая». Естественной альтернативой стеку служит обычная рекурсия: рекурсивный вызов сам кладёт состояние на стек выполнения, а возврат из вызова — снимает.",[15,2479,2480,2481,2484,2485,2488],{},"В отличие от BFS, DFS ",[386,2482,2483],{},"не полон в общем случае",": если в пространстве состояний есть бесконечная ветвь (например, из-за неотсекаемых циклов), алгоритм может уйти в неё навсегда и так и не добраться до решения, даже если оно существует на конечной глубине. ",[386,2486,2487],{},"Оптимальность тоже не гарантируется"," — даже если решение найдено, оно может оказаться сколь угодно длиннее оптимального: DFS возвращает первое решение, которое попалось, а оно лежит на той ветви, куда алгоритм случайно свернул раньше других.",[15,2490,2491,2492,2539,2540,2568],{},"Зато по памяти DFS радикально экономнее BFS: на стеке в каждый момент хранится только текущая ветвь и не раскрытые ещё соседи каждой её вершины — в худшем случае ",[40,2493,2495,2517],{"className":2494},[43],[40,2496,2498],{"className":2497},[47],[49,2499,2500],{"xmlns":51},[53,2501,2502,2514],{},[56,2503,2504,2506,2508,2510,2512],{},[134,2505,2126],{},[63,2507,2129],{"stretchy":131},[134,2509,1784],{},[134,2511,1906],{},[63,2513,2138],{"stretchy":131},[69,2515,2516],{"encoding":71},"O(bm)",[40,2518,2520],{"className":2519,"ariaHidden":77},[76],[40,2521,2523,2526,2529,2532,2536],{"className":2522},[81],[40,2524],{"className":2525,"style":166},[85],[40,2527,2126],{"className":2528,"style":2155},[90,437],[40,2530,2129],{"className":2531},[615],[40,2533,2535],{"className":2534},[90,437],"bm",[40,2537,2138],{"className":2538},[173],", где ",[40,2541,2543,2556],{"className":2542},[43],[40,2544,2546],{"className":2545},[47],[49,2547,2548],{"xmlns":51},[53,2549,2550,2554],{},[56,2551,2552],{},[134,2553,1906],{},[69,2555,1906],{"encoding":71},[40,2557,2559],{"className":2558,"ariaHidden":77},[76],[40,2560,2562,2565],{"className":2561},[81],[40,2563],{"className":2564,"style":1918},[85],[40,2566,1906],{"className":2567},[90,437]," — максимальная глубина дерева. Для «пятнашек» это уже терпимо. Поэтому в задачах с гигантским пространством состояний DFS остаётся применимым там, где BFS не помещается в память, — ценой потерь в полноте и оптимальности.",[1272,2570,1274,2571,1274,2575],{},[1276,2572],{"src":2573,"alt":2574},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fdfs_traversal.svg","Поиск в глубину: спуск по первой ветви до листа",[1281,2576,2577],{},"Поиск в глубину: алгоритм спускается по выбранной ветви до листа (подсвечена) и только после этого возвращается к следующему ветвлению",[15,2579,2580],{},"На практике выбор между BFS и DFS — это выбор между гарантией результата и расходом памяти. Существует ли компромисс?",[15,2582,2583,389,2586,2589,2590,2600],{},[386,2584,2585],{},"Поиск с итеративным углублением",[35,2587,2588],{},"iterative deepening depth-first search, IDDFS",") пытается совместить достоинства BFS и DFS ",[2591,2592,2595],"sup",{"className":2593},[2594],"cite",[916,2596,2598],{"href":2597},"#ref-1",[40,2599,336],{},". Алгоритм выполняет серию запусков DFS с возрастающим ограничением глубины: сначала просматривает только корень (предел 0), затем корень и его детей (предел 1), потом — до глубины 2, и так далее, пока на каком-то пределе не найдёт целевую вершину (рис. 2.4). Каждая отдельная итерация — это обычный DFS, но с жёстким запретом спускаться ниже текущего предела глубины.",[15,2602,2603,2604,2657,2658,2686,2687,2809,2810,2861],{},"На первый взгляд кажется, что повторное раскрытие верхних уровней — расточительство: при поиске на глубине 3 алгоритм заново обходит все вершины глубин 1 и 2, которые уже раскрывались. Однако при факторе ветвления ",[40,2605,2607,2626],{"className":2606},[43],[40,2608,2610],{"className":2609},[47],[49,2611,2612],{"xmlns":51},[53,2613,2614,2623],{},[56,2615,2616,2618,2621],{},[134,2617,1784],{},[63,2619,2620],{},">",[59,2622,336],{},[69,2624,2625],{"encoding":71},"b > 1",[40,2627,2629,2648],{"className":2628,"ariaHidden":77},[76],[40,2630,2632,2636,2639,2642,2645],{"className":2631},[81],[40,2633],{"className":2634,"style":2635},[85],"height:0.7335em;vertical-align:-0.0391em;",[40,2637,1784],{"className":2638},[90,437],[40,2640],{"className":2641,"style":181},[94],[40,2643,2620],{"className":2644},[185],[40,2646],{"className":2647,"style":181},[94],[40,2649,2651,2654],{"className":2650},[81],[40,2652],{"className":2653,"style":109},[85],[40,2655,336],{"className":2656},[90]," основная масса вершин сосредоточена на последнем уровне (там их в ",[40,2659,2661,2674],{"className":2660},[43],[40,2662,2664],{"className":2663},[47],[49,2665,2666],{"xmlns":51},[53,2667,2668,2672],{},[56,2669,2670],{},[134,2671,1784],{},[69,2673,1784],{"encoding":71},[40,2675,2677],{"className":2676,"ariaHidden":77},[76],[40,2678,2680,2683],{"className":2679},[81],[40,2681],{"className":2682,"style":1796},[85],[40,2684,1784],{"className":2685},[90,437]," раз больше, чем на предпоследнем), и накладные расходы на повторы составляют не более ",[40,2688,2690,2716],{"className":2689},[43],[40,2691,2693],{"className":2692},[47],[49,2694,2695],{"xmlns":51},[53,2696,2697,2713],{},[56,2698,2699],{},[2700,2701,2702,2704],"mfrac",{},[134,2703,1784],{},[56,2705,2706,2708,2711],{},[134,2707,1784],{},[63,2709,2710],{},"−",[59,2712,336],{},[69,2714,2715],{"encoding":71},"\\frac{b}{b-1}",[40,2717,2719],{"className":2718,"ariaHidden":77},[76],[40,2720,2722,2726],{"className":2721},[81],[40,2723],{"className":2724,"style":2725},[85],"height:1.2834em;vertical-align:-0.4033em;",[40,2727,2729,2733,2806],{"className":2728},[90],[40,2730],{"className":2731},[615,2732],"nulldelimiter",[40,2734,2736],{"className":2735},[2700],[40,2737,2739,2797],{"className":2738},[351,444],[40,2740,2742,2794],{"className":2741},[355],[40,2743,2746,2768,2779],{"className":2744,"style":2745},[359],"height:0.8801em;",[40,2747,2749,2753],{"style":2748},"top:-2.655em;",[40,2750],{"className":2751,"style":2752},[366],"height:3em;",[40,2754,2756],{"className":2755},[371,372,373,374],[40,2757,2759,2762,2765],{"className":2758},[90,374],[40,2760,1784],{"className":2761},[90,437,374],[40,2763,2710],{"className":2764},[99,374],[40,2766,336],{"className":2767},[90,374],[40,2769,2771,2774],{"style":2770},"top:-3.23em;",[40,2772],{"className":2773,"style":2752},[366],[40,2775],{"className":2776,"style":2778},[2777],"frac-line","border-bottom-width:0.04em;",[40,2780,2782,2785],{"style":2781},"top:-3.394em;",[40,2783],{"className":2784,"style":2752},[366],[40,2786,2788],{"className":2787},[371,372,373,374],[40,2789,2791],{"className":2790},[90,374],[40,2792,1784],{"className":2793},[90,437,374],[40,2795,468],{"className":2796},[467],[40,2798,2800],{"className":2799},[355],[40,2801,2804],{"className":2802,"style":2803},[359],"height:0.4033em;",[40,2805],{},[40,2807],{"className":2808},[173,2732]," от стоимости однократного обхода. Для ",[40,2811,2813,2831],{"className":2812},[43],[40,2814,2816],{"className":2815},[47],[49,2817,2818],{"xmlns":51},[53,2819,2820,2828],{},[56,2821,2822,2824,2826],{},[134,2823,1784],{},[63,2825,143],{},[59,2827,61],{},[69,2829,2830],{"encoding":71},"b = 3",[40,2832,2834,2852],{"className":2833,"ariaHidden":77},[76],[40,2835,2837,2840,2843,2846,2849],{"className":2836},[81],[40,2838],{"className":2839,"style":1796},[85],[40,2841,1784],{"className":2842},[90,437],[40,2844],{"className":2845,"style":181},[94],[40,2847,143],{"className":2848},[185],[40,2850],{"className":2851,"style":181},[94],[40,2853,2855,2858],{"className":2854},[81],[40,2856],{"className":2857,"style":109},[85],[40,2859,61],{"className":2860},[90]," это всего лишь полуторакратное увеличение.",[15,2863,2864,2865,2867,2868,2870,2871,2920],{},"IDDFS наследует преимущества обоих родительских алгоритмов. Он ",[386,2866,2045],{},": ограничение глубины растёт неограниченно, и любое решение на конечной глубине рано или поздно будет найдено. Он ",[386,2869,2049],{},": глубина увеличивается шагами по единице, и первая нашедшаяся цель неизбежно лежит на минимальной возможной глубине. И при этом по памяти он экономен как DFS — ",[40,2872,2874,2896],{"className":2873},[43],[40,2875,2877],{"className":2876},[47],[49,2878,2879],{"xmlns":51},[53,2880,2881,2893],{},[56,2882,2883,2885,2887,2889,2891],{},[134,2884,2126],{},[63,2886,2129],{"stretchy":131},[134,2888,1784],{},[134,2890,1818],{},[63,2892,2138],{"stretchy":131},[69,2894,2895],{"encoding":71},"O(bd)",[40,2897,2899],{"className":2898,"ariaHidden":77},[76],[40,2900,2902,2905,2908,2911,2914,2917],{"className":2901},[81],[40,2903],{"className":2904,"style":166},[85],[40,2906,2126],{"className":2907,"style":2155},[90,437],[40,2909,2129],{"className":2910},[615],[40,2912,1784],{"className":2913},[90,437],[40,2915,1818],{"className":2916},[90,437],[40,2918,2138],{"className":2919},[173],", — потому что каждая итерация это обычный DFS. Сочетание этих свойств делает IDDFS предпочтительным неинформированным алгоритмом для задач с большим пространством состояний.",[1272,2922,1274,2923,1274,2927],{},[1276,2924],{"src":2925,"alt":2926},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fiddfs_traversal.svg","Поиск с итеративным углублением: серия DFS с растущим пределом глубины",[1281,2928,2929],{},"Поиск с итеративным углублением: серия запусков DFS с пределом глубины 0, 1, 2, 3 …",[15,2931,2932,2933,2985,2986,3036,3037,3178,3179,3253,3254,3282],{},"Сравнение трёх алгоритмов на одной задаче поучительно. Положим задачу нахождения решения в дереве глубиной ",[40,2934,2936,2955],{"className":2935},[43],[40,2937,2939],{"className":2938},[47],[49,2940,2941],{"xmlns":51},[53,2942,2943,2952],{},[56,2944,2945,2947,2949],{},[134,2946,1818],{},[63,2948,143],{},[59,2950,2951],{},"12",[69,2953,2954],{"encoding":71},"d = 12",[40,2956,2958,2976],{"className":2957,"ariaHidden":77},[76],[40,2959,2961,2964,2967,2970,2973],{"className":2960},[81],[40,2962],{"className":2963,"style":1796},[85],[40,2965,1818],{"className":2966},[90,437],[40,2968],{"className":2969,"style":181},[94],[40,2971,143],{"className":2972},[185],[40,2974],{"className":2975,"style":181},[94],[40,2977,2979,2982],{"className":2978},[81],[40,2980],{"className":2981,"style":109},[85],[40,2983,2951],{"className":2984},[90]," с ",[40,2987,2989,3006],{"className":2988},[43],[40,2990,2992],{"className":2991},[47],[49,2993,2994],{"xmlns":51},[53,2995,2996,3004],{},[56,2997,2998,3000,3002],{},[134,2999,1784],{},[63,3001,143],{},[59,3003,61],{},[69,3005,2830],{"encoding":71},[40,3007,3009,3027],{"className":3008,"ariaHidden":77},[76],[40,3010,3012,3015,3018,3021,3024],{"className":3011},[81],[40,3013],{"className":3014,"style":1796},[85],[40,3016,1784],{"className":3017},[90,437],[40,3019],{"className":3020,"style":181},[94],[40,3022,143],{"className":3023},[185],[40,3025],{"className":3026,"style":181},[94],[40,3028,3030,3033],{"className":3029},[81],[40,3031],{"className":3032,"style":109},[85],[40,3034,61],{"className":3035},[90],". BFS гарантированно найдёт оптимальное решение, удерживая в памяти около ",[40,3038,3040,3072],{"className":3039},[43],[40,3041,3043],{"className":3042},[47],[49,3044,3045],{"xmlns":51},[53,3046,3047,3069],{},[56,3048,3049,3055,3057,3060,3063],{},[288,3050,3051,3053],{},[59,3052,61],{},[59,3054,2951],{},[63,3056,286],{},[59,3058,3059],{},"5",[63,3061,3062],{},"⋅",[288,3064,3065,3067],{},[59,3066,292],{},[59,3068,3059],{},[69,3070,3071],{"encoding":71},"3^{12} \\approx 5 \\cdot 10^5",[40,3073,3075,3122,3140],{"className":3074,"ariaHidden":77},[76],[40,3076,3078,3081,3113,3116,3119],{"className":3077},[81],[40,3079],{"className":3080,"style":332},[85],[40,3082,3084,3087],{"className":3083},[90],[40,3085,61],{"className":3086},[90],[40,3088,3090],{"className":3089},[347],[40,3091,3093],{"className":3092},[351],[40,3094,3096],{"className":3095},[355],[40,3097,3099],{"className":3098,"style":332},[359],[40,3100,3101,3104],{"style":362},[40,3102],{"className":3103,"style":367},[366],[40,3105,3107],{"className":3106},[371,372,373,374],[40,3108,3110],{"className":3109},[90,374],[40,3111,2951],{"className":3112},[90,374],[40,3114],{"className":3115,"style":181},[94],[40,3117,286],{"className":3118},[185],[40,3120],{"className":3121,"style":181},[94],[40,3123,3125,3128,3131,3134,3137],{"className":3124},[81],[40,3126],{"className":3127,"style":109},[85],[40,3129,3059],{"className":3130},[90],[40,3132],{"className":3133,"style":95},[94],[40,3135,3062],{"className":3136},[99],[40,3138],{"className":3139,"style":95},[94],[40,3141,3143,3146,3149],{"className":3142},[81],[40,3144],{"className":3145,"style":332},[85],[40,3147,336],{"className":3148},[90],[40,3150,3152,3155],{"className":3151},[90],[40,3153,343],{"className":3154},[90],[40,3156,3158],{"className":3157},[347],[40,3159,3161],{"className":3160},[351],[40,3162,3164],{"className":3163},[355],[40,3165,3167],{"className":3166,"style":332},[359],[40,3168,3169,3172],{"style":362},[40,3170],{"className":3171,"style":367},[366],[40,3173,3175],{"className":3174},[371,372,373,374],[40,3176,3059],{"className":3177},[90,374]," вершин. DFS уложится в ",[40,3180,3182,3205],{"className":3181},[43],[40,3183,3185],{"className":3184},[47],[49,3186,3187],{"xmlns":51},[53,3188,3189,3202],{},[56,3190,3191,3193,3195,3197,3199],{},[59,3192,61],{},[63,3194,3062],{},[59,3196,2951],{},[63,3198,143],{},[59,3200,3201],{},"36",[69,3203,3204],{"encoding":71},"3 \\cdot 12 = 36",[40,3206,3208,3226,3244],{"className":3207,"ariaHidden":77},[76],[40,3209,3211,3214,3217,3220,3223],{"className":3210},[81],[40,3212],{"className":3213,"style":109},[85],[40,3215,61],{"className":3216},[90],[40,3218],{"className":3219,"style":95},[94],[40,3221,3062],{"className":3222},[99],[40,3224],{"className":3225,"style":95},[94],[40,3227,3229,3232,3235,3238,3241],{"className":3228},[81],[40,3230],{"className":3231,"style":109},[85],[40,3233,2951],{"className":3234},[90],[40,3236],{"className":3237,"style":181},[94],[40,3239,143],{"className":3240},[185],[40,3242],{"className":3243,"style":181},[94],[40,3245,3247,3250],{"className":3246},[81],[40,3248],{"className":3249,"style":109},[85],[40,3251,3201],{"className":3252},[90]," вершин памяти, но может уйти в неоптимальную ветвь и вернуть решение длиной, скажем, 17 вместо 12. IDDFS повторит часть верхних уровней, раскрыв в полтора раза больше вершин, чем BFS, — но при тех же ",[40,3255,3257,3270],{"className":3256},[43],[40,3258,3260],{"className":3259},[47],[49,3261,3262],{"xmlns":51},[53,3263,3264,3268],{},[56,3265,3266],{},[59,3267,3201],{},[69,3269,3201],{"encoding":71},[40,3271,3273],{"className":3272,"ariaHidden":77},[76],[40,3274,3276,3279],{"className":3275},[81],[40,3277],{"className":3278,"style":109},[85],[40,3280,3201],{"className":3281},[90]," единицах памяти и с гарантией оптимальности. Когда задача исчерпывает оперативную память при BFS, IDDFS обычно становится единственно реалистичным неинформированным выбором.",[27,3284,3286],{"id":3285},"информированный-эвристический-поиск","Информированный (эвристический) поиск",[15,3288,3289],{},"Неинформированные алгоритмы «слепы» — они не знают, в какой стороне находится цель, и потому обходят пространство состояний механически. Если же у нас есть возможность оценить, насколько текущее состояние далеко от целевого, поиск можно направить значительно эффективнее.",[15,3291,3292,397,3295,3340,3341,3369,3370,3413],{},[386,3293,3294],{},"Эвристическая функция",[40,3296,3298,3319],{"className":3297},[43],[40,3299,3301],{"className":3300},[47],[49,3302,3303],{"xmlns":51},[53,3304,3305,3316],{},[56,3306,3307,3310,3312,3314],{},[134,3308,3309],{},"h",[63,3311,2129],{"stretchy":131},[134,3313,940],{},[63,3315,2138],{"stretchy":131},[69,3317,3318],{"encoding":71},"h(n)",[40,3320,3322],{"className":3321,"ariaHidden":77},[76],[40,3323,3325,3328,3331,3334,3337],{"className":3324},[81],[40,3326],{"className":3327,"style":166},[85],[40,3329,3309],{"className":3330},[90,437],[40,3332,2129],{"className":3333},[615],[40,3335,940],{"className":3336},[90,437],[40,3338,2138],{"className":3339},[173]," оценивает стоимость пути от вершины ",[40,3342,3344,3357],{"className":3343},[43],[40,3345,3347],{"className":3346},[47],[49,3348,3349],{"xmlns":51},[53,3350,3351,3355],{},[56,3352,3353],{},[134,3354,940],{},[69,3356,940],{"encoding":71},[40,3358,3360],{"className":3359,"ariaHidden":77},[76],[40,3361,3363,3366],{"className":3362},[81],[40,3364],{"className":3365,"style":1918},[85],[40,3367,940],{"className":3368},[90,437]," до ближайшего целевого состояния. Разумеется, точное значение этой стоимости нам неизвестно (иначе задача была бы уже решена), поэтому ",[40,3371,3373,3392],{"className":3372},[43],[40,3374,3376],{"className":3375},[47],[49,3377,3378],{"xmlns":51},[53,3379,3380,3390],{},[56,3381,3382,3384,3386,3388],{},[134,3383,3309],{},[63,3385,2129],{"stretchy":131},[134,3387,940],{},[63,3389,2138],{"stretchy":131},[69,3391,3318],{"encoding":71},[40,3393,3395],{"className":3394,"ariaHidden":77},[76],[40,3396,3398,3401,3404,3407,3410],{"className":3397},[81],[40,3399],{"className":3400,"style":166},[85],[40,3402,3309],{"className":3403},[90,437],[40,3405,2129],{"className":3406},[615],[40,3408,940],{"className":3409},[90,437],[40,3411,2138],{"className":3412},[173]," — приближённая оценка. Для «восьмёрки» и «пятнашек» типичная эвристика — манхэттенское расстояние: сумма расстояний каждой фишки от её целевой позиции по горизонтали и вертикали. Эта оценка никогда не превышает реального числа ходов, и такое свойство оказывается ключевым.",[15,3415,3416,389,3419,3422,3423,3466],{},[386,3417,3418],{},"Жадный поиск",[35,3420,3421],{},"greedy best-first search",") всегда раскрывает вершину с наименьшим ",[40,3424,3426,3445],{"className":3425},[43],[40,3427,3429],{"className":3428},[47],[49,3430,3431],{"xmlns":51},[53,3432,3433,3443],{},[56,3434,3435,3437,3439,3441],{},[134,3436,3309],{},[63,3438,2129],{"stretchy":131},[134,3440,940],{},[63,3442,2138],{"stretchy":131},[69,3444,3318],{"encoding":71},[40,3446,3448],{"className":3447,"ariaHidden":77},[76],[40,3449,3451,3454,3457,3460,3463],{"className":3450},[81],[40,3452],{"className":3453,"style":166},[85],[40,3455,3309],{"className":3456},[90,437],[40,3458,2129],{"className":3459},[615],[40,3461,940],{"className":3462},[90,437],[40,3464,2138],{"className":3465},[173],". Он устремляется к цели напрямик и может найти решение быстро, но без гарантии оптимальности: алгоритм легко попадает в локальные «ловушки», выбирая путь, который выглядит многообещающим, но ведёт в тупик.",[15,3468,3469,3472,3473,3476,3477,3485,3486,691,3613,3657,3658,3686,3687,3730,3731,3775],{},[386,3470,3471],{},"Алгоритм A","* (англ. ",[35,3474,3475],{},"A-star",") использует более взвешенную стратегию ",[2591,3478,3480],{"className":3479},[2594],[916,3481,3483],{"href":3482},"#ref-2",[40,3484,140],{},". Для каждой вершины вычисляется оценочная функция\n",[40,3487,3489,3533],{"className":3488},[43],[40,3490,3492],{"className":3491},[47],[49,3493,3494],{"xmlns":51},[53,3495,3496,3530],{},[56,3497,3498,3501,3503,3505,3507,3509,3512,3514,3516,3518,3520,3522,3524,3526,3528],{},[134,3499,3500],{},"f",[63,3502,2129],{"stretchy":131},[134,3504,940],{},[63,3506,2138],{"stretchy":131},[63,3508,143],{},[134,3510,3511],{},"g",[63,3513,2129],{"stretchy":131},[134,3515,940],{},[63,3517,2138],{"stretchy":131},[63,3519,1986],{},[134,3521,3309],{},[63,3523,2129],{"stretchy":131},[134,3525,940],{},[63,3527,2138],{"stretchy":131},[63,3529,578],{"separator":77},[69,3531,3532],{"encoding":71},"f(n) = g(n) + h(n),",[40,3534,3536,3564,3592],{"className":3535,"ariaHidden":77},[76],[40,3537,3539,3542,3546,3549,3552,3555,3558,3561],{"className":3538},[81],[40,3540],{"className":3541,"style":166},[85],[40,3543,3500],{"className":3544,"style":3545},[90,437],"margin-right:0.1076em;",[40,3547,2129],{"className":3548},[615],[40,3550,940],{"className":3551},[90,437],[40,3553,2138],{"className":3554},[173],[40,3556],{"className":3557,"style":181},[94],[40,3559,143],{"className":3560},[185],[40,3562],{"className":3563,"style":181},[94],[40,3565,3567,3570,3574,3577,3580,3583,3586,3589],{"className":3566},[81],[40,3568],{"className":3569,"style":166},[85],[40,3571,3511],{"className":3572,"style":3573},[90,437],"margin-right:0.0359em;",[40,3575,2129],{"className":3576},[615],[40,3578,940],{"className":3579},[90,437],[40,3581,2138],{"className":3582},[173],[40,3584],{"className":3585,"style":95},[94],[40,3587,1986],{"className":3588},[99],[40,3590],{"className":3591,"style":95},[94],[40,3593,3595,3598,3601,3604,3607,3610],{"className":3594},[81],[40,3596],{"className":3597,"style":166},[85],[40,3599,3309],{"className":3600},[90,437],[40,3602,2129],{"className":3603},[615],[40,3605,940],{"className":3606},[90,437],[40,3608,2138],{"className":3609},[173],[40,3611,578],{"className":3612},[623],[40,3614,3616,3636],{"className":3615},[43],[40,3617,3619],{"className":3618},[47],[49,3620,3621],{"xmlns":51},[53,3622,3623,3633],{},[56,3624,3625,3627,3629,3631],{},[134,3626,3511],{},[63,3628,2129],{"stretchy":131},[134,3630,940],{},[63,3632,2138],{"stretchy":131},[69,3634,3635],{"encoding":71},"g(n)",[40,3637,3639],{"className":3638,"ariaHidden":77},[76],[40,3640,3642,3645,3648,3651,3654],{"className":3641},[81],[40,3643],{"className":3644,"style":166},[85],[40,3646,3511],{"className":3647,"style":3573},[90,437],[40,3649,2129],{"className":3650},[615],[40,3652,940],{"className":3653},[90,437],[40,3655,2138],{"className":3656},[173]," — стоимость пути от начальной вершины до ",[40,3659,3661,3674],{"className":3660},[43],[40,3662,3664],{"className":3663},[47],[49,3665,3666],{"xmlns":51},[53,3667,3668,3672],{},[56,3669,3670],{},[134,3671,940],{},[69,3673,940],{"encoding":71},[40,3675,3677],{"className":3676,"ariaHidden":77},[76],[40,3678,3680,3683],{"className":3679},[81],[40,3681],{"className":3682,"style":1918},[85],[40,3684,940],{"className":3685},[90,437]," (известна точно), а ",[40,3688,3690,3709],{"className":3689},[43],[40,3691,3693],{"className":3692},[47],[49,3694,3695],{"xmlns":51},[53,3696,3697,3707],{},[56,3698,3699,3701,3703,3705],{},[134,3700,3309],{},[63,3702,2129],{"stretchy":131},[134,3704,940],{},[63,3706,2138],{"stretchy":131},[69,3708,3318],{"encoding":71},[40,3710,3712],{"className":3711,"ariaHidden":77},[76],[40,3713,3715,3718,3721,3724,3727],{"className":3714},[81],[40,3716],{"className":3717,"style":166},[85],[40,3719,3309],{"className":3720},[90,437],[40,3722,2129],{"className":3723},[615],[40,3725,940],{"className":3726},[90,437],[40,3728,2138],{"className":3729},[173]," — эвристическая оценка оставшегося пути. Алгоритм раскрывает вершину с наименьшим ",[40,3732,3734,3754],{"className":3733},[43],[40,3735,3737],{"className":3736},[47],[49,3738,3739],{"xmlns":51},[53,3740,3741,3751],{},[56,3742,3743,3745,3747,3749],{},[134,3744,3500],{},[63,3746,2129],{"stretchy":131},[134,3748,940],{},[63,3750,2138],{"stretchy":131},[69,3752,3753],{"encoding":71},"f(n)",[40,3755,3757],{"className":3756,"ariaHidden":77},[76],[40,3758,3760,3763,3766,3769,3772],{"className":3759},[81],[40,3761],{"className":3762,"style":166},[85],[40,3764,3500],{"className":3765,"style":3545},[90,437],[40,3767,2129],{"className":3768},[615],[40,3770,940],{"className":3771},[90,437],[40,3773,2138],{"className":3774},[173],", то есть учитывает и уже понесённые затраты, и прогнозируемый остаток.",[15,3777,3778,3779,389,3782,3785,3786,3897,3898,2539,3926,4000,4001,4029,4030,389,4033,4036,4037,4040,4041,4069,4070,4135,4136,4164,4165,2539,4377,4405],{},"A* гарантирует нахождение оптимального решения при выполнении двух условий. Первое — ",[386,3780,3781],{},"допустимость",[35,3783,3784],{},"admissibility",") эвристики: ",[40,3787,3789,3823],{"className":3788},[43],[40,3790,3792],{"className":3791},[47],[49,3793,3794],{"xmlns":51},[53,3795,3796,3820],{},[56,3797,3798,3800,3802,3804,3806,3808,3814,3816,3818],{},[134,3799,3309],{},[63,3801,2129],{"stretchy":131},[134,3803,940],{},[63,3805,2138],{"stretchy":131},[63,3807,1850],{},[288,3809,3810,3812],{},[134,3811,3309],{},[63,3813,500],{},[63,3815,2129],{"stretchy":131},[134,3817,940],{},[63,3819,2138],{"stretchy":131},[69,3821,3822],{"encoding":71},"h(n) \\leq h^*(n)",[40,3824,3826,3853],{"className":3825,"ariaHidden":77},[76],[40,3827,3829,3832,3835,3838,3841,3844,3847,3850],{"className":3828},[81],[40,3830],{"className":3831,"style":166},[85],[40,3833,3309],{"className":3834},[90,437],[40,3836,2129],{"className":3837},[615],[40,3839,940],{"className":3840},[90,437],[40,3842,2138],{"className":3843},[173],[40,3845],{"className":3846,"style":181},[94],[40,3848,1850],{"className":3849},[185],[40,3851],{"className":3852,"style":181},[94],[40,3854,3856,3859,3888,3891,3894],{"className":3855},[81],[40,3857],{"className":3858,"style":166},[85],[40,3860,3862,3865],{"className":3861},[90],[40,3863,3309],{"className":3864},[90,437],[40,3866,3868],{"className":3867},[347],[40,3869,3871],{"className":3870},[351],[40,3872,3874],{"className":3873},[355],[40,3875,3877],{"className":3876,"style":513},[359],[40,3878,3879,3882],{"style":362},[40,3880],{"className":3881,"style":367},[366],[40,3883,3885],{"className":3884},[371,372,373,374],[40,3886,500],{"className":3887},[99,374],[40,3889,2129],{"className":3890},[615],[40,3892,940],{"className":3893},[90,437],[40,3895,2138],{"className":3896},[173]," для всех ",[40,3899,3901,3914],{"className":3900},[43],[40,3902,3904],{"className":3903},[47],[49,3905,3906],{"xmlns":51},[53,3907,3908,3912],{},[56,3909,3910],{},[134,3911,940],{},[69,3913,940],{"encoding":71},[40,3915,3917],{"className":3916,"ariaHidden":77},[76],[40,3918,3920,3923],{"className":3919},[81],[40,3921],{"className":3922,"style":1918},[85],[40,3924,940],{"className":3925},[90,437],[40,3927,3929,3953],{"className":3928},[43],[40,3930,3932],{"className":3931},[47],[49,3933,3934],{"xmlns":51},[53,3935,3936,3950],{},[56,3937,3938,3944,3946,3948],{},[288,3939,3940,3942],{},[134,3941,3309],{},[63,3943,500],{},[63,3945,2129],{"stretchy":131},[134,3947,940],{},[63,3949,2138],{"stretchy":131},[69,3951,3952],{"encoding":71},"h^*(n)",[40,3954,3956],{"className":3955,"ariaHidden":77},[76],[40,3957,3959,3962,3991,3994,3997],{"className":3958},[81],[40,3960],{"className":3961,"style":166},[85],[40,3963,3965,3968],{"className":3964},[90],[40,3966,3309],{"className":3967},[90,437],[40,3969,3971],{"className":3970},[347],[40,3972,3974],{"className":3973},[351],[40,3975,3977],{"className":3976},[355],[40,3978,3980],{"className":3979,"style":513},[359],[40,3981,3982,3985],{"style":362},[40,3983],{"className":3984,"style":367},[366],[40,3986,3988],{"className":3987},[371,372,373,374],[40,3989,500],{"className":3990},[99,374],[40,3992,2129],{"className":3993},[615],[40,3995,940],{"className":3996},[90,437],[40,3998,2138],{"className":3999},[173]," — истинная стоимость оптимального пути от ",[40,4002,4004,4017],{"className":4003},[43],[40,4005,4007],{"className":4006},[47],[49,4008,4009],{"xmlns":51},[53,4010,4011,4015],{},[56,4012,4013],{},[134,4014,940],{},[69,4016,940],{"encoding":71},[40,4018,4020],{"className":4019,"ariaHidden":77},[76],[40,4021,4023,4026],{"className":4022},[81],[40,4024],{"className":4025,"style":1918},[85],[40,4027,940],{"className":4028},[90,437]," до цели. Иначе говоря, эвристика не должна переоценивать расстояние до цели. Манхэттенское расстояние для «восьмёрки» — допустимая эвристика, поскольку каждая фишка должна сделать не менее стольких ходов, сколько клеток отделяет её от целевой позиции. Второе условие — ",[386,4031,4032],{},"состоятельность",[35,4034,4035],{},"consistency",", иногда ",[35,4038,4039],{},"monotonicity","): для любой вершины ",[40,4042,4044,4057],{"className":4043},[43],[40,4045,4047],{"className":4046},[47],[49,4048,4049],{"xmlns":51},[53,4050,4051,4055],{},[56,4052,4053],{},[134,4054,940],{},[69,4056,940],{"encoding":71},[40,4058,4060],{"className":4059,"ariaHidden":77},[76],[40,4061,4063,4066],{"className":4062},[81],[40,4064],{"className":4065,"style":1918},[85],[40,4067,940],{"className":4068},[90,437]," и её потомка ",[40,4071,4073,4093],{"className":4072},[43],[40,4074,4076],{"className":4075},[47],[49,4077,4078],{"xmlns":51},[53,4079,4080,4090],{},[56,4081,4082],{},[288,4083,4084,4086],{},[134,4085,940],{},[63,4087,4089],{"mathvariant":136,"lspace":4088,"rspace":4088},"0em","′",[69,4091,4092],{"encoding":71},"n'",[40,4094,4096],{"className":4095,"ariaHidden":77},[76],[40,4097,4099,4103],{"className":4098},[81],[40,4100],{"className":4101,"style":4102},[85],"height:0.7519em;",[40,4104,4106,4109],{"className":4105},[90],[40,4107,940],{"className":4108},[90,437],[40,4110,4112],{"className":4111},[347],[40,4113,4115],{"className":4114},[351],[40,4116,4118],{"className":4117},[355],[40,4119,4121],{"className":4120,"style":4102},[359],[40,4122,4123,4126],{"style":362},[40,4124],{"className":4125,"style":367},[366],[40,4127,4129],{"className":4128},[371,372,373,374],[40,4130,4132],{"className":4131},[90,374],[40,4133,4089],{"className":4134},[90,374],", полученного действием ",[40,4137,4139,4152],{"className":4138},[43],[40,4140,4142],{"className":4141},[47],[49,4143,4144],{"xmlns":51},[53,4145,4146,4150],{},[56,4147,4148],{},[134,4149,916],{},[69,4151,916],{"encoding":71},[40,4153,4155],{"className":4154,"ariaHidden":77},[76],[40,4156,4158,4161],{"className":4157},[81],[40,4159],{"className":4160,"style":1918},[85],[40,4162,916],{"className":4163},[90,437],", выполняется ",[40,4166,4168,4225],{"className":4167},[43],[40,4169,4171],{"className":4170},[47],[49,4172,4173],{"xmlns":51},[53,4174,4175,4222],{},[56,4176,4177,4179,4181,4183,4185,4187,4190,4192,4194,4196,4198,4200,4206,4208,4210,4212,4214,4220],{},[134,4178,3309],{},[63,4180,2129],{"stretchy":131},[134,4182,940],{},[63,4184,2138],{"stretchy":131},[63,4186,1850],{},[134,4188,4189],{},"c",[63,4191,2129],{"stretchy":131},[134,4193,940],{},[63,4195,578],{"separator":77},[134,4197,916],{},[63,4199,578],{"separator":77},[288,4201,4202,4204],{},[134,4203,940],{},[63,4205,4089],{"mathvariant":136,"lspace":4088,"rspace":4088},[63,4207,2138],{"stretchy":131},[63,4209,1986],{},[134,4211,3309],{},[63,4213,2129],{"stretchy":131},[288,4215,4216,4218],{},[134,4217,940],{},[63,4219,4089],{"mathvariant":136,"lspace":4088,"rspace":4088},[63,4221,2138],{"stretchy":131},[69,4223,4224],{"encoding":71},"h(n) \\leq c(n, a, n') + h(n')",[40,4226,4228,4255,4330],{"className":4227,"ariaHidden":77},[76],[40,4229,4231,4234,4237,4240,4243,4246,4249,4252],{"className":4230},[81],[40,4232],{"className":4233,"style":166},[85],[40,4235,3309],{"className":4236},[90,437],[40,4238,2129],{"className":4239},[615],[40,4241,940],{"className":4242},[90,437],[40,4244,2138],{"className":4245},[173],[40,4247],{"className":4248,"style":181},[94],[40,4250,1850],{"className":4251},[185],[40,4253],{"className":4254,"style":181},[94],[40,4256,4258,4262,4265,4268,4271,4274,4277,4280,4283,4286,4318,4321,4324,4327],{"className":4257},[81],[40,4259],{"className":4260,"style":4261},[85],"height:1.0019em;vertical-align:-0.25em;",[40,4263,4189],{"className":4264},[90,437],[40,4266,2129],{"className":4267},[615],[40,4269,940],{"className":4270},[90,437],[40,4272,578],{"className":4273},[623],[40,4275],{"className":4276,"style":201},[94],[40,4278,916],{"className":4279},[90,437],[40,4281,578],{"className":4282},[623],[40,4284],{"className":4285,"style":201},[94],[40,4287,4289,4292],{"className":4288},[90],[40,4290,940],{"className":4291},[90,437],[40,4293,4295],{"className":4294},[347],[40,4296,4298],{"className":4297},[351],[40,4299,4301],{"className":4300},[355],[40,4302,4304],{"className":4303,"style":4102},[359],[40,4305,4306,4309],{"style":362},[40,4307],{"className":4308,"style":367},[366],[40,4310,4312],{"className":4311},[371,372,373,374],[40,4313,4315],{"className":4314},[90,374],[40,4316,4089],{"className":4317},[90,374],[40,4319,2138],{"className":4320},[173],[40,4322],{"className":4323,"style":95},[94],[40,4325,1986],{"className":4326},[99],[40,4328],{"className":4329,"style":95},[94],[40,4331,4333,4336,4339,4342,4374],{"className":4332},[81],[40,4334],{"className":4335,"style":4261},[85],[40,4337,3309],{"className":4338},[90,437],[40,4340,2129],{"className":4341},[615],[40,4343,4345,4348],{"className":4344},[90],[40,4346,940],{"className":4347},[90,437],[40,4349,4351],{"className":4350},[347],[40,4352,4354],{"className":4353},[351],[40,4355,4357],{"className":4356},[355],[40,4358,4360],{"className":4359,"style":4102},[359],[40,4361,4362,4365],{"style":362},[40,4363],{"className":4364,"style":367},[366],[40,4366,4368],{"className":4367},[371,372,373,374],[40,4369,4371],{"className":4370},[90,374],[40,4372,4089],{"className":4373},[90,374],[40,4375,2138],{"className":4376},[173],[40,4378,4380,4393],{"className":4379},[43],[40,4381,4383],{"className":4382},[47],[49,4384,4385],{"xmlns":51},[53,4386,4387,4391],{},[56,4388,4389],{},[134,4390,4189],{},[69,4392,4189],{"encoding":71},[40,4394,4396],{"className":4395,"ariaHidden":77},[76],[40,4397,4399,4402],{"className":4398},[81],[40,4400],{"className":4401,"style":1918},[85],[40,4403,4189],{"className":4404},[90,437]," — стоимость перехода. Состоятельность — более сильное требование, чем допустимость, и оно гарантирует, что A* не станет повторно раскрывать уже обработанные вершины.",[15,4407,4408,4409,397,4480,4483,4484,4554,4555,3897,4719,4747],{},"Качество эвристики на практике определяет, сколько вершин раскроет A*. Эвристика ",[40,4410,4412,4430],{"className":4411},[43],[40,4413,4415],{"className":4414},[47],[49,4416,4417],{"xmlns":51},[53,4418,4419,4427],{},[56,4420,4421],{},[411,4422,4423,4425],{},[134,4424,3309],{},[59,4426,336],{},[69,4428,4429],{"encoding":71},"h_1",[40,4431,4433],{"className":4432,"ariaHidden":77},[76],[40,4434,4436,4440],{"className":4435},[81],[40,4437],{"className":4438,"style":4439},[85],"height:0.8444em;vertical-align:-0.15em;",[40,4441,4443,4446],{"className":4442},[90],[40,4444,3309],{"className":4445},[90,437],[40,4447,4449],{"className":4448},[347],[40,4450,4452,4472],{"className":4451},[351,444],[40,4453,4455,4469],{"className":4454},[355],[40,4456,4458],{"className":4457,"style":451},[359],[40,4459,4460,4463],{"style":454},[40,4461],{"className":4462,"style":367},[366],[40,4464,4466],{"className":4465},[371,372,373,374],[40,4467,336],{"className":4468},[90,374],[40,4470,468],{"className":4471},[467],[40,4473,4475],{"className":4474},[355],[40,4476,4478],{"className":4477,"style":475},[359],[40,4479],{},[386,4481,4482],{},"доминирует"," над ",[40,4485,4487,4505],{"className":4486},[43],[40,4488,4490],{"className":4489},[47],[49,4491,4492],{"xmlns":51},[53,4493,4494,4502],{},[56,4495,4496],{},[411,4497,4498,4500],{},[134,4499,3309],{},[59,4501,140],{},[69,4503,4504],{"encoding":71},"h_2",[40,4506,4508],{"className":4507,"ariaHidden":77},[76],[40,4509,4511,4514],{"className":4510},[81],[40,4512],{"className":4513,"style":4439},[85],[40,4515,4517,4520],{"className":4516},[90],[40,4518,3309],{"className":4519},[90,437],[40,4521,4523],{"className":4522},[347],[40,4524,4526,4546],{"className":4525},[351,444],[40,4527,4529,4543],{"className":4528},[355],[40,4530,4532],{"className":4531,"style":451},[359],[40,4533,4534,4537],{"style":454},[40,4535],{"className":4536,"style":367},[366],[40,4538,4540],{"className":4539},[371,372,373,374],[40,4541,140],{"className":4542},[90,374],[40,4544,468],{"className":4545},[467],[40,4547,4549],{"className":4548},[355],[40,4550,4552],{"className":4551,"style":475},[359],[40,4553],{},", если ",[40,4556,4558,4597],{"className":4557},[43],[40,4559,4561],{"className":4560},[47],[49,4562,4563],{"xmlns":51},[53,4564,4565,4594],{},[56,4566,4567,4573,4575,4577,4579,4582,4588,4590,4592],{},[411,4568,4569,4571],{},[134,4570,3309],{},[59,4572,336],{},[63,4574,2129],{"stretchy":131},[134,4576,940],{},[63,4578,2138],{"stretchy":131},[63,4580,4581],{},"≥",[411,4583,4584,4586],{},[134,4585,3309],{},[59,4587,140],{},[63,4589,2129],{"stretchy":131},[134,4591,940],{},[63,4593,2138],{"stretchy":131},[69,4595,4596],{"encoding":71},"h_1(n) \\geq h_2(n)",[40,4598,4600,4664],{"className":4599,"ariaHidden":77},[76],[40,4601,4603,4606,4646,4649,4652,4655,4658,4661],{"className":4602},[81],[40,4604],{"className":4605,"style":166},[85],[40,4607,4609,4612],{"className":4608},[90],[40,4610,3309],{"className":4611},[90,437],[40,4613,4615],{"className":4614},[347],[40,4616,4618,4638],{"className":4617},[351,444],[40,4619,4621,4635],{"className":4620},[355],[40,4622,4624],{"className":4623,"style":451},[359],[40,4625,4626,4629],{"style":454},[40,4627],{"className":4628,"style":367},[366],[40,4630,4632],{"className":4631},[371,372,373,374],[40,4633,336],{"className":4634},[90,374],[40,4636,468],{"className":4637},[467],[40,4639,4641],{"className":4640},[355],[40,4642,4644],{"className":4643,"style":475},[359],[40,4645],{},[40,4647,2129],{"className":4648},[615],[40,4650,940],{"className":4651},[90,437],[40,4653,2138],{"className":4654},[173],[40,4656],{"className":4657,"style":181},[94],[40,4659,4581],{"className":4660},[185],[40,4662],{"className":4663,"style":181},[94],[40,4665,4667,4670,4710,4713,4716],{"className":4666},[81],[40,4668],{"className":4669,"style":166},[85],[40,4671,4673,4676],{"className":4672},[90],[40,4674,3309],{"className":4675},[90,437],[40,4677,4679],{"className":4678},[347],[40,4680,4682,4702],{"className":4681},[351,444],[40,4683,4685,4699],{"className":4684},[355],[40,4686,4688],{"className":4687,"style":451},[359],[40,4689,4690,4693],{"style":454},[40,4691],{"className":4692,"style":367},[366],[40,4694,4696],{"className":4695},[371,372,373,374],[40,4697,140],{"className":4698},[90,374],[40,4700,468],{"className":4701},[467],[40,4703,4705],{"className":4704},[355],[40,4706,4708],{"className":4707,"style":475},[359],[40,4709],{},[40,4711,2129],{"className":4712},[615],[40,4714,940],{"className":4715},[90,437],[40,4717,2138],{"className":4718},[173],[40,4720,4722,4735],{"className":4721},[43],[40,4723,4725],{"className":4724},[47],[49,4726,4727],{"xmlns":51},[53,4728,4729,4733],{},[56,4730,4731],{},[134,4732,940],{},[69,4734,940],{"encoding":71},[40,4736,4738],{"className":4737,"ariaHidden":77},[76],[40,4739,4741,4744],{"className":4740},[81],[40,4742],{"className":4743,"style":1918},[85],[40,4745,940],{"className":4746},[90,437]," при сохранении допустимости. Доминирующая эвристика никогда не приводит к раскрытию большего числа вершин. Классический пример для «восьмёрки»: тривиальная эвристика «число фишек не на своих местах» допустима, но слабая; манхэттенское расстояние её доминирует и на типичных задачах сокращает число раскрываемых вершин в десятки раз. Это объясняет, почему инженерия эвристики — отдельный пункт при проектировании систем планирования.",[15,4749,4750,4751,4794,4795,4838],{},"Разница между жадным поиском и A* наглядна на примере навигации. Положим, требуется проложить маршрут из точки А в точку Б на карте. Жадный поиск выберет дорогу, которая «смотрит» в сторону Б (минимальное расстояние по прямой), — но эта дорога может оказаться просёлочной, петляющей и в итоге длинной. A* учтёт и уже пройденный путь ",[40,4752,4754,4773],{"className":4753},[43],[40,4755,4757],{"className":4756},[47],[49,4758,4759],{"xmlns":51},[53,4760,4761,4771],{},[56,4762,4763,4765,4767,4769],{},[134,4764,3511],{},[63,4766,2129],{"stretchy":131},[134,4768,940],{},[63,4770,2138],{"stretchy":131},[69,4772,3635],{"encoding":71},[40,4774,4776],{"className":4775,"ariaHidden":77},[76],[40,4777,4779,4782,4785,4788,4791],{"className":4778},[81],[40,4780],{"className":4781,"style":166},[85],[40,4783,3511],{"className":4784,"style":3573},[90,437],[40,4786,2129],{"className":4787},[615],[40,4789,940],{"className":4790},[90,437],[40,4792,2138],{"className":4793},[173],", и оставшееся расстояние ",[40,4796,4798,4817],{"className":4797},[43],[40,4799,4801],{"className":4800},[47],[49,4802,4803],{"xmlns":51},[53,4804,4805,4815],{},[56,4806,4807,4809,4811,4813],{},[134,4808,3309],{},[63,4810,2129],{"stretchy":131},[134,4812,940],{},[63,4814,2138],{"stretchy":131},[69,4816,3318],{"encoding":71},[40,4818,4820],{"className":4819,"ariaHidden":77},[76],[40,4821,4823,4826,4829,4832,4835],{"className":4822},[81],[40,4824],{"className":4825,"style":166},[85],[40,4827,3309],{"className":4828},[90,437],[40,4830,2129],{"className":4831},[615],[40,4833,940],{"className":4834},[90,437],[40,4836,2138],{"className":4837},[173],", и предпочтёт скоростную магистраль, даже если она сначала ведёт в сторону от цели.",[1272,4840,1274,4841,1274,4845],{},[1276,4842],{"src":4843,"alt":4844},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fgreedy_vs_astar.svg","Сравнение жадного поиска и A* на задаче навигации",[1281,4846,4844],{},[15,4848,4849,4850,4857,4858,4906,4907,4915,4916,1253],{},"На практике A* применяется в навигационных приложениях, компьютерных играх (поиск пути для персонажей), робототехнике (планирование движения), логистике (оптимизация маршрутов). Ограничение алгоритма — требования к памяти: как и BFS, A* хранит все раскрытые вершины, и при больших пространствах состояний это может стать проблемой. Существуют модификации, смягчающие это ограничение: IDA* ",[2591,4851,4853],{"className":4852},[2594],[916,4854,4855],{"href":2597},[40,4856,336],{}," комбинирует A* с итеративным углублением и потребляет ",[40,4859,4861,4882],{"className":4860},[43],[40,4862,4864],{"className":4863},[47],[49,4865,4866],{"xmlns":51},[53,4867,4868,4880],{},[56,4869,4870,4872,4874,4876,4878],{},[134,4871,2126],{},[63,4873,2129],{"stretchy":131},[134,4875,1784],{},[134,4877,1818],{},[63,4879,2138],{"stretchy":131},[69,4881,2895],{"encoding":71},[40,4883,4885],{"className":4884,"ariaHidden":77},[76],[40,4886,4888,4891,4894,4897,4900,4903],{"className":4887},[81],[40,4889],{"className":4890,"style":166},[85],[40,4892,2126],{"className":4893,"style":2155},[90,437],[40,4895,2129],{"className":4896},[615],[40,4898,1784],{"className":4899},[90,437],[40,4901,1818],{"className":4902},[90,437],[40,4904,2138],{"className":4905},[173]," памяти, SMA* ",[2591,4908,4910],{"className":4909},[2594],[916,4911,4913],{"href":4912},"#ref-3",[40,4914,61],{}," работает в фиксированном бюджете памяти, отбрасывая наименее перспективные вершины. Подробное рассмотрение этих модификаций выходит за рамки курса; систематическое изложение — в ",[2591,4917,4919],{"className":4918},[2594],[916,4920,4922],{"href":4921},"#ref-4",[40,4923,224],{},[22,4925,4927],{"id":4926},"логический-вывод-и-представление-знаний","Логический вывод и представление знаний",[27,4929,4931],{"id":4930},"базы-знаний-и-экспертные-системы","Базы знаний и экспертные системы",[15,4933,4934],{},"Поиск в пространстве состояний — мощный инструмент, но он предполагает, что задача уже формализована: определены состояния, операторы, цель. А что если задача состоит не в нахождении пути, а в принятии решения на основе неполной информации? Врач ставит диагноз, инженер определяет причину неисправности, консультант подбирает конфигурацию оборудования — во всех этих случаях рассуждение строится не как поиск пути, а как последовательность выводов из имеющихся фактов и правил.",[15,4936,4937,4938,389,4941,4944,4945,4953,4962],{},"Именно для таких задач в 1970–1980-х годах были разработаны ",[386,4939,4940],{},"экспертные системы",[35,4942,4943],{},"expert systems",") ",[2591,4946,4948],{"className":4947},[2594],[916,4949,4951],{"href":4950},"#ref-5",[40,4952,3059],{},[2591,4954,4956],{"className":4955},[2594],[916,4957,4959],{"href":4958},"#ref-6",[40,4960,4961],{},"6",". Архитектура классической экспертной системы включает три компонента:",[1725,4964,4965,4974,4983],{},[1728,4966,4967,389,4970,4973],{},[386,4968,4969],{},"База знаний",[35,4971,4972],{},"knowledge base",") — хранилище фактов о предметной области и правил, связывающих факты с выводами. Факты описывают известные свойства объектов («температура пациента — 38.5°C», «бактерия грамположительная»). Правила задают логику вывода.",[1728,4975,4976,389,4979,4982],{},[386,4977,4978],{},"Механизм вывода",[35,4980,4981],{},"inference engine",") — программный модуль, который применяет правила к фактам и порождает новые заключения.",[1728,4984,4985,4988],{},[386,4986,4987],{},"Пользовательский интерфейс"," — обеспечивает диалог с пользователем: запрашивает недостающие факты и объясняет ход рассуждения.",[1272,4990,1274,4991,1274,4995],{},[1276,4992],{"src":4993,"alt":4994},"\u002Fimg\u002Faidt-iot-mii\u002Ftopic-02\u002Fexpert_system_architecture.svg","Архитектура экспертной системы",[1281,4996,4994],{},[15,4998,4999,5000,389,5003,5006],{},"Правила в экспертных системах чаще всего записываются в форме ",[386,5001,5002],{},"продукций",[35,5004,5005],{},"production rules","): «ЕСЛИ условие, ТО действие». Рассмотрим фрагмент, стилизованный под систему диагностики:",[5008,5009,5014],"pre",{"className":5010,"code":5012,"language":5013},[5011],"language-text","ЕСЛИ инфекция является первичной бактериемией\n  И окраска по Граму положительная\n  И морфология — кокки в цепочках\nТО с вероятностью 0.7 возбудитель — Streptococcus\n","text",[5015,5016,5012],"code",{"__ignoreMap":5017},"",[15,5019,5020],{},"Подобных правил в реальных системах могли быть сотни. MYCIN содержала около 450 правил и показывала точность диагностики, сопоставимую с экспертами-инфекционистами.",[15,5022,5023,5024,389,5027,5030],{},"Механизм вывода может работать в двух режимах. ",[386,5025,5026],{},"Прямой вывод",[35,5028,5029],{},"forward chaining",") отталкивается от известных фактов: система просматривает правила, проверяет, у каких из них выполнены условия, и активирует соответствующие действия, порождая новые факты. Процесс повторяется, пока не будет достигнута цель или не останется применимых правил. Прямой вывод естественен для задач мониторинга и автоматического реагирования: поступили новые данные — система делает выводы.",[15,5032,5033,389,5036,5039],{},[386,5034,5035],{},"Обратный вывод",[35,5037,5038],{},"backward chaining",") действует в противоположном направлении. Система начинает с гипотезы (например, «возбудитель — Streptococcus») и ищет правила, которые могли бы её подтвердить. Если условия правила не подтверждены имеющимися фактами, они становятся новыми подцелями, которые система пытается доказать рекурсивно. Обратный вывод характерен для диагностических систем: есть подозрение — нужно проверить, подтверждается ли оно данными.",[15,5041,5042],{},"На практике разница между режимами проявляется в том, какие вопросы система задаёт пользователю. Система с прямым выводом обрабатывает все доступные данные и выдаёт заключение. Система с обратным выводом спрашивает только то, что нужно для проверки текущей гипотезы, — и в этом её преимущество при большой базе знаний, когда сбор полной информации дорог или невозможен.",[15,5044,5045],{},"Рассмотрим миниатюрный пример. Пусть база знаний содержит два правила: «ЕСЛИ лихорадка И кашель, ТО грипп» и «ЕСЛИ грипп, ТО назначить покой». Известный факт — «лихорадка». Прямой вывод раскрутит цепочку так: ищем правила, у которых выполнены условия. Первое правило требует ещё и «кашель» — система спросит у пользователя про кашель; получив подтверждение, добавит «грипп» в базу фактов, затем сработает второе правило и появится «назначить покой». Обратный вывод стартует с гипотезы «назначить покой»: ищет правила, которые её выводят, находит второе; чтобы оно сработало, нужен «грипп». Грипп не факт — ищется правило, его выводящее: первое. Его условия — «лихорадка» (есть в фактах) и «кашель» (неизвестно — спрашиваем). Дальше — как в прямом выводе. Различие — в порядке вопросов: прямой обходит правила «снизу вверх» от фактов, обратный — «сверху вниз» от целей. На небольшой базе различие незаметно, но при сотнях правил разница в числе бесполезных запросов к пользователю определяет, удобна ли система.",[27,5047,5049],{"id":5048},"ограничения-символьного-подхода","Ограничения символьного подхода",[15,5051,5052],{},"Экспертные системы продемонстрировали, что формализованное знание позволяет решать практические задачи. Но их массовое внедрение обнажило несколько фундаментальных ограничений, которые не удалось преодолеть в рамках символьной парадигмы.",[15,5054,5055,5056,389,5059,5062],{},"Первое — ",[386,5057,5058],{},"проблема приобретения знаний",[35,5060,5061],{},"knowledge acquisition bottleneck","). Правила приходилось извлекать из голов экспертов вручную, в ходе длительных интервью. Эксперт далеко не всегда способен объяснить, как именно он принимает решения: значительная часть профессионального опыта существует в форме интуиции и неявного знания. Создание базы знаний для одной предметной области занимало месяцы и годы, а при изменении области — например, при появлении нового оборудования или новых стандартов — базу приходилось перерабатывать заново.",[15,5064,5065,5066,389,5069,5072],{},"Второе — ",[386,5067,5068],{},"хрупкость",[35,5070,5071],{},"brittleness","). Экспертная система работает уверенно ровно в тех ситуациях, которые предусмотрены её правилами. Стоит столкнуться с незнакомой комбинацией фактов — и система либо даёт некорректный ответ, либо не даёт никакого. У неё нет механизма обобщения, позволяющего перенести опыт из одной ситуации в другую. Человек-эксперт может рассуждать по аналогии; продукционная система — нет.",[15,5074,5075,5076,5079],{},"Третье — ",[386,5077,5078],{},"комбинаторный взрыв",". При увеличении числа правил и фактов количество возможных цепочек вывода растёт экспоненциально. Для простых систем с десятками правил это не проблема, но при масштабировании до тысяч правил время работы механизма вывода может стать неприемлемым.",[15,5081,5082],{},"Эти ограничения не означают, что символьный подход бесполезен. В задачах с чёткой структурой — конфигурирование, планирование, формальная верификация — он остаётся эффективным. Но для задач, где закономерности трудно формализовать в виде правил (распознавание образов, обработка естественного языка, прогнозирование на основе больших объёмов данных), потребовался принципиально иной подход.",[15,5084,5085],{},"Ответом стало машинное обучение: вместо ручного формирования правил — автоматическое извлечение закономерностей из данных. Вместо явной базы знаний — модель, параметры которой настраиваются в ходе обучения. Этот переход — от знаний к данным, от правил к статистике — составляет содержание следующих тем курса, начиная с темы 3.",[22,5087,5089],{"id":5088},"литература","Литература",[5091,5092,5095,5099,5103,5107,5111,5115],"ol",{"className":5093},[5094],"references",[1728,5096,5098],{"id":5097},"ref-1","Korf R. E. Depth-First Iterative-Deepening: An Optimal Admissible Tree Search. — Artificial Intelligence, 1985, С. 97–109, DOI: 10.1016\u002F0004-3702(85)90084-0.",[1728,5100,5102],{"id":5101},"ref-2","Hart P. E., Nilsson N. J., Raphael B. A Formal Basis for the Heuristic Determination of Minimum Cost Paths. — IEEE Transactions on Systems Science and Cybernetics, 1968, С. 100–107, DOI: 10.1109\u002FTSSC.1968.300136.",[1728,5104,5106],{"id":5105},"ref-3","Russell S. J. Efficient Memory-Bounded Search Methods. — Proceedings of the 10th European Conference on Artificial Intelligence (ECAI), 1992, С. 1–5.",[1728,5108,5110],{"id":5109},"ref-4","Russell S., Norvig P. Artificial Intelligence: A Modern Approach. — Pearson, 2021.",[1728,5112,5114],{"id":5113},"ref-5","Shortliffe E. H. Computer-Based Medical Consultations: MYCIN. — Elsevier, 1976.",[1728,5116,5118],{"id":5117},"ref-6","McDermott J. R1: A Rule-Based Configurer of Computer Systems. — Artificial Intelligence, 1982, С. 39–88, DOI: 10.1016\u002F0004-3702(82)90021-2.",{"title":5017,"searchDepth":5120,"depth":5120,"links":5121},2,[5122,5128,5132],{"id":24,"depth":5120,"text":25,"children":5123},[5124,5126,5127],{"id":29,"depth":5125,"text":30},3,{"id":1925,"depth":5125,"text":1926},{"id":3285,"depth":5125,"text":3286},{"id":4926,"depth":5120,"text":4927,"children":5129},[5130,5131],{"id":4930,"depth":5125,"text":4931},{"id":5048,"depth":5125,"text":5049},{"id":5088,"depth":5120,"text":5089},"aidt-iot-mii",null,"md",false,{},true,"\u002Fcourses\u002Faidt-iot-mii\u002Ftopic-02-content","content",{"title":6,"description":17},"courses\u002Faidt-iot-mii\u002Ftopic-02-content","topic-02","kSDwsmk8qlUy50Yqlki87E3GLnx6wfOe4OWmkEA0gIQ",{"id":5146,"title":5147,"body":5148,"course_slug":5133,"description":5017,"env_label":5134,"env_url":5134,"extension":5135,"group":5134,"is_course_project":5136,"is_index":5136,"level":5134,"meta":6614,"navigation":5138,"path":6615,"section":6616,"seo":6617,"stem":6618,"topic_number":5120,"topic_slug":5143,"__hash__":6619},"courses\u002Fcourses\u002Faidt-iot-mii\u002Ftopic-02-pz.md","Практическое занятие 2. Поиск пути и логический вывод",{"type":8,"value":5149,"toc":6599},[5150,5153,5167,5171,5174,5177,5181,5184,5187,5246,5250,5253,5326,5845,5848,5852,5876,5880,5884,5889,6033,6037,6069,6073,6076,6103,6106,6109,6113,6116,6127,6131,6134,6274,6278,6281,6286,6353,6356,6361,6427,6430,6434,6441,6461,6465],[11,5151,5147],{"id":5152},"практическое-занятие-2-поиск-пути-и-логический-вывод",[1725,5154,5155,5161],{},[1728,5156,5157,5160],{},[386,5158,5159],{},"Объём:"," 4 академических часа",[1728,5162,5163,5166],{},[386,5164,5165],{},"Раздел курса:"," учебное пособие, тема 2 «Поиск и логический вывод»",[22,5168,5170],{"id":5169},"введение","Введение",[15,5172,5173],{},"Тема 2 описывает алгоритмы поиска в пространстве состояний и логический вывод в экспертных системах теоретически. На этом занятии теория переходит в работающий код: студент реализует четыре алгоритма поиска на одной задаче и собирает с них сравнительные метрики, а затем строит миниатюрную экспертную систему с прямым и обратным выводом. Цель — не освоить продакшен-фреймворки (их в курсе нет), а через собственные реализации понять, чем алгоритмы отличаются на практике и какие компромиссы они выражают.",[15,5175,5176],{},"Занятие закрывает блок классических символьных методов: следующая тема переключает курс на статистическое обучение, и реализации этого занятия будут служить контрастной точкой отсчёта.",[22,5178,5180],{"id":5179},"цель-работы","Цель работы",[15,5182,5183],{},"Реализовать базовые алгоритмы поиска и логического вывода и эмпирически проверить теоретические свойства, заявленные в теме.",[15,5185,5186],{},"После выполнения работы студент сможет:",[1725,5188,5189,5192,5240,5243],{},[1728,5190,5191],{},"реализовать BFS, DFS, IDDFS и A* как универсальный обход графа состояний и применить их к головоломке «восьмёрка»;",[1728,5193,5194,5195,5239],{},"собрать сравнительную таблицу алгоритмов по числу раскрытых вершин, времени, длине решения и пиковой памяти и объяснить расхождения с теоретическими ",[40,5196,5198,5218],{"className":5197},[43],[40,5199,5201],{"className":5200},[47],[49,5202,5203],{"xmlns":51},[53,5204,5205,5215],{},[56,5206,5207,5209,5211,5213],{},[134,5208,2126],{},[63,5210,2129],{"stretchy":131},[63,5212,3062],{},[63,5214,2138],{"stretchy":131},[69,5216,5217],{"encoding":71},"O(\\cdot)",[40,5219,5221],{"className":5220,"ariaHidden":77},[76],[40,5222,5224,5227,5230,5233,5236],{"className":5223},[81],[40,5225],{"className":5226,"style":166},[85],[40,5228,2126],{"className":5229,"style":2155},[90,437],[40,5231,2129],{"className":5232},[615],[40,5234,3062],{"className":5235},[90],[40,5237,2138],{"className":5238},[173],"-оценками;",[1728,5241,5242],{},"реализовать продукционную базу знаний и два простых механизма вывода (прямой и обратный) для заданной предметной области;",[1728,5244,5245],{},"провести сценарии с разным составом начальных фактов и объяснить, почему количество вопросов к пользователю различается между режимами вывода.",[22,5247,5249],{"id":5248},"теоретический-минимум","Теоретический минимум",[15,5251,5252],{},"Концептуальная база — учебное пособие, тема 2: разделы «Формализация задачи поиска», «Неинформированный поиск», «Информированный (эвристический) поиск», «Базы знаний и экспертные системы». Здесь приводятся только сведения, специфичные для реализации.",[15,5254,5255,5256,5258,5259,5310,5311,5314,5315,5318,5319,5321,5322,5325],{},"«Восьмёрка» (англ. ",[35,5257,37],{},") — головоломка на поле ",[40,5260,5262,5280],{"className":5261},[43],[40,5263,5265],{"className":5264},[47],[49,5266,5267],{"xmlns":51},[53,5268,5269,5277],{},[56,5270,5271,5273,5275],{},[59,5272,61],{},[63,5274,65],{},[59,5276,61],{},[69,5278,5279],{"encoding":71},"3\\times3",[40,5281,5283,5301],{"className":5282,"ariaHidden":77},[76],[40,5284,5286,5289,5292,5295,5298],{"className":5285},[81],[40,5287],{"className":5288,"style":86},[85],[40,5290,61],{"className":5291},[90],[40,5293],{"className":5294,"style":95},[94],[40,5296,65],{"className":5297},[99],[40,5299],{"className":5300,"style":95},[94],[40,5302,5304,5307],{"className":5303},[81],[40,5305],{"className":5306,"style":109},[85],[40,5308,61],{"className":5309},[90]," с восемью пронумерованными фишками и одной пустой клеткой. Состояние удобно представлять как ",[5015,5312,5313],{},"tuple"," из 9 чисел ",[5015,5316,5317],{},"0..8"," (где ",[5015,5320,343],{}," — пустая клетка) — это даёт хешируемый ключ для словаря посещённых состояний. Целевое состояние стандартное: ",[5015,5323,5324],{},"(1,2,3,4,5,6,7,8,0)",". Из текущего состояния порождаются от 2 до 4 потомков перемещением пустой клетки на одну позицию вверх\u002Fвниз\u002Fвлево\u002Fвправо.",[15,5327,5328,5329,5375,5376,5426,5427,5844],{},"Манхэттенское расстояние для «восьмёрки» вычисляется как сумма по всем фишкам ",[40,5330,5332,5351],{"className":5331},[43],[40,5333,5335],{"className":5334},[47],[49,5336,5337],{"xmlns":51},[53,5338,5339,5348],{},[56,5340,5341,5343,5345],{},[59,5342,336],{},[63,5344,931],{},[59,5346,5347],{},"8",[69,5349,5350],{"encoding":71},"1\\ldots 8",[40,5352,5354],{"className":5353,"ariaHidden":77},[76],[40,5355,5357,5360,5363,5366,5369,5372],{"className":5356},[81],[40,5358],{"className":5359,"style":109},[85],[40,5361,336],{"className":5362},[90],[40,5364],{"className":5365,"style":201},[94],[40,5367,931],{"className":5368},[1049],[40,5370],{"className":5371,"style":201},[94],[40,5373,5347],{"className":5374},[90]," модуля разности их фактических и целевых координат в сетке ",[40,5377,5379,5396],{"className":5378},[43],[40,5380,5382],{"className":5381},[47],[49,5383,5384],{"xmlns":51},[53,5385,5386,5394],{},[56,5387,5388,5390,5392],{},[59,5389,61],{},[63,5391,65],{},[59,5393,61],{},[69,5395,5279],{"encoding":71},[40,5397,5399,5417],{"className":5398,"ariaHidden":77},[76],[40,5400,5402,5405,5408,5411,5414],{"className":5401},[81],[40,5403],{"className":5404,"style":86},[85],[40,5406,61],{"className":5407},[90],[40,5409],{"className":5410,"style":95},[94],[40,5412,65],{"className":5413},[99],[40,5415],{"className":5416,"style":95},[94],[40,5418,5420,5423],{"className":5419},[81],[40,5421],{"className":5422,"style":109},[85],[40,5424,61],{"className":5425},[90],": ",[40,5428,5430,5509],{"className":5429},[43],[40,5431,5433],{"className":5432},[47],[49,5434,5435],{"xmlns":51},[53,5436,5437,5506],{},[56,5438,5439,5441,5443,5445,5447,5449,5457,5459,5462,5469,5471,5480,5482,5484,5486,5492,5494,5502,5504],{},[134,5440,3309],{},[63,5442,2129],{"stretchy":131},[134,5444,940],{},[63,5446,2138],{"stretchy":131},[63,5448,143],{},[411,5450,5451,5454],{},[63,5452,5453],{},"∑",[134,5455,5456],{},"i",[63,5458,2129],{"stretchy":131},[134,5460,5461],{"mathvariant":136},"∣",[411,5463,5464,5467],{},[134,5465,5466],{},"r",[134,5468,5456],{},[63,5470,2710],{},[5472,5473,5474,5476,5478],"msubsup",{},[134,5475,5466],{},[134,5477,5456],{},[63,5479,500],{},[134,5481,5461],{"mathvariant":136},[63,5483,1986],{},[134,5485,5461],{"mathvariant":136},[411,5487,5488,5490],{},[134,5489,4189],{},[134,5491,5456],{},[63,5493,2710],{},[5472,5495,5496,5498,5500],{},[134,5497,4189],{},[134,5499,5456],{},[63,5501,500],{},[134,5503,5461],{"mathvariant":136},[63,5505,2138],{"stretchy":131},[69,5507,5508],{"encoding":71},"h(n) = \\sum_i (|r_i - r_i^*| + |c_i - c_i^*|)",[40,5510,5512,5539,5650,5722,5780],{"className":5511,"ariaHidden":77},[76],[40,5513,5515,5518,5521,5524,5527,5530,5533,5536],{"className":5514},[81],[40,5516],{"className":5517,"style":166},[85],[40,5519,3309],{"className":5520},[90,437],[40,5522,2129],{"className":5523},[615],[40,5525,940],{"className":5526},[90,437],[40,5528,2138],{"className":5529},[173],[40,5531],{"className":5532,"style":181},[94],[40,5534,143],{"className":5535},[185],[40,5537],{"className":5538,"style":181},[94],[40,5540,5542,5546,5593,5596,5599,5641,5644,5647],{"className":5541},[81],[40,5543],{"className":5544,"style":5545},[85],"height:1.0497em;vertical-align:-0.2997em;",[40,5547,5550,5556],{"className":5548},[5549],"mop",[40,5551,5453],{"className":5552,"style":5555},[5549,5553,5554],"op-symbol","small-op","position:relative;top:0em;",[40,5557,5559],{"className":5558},[347],[40,5560,5562,5584],{"className":5561},[351,444],[40,5563,5565,5581],{"className":5564},[355],[40,5566,5569],{"className":5567,"style":5568},[359],"height:0.162em;",[40,5570,5572,5575],{"style":5571},"top:-2.4003em;margin-left:0em;margin-right:0.05em;",[40,5573],{"className":5574,"style":367},[366],[40,5576,5578],{"className":5577},[371,372,373,374],[40,5579,5456],{"className":5580},[90,437,374],[40,5582,468],{"className":5583},[467],[40,5585,5587],{"className":5586},[355],[40,5588,5591],{"className":5589,"style":5590},[359],"height:0.2997em;",[40,5592],{},[40,5594,2129],{"className":5595},[615],[40,5597,5461],{"className":5598},[90],[40,5600,5602,5605],{"className":5601},[90],[40,5603,5466],{"className":5604,"style":2155},[90,437],[40,5606,5608],{"className":5607},[347],[40,5609,5611,5633],{"className":5610},[351,444],[40,5612,5614,5630],{"className":5613},[355],[40,5615,5618],{"className":5616,"style":5617},[359],"height:0.3117em;",[40,5619,5621,5624],{"style":5620},"top:-2.55em;margin-left:-0.0278em;margin-right:0.05em;",[40,5622],{"className":5623,"style":367},[366],[40,5625,5627],{"className":5626},[371,372,373,374],[40,5628,5456],{"className":5629},[90,437,374],[40,5631,468],{"className":5632},[467],[40,5634,5636],{"className":5635},[355],[40,5637,5639],{"className":5638,"style":475},[359],[40,5640],{},[40,5642],{"className":5643,"style":95},[94],[40,5645,2710],{"className":5646},[99],[40,5648],{"className":5649,"style":95},[94],[40,5651,5653,5657,5710,5713,5716,5719],{"className":5652},[81],[40,5654],{"className":5655,"style":5656},[85],"height:1.0087em;vertical-align:-0.2587em;",[40,5658,5660,5663],{"className":5659},[90],[40,5661,5466],{"className":5662,"style":2155},[90,437],[40,5664,5666],{"className":5665},[347],[40,5667,5669,5701],{"className":5668},[351,444],[40,5670,5672,5698],{"className":5671},[355],[40,5673,5675,5687],{"className":5674,"style":513},[359],[40,5676,5678,5681],{"style":5677},"top:-2.4413em;margin-left:-0.0278em;margin-right:0.05em;",[40,5679],{"className":5680,"style":367},[366],[40,5682,5684],{"className":5683},[371,372,373,374],[40,5685,5456],{"className":5686},[90,437,374],[40,5688,5689,5692],{"style":362},[40,5690],{"className":5691,"style":367},[366],[40,5693,5695],{"className":5694},[371,372,373,374],[40,5696,500],{"className":5697},[99,374],[40,5699,468],{"className":5700},[467],[40,5702,5704],{"className":5703},[355],[40,5705,5708],{"className":5706,"style":5707},[359],"height:0.2587em;",[40,5709],{},[40,5711,5461],{"className":5712},[90],[40,5714],{"className":5715,"style":95},[94],[40,5717,1986],{"className":5718},[99],[40,5720],{"className":5721,"style":95},[94],[40,5723,5725,5728,5731,5771,5774,5777],{"className":5724},[81],[40,5726],{"className":5727,"style":166},[85],[40,5729,5461],{"className":5730},[90],[40,5732,5734,5737],{"className":5733},[90],[40,5735,4189],{"className":5736},[90,437],[40,5738,5740],{"className":5739},[347],[40,5741,5743,5763],{"className":5742},[351,444],[40,5744,5746,5760],{"className":5745},[355],[40,5747,5749],{"className":5748,"style":5617},[359],[40,5750,5751,5754],{"style":454},[40,5752],{"className":5753,"style":367},[366],[40,5755,5757],{"className":5756},[371,372,373,374],[40,5758,5456],{"className":5759},[90,437,374],[40,5761,468],{"className":5762},[467],[40,5764,5766],{"className":5765},[355],[40,5767,5769],{"className":5768,"style":475},[359],[40,5770],{},[40,5772],{"className":5773,"style":95},[94],[40,5775,2710],{"className":5776},[99],[40,5778],{"className":5779,"style":95},[94],[40,5781,5783,5786,5838,5841],{"className":5782},[81],[40,5784],{"className":5785,"style":5656},[85],[40,5787,5789,5792],{"className":5788},[90],[40,5790,4189],{"className":5791},[90,437],[40,5793,5795],{"className":5794},[347],[40,5796,5798,5830],{"className":5797},[351,444],[40,5799,5801,5827],{"className":5800},[355],[40,5802,5804,5816],{"className":5803,"style":513},[359],[40,5805,5807,5810],{"style":5806},"top:-2.4413em;margin-left:0em;margin-right:0.05em;",[40,5808],{"className":5809,"style":367},[366],[40,5811,5813],{"className":5812},[371,372,373,374],[40,5814,5456],{"className":5815},[90,437,374],[40,5817,5818,5821],{"style":362},[40,5819],{"className":5820,"style":367},[366],[40,5822,5824],{"className":5823},[371,372,373,374],[40,5825,500],{"className":5826},[99,374],[40,5828,468],{"className":5829},[467],[40,5831,5833],{"className":5832},[355],[40,5834,5836],{"className":5835,"style":5707},[359],[40,5837],{},[40,5839,5461],{"className":5840},[90],[40,5842,2138],{"className":5843},[173],". Пустая клетка в сумму не входит. Эта эвристика допустима и состоятельна.",[15,5846,5847],{},"Продукционное правило — пара «условие → заключение», где условие — конъюнкция фактов, заключение — единичный факт. База знаний — множество правил и множество известных фактов. Прямой вывод многократно проходит по правилам, активируя те, у которых выполнены все условия, и добавляя их заключения в факты, до фиксации. Обратный вывод рекурсивно сводит запрашиваемую цель к подцелям-условиям правил, спрашивая у пользователя только те исходные факты, которых не хватает.",[22,5849,5851],{"id":5850},"перечень-оснащения","Перечень оснащения",[1725,5853,5854,5857,5860,5867],{},[1728,5855,5856],{},"Python 3.10 или новее в виртуальном окружении, развёрнутом по практическому занятию 1.",[1728,5858,5859],{},"Jupyter Notebook или эквивалент.",[1728,5861,5862,5863,5866],{},"Стандартная библиотека Python и ",[5015,5864,5865],{},"pandas"," для сводных таблиц; внешних специализированных библиотек поиска не используется.",[1728,5868,5869,5870,5875],{},"Заготовка проекта — каталог ",[916,5871,5873],{"href":5872},"pz-env\u002F",[5015,5874,5872],{}," рядом с этим файлом: интерфейсы алгоритмов поиска, генератор начальных конфигураций «восьмёрки», шаблон базы знаний и валидатор отчёта.",[22,5877,5879],{"id":5878},"порядок-выполнения-работы","Порядок выполнения работы",[27,5881,5883],{"id":5882},"часть-1-алгоритмы-поиска-на-восьмёрке","Часть 1. Алгоритмы поиска на «восьмёрке»",[5885,5886,5888],"h4",{"id":5887},"задание","Задание",[5091,5890,5891,6021,6024,6027,6030],{},[1728,5892,5893,5894,6012,6013,6016,6017,6020],{},"Реализовать общий обход графа состояний параметризованной стратегией извлечения из фронтира: FIFO (BFS), LIFO с ограничением глубины (DLS), итеративное углубление поверх DLS (IDDFS), очередь с приоритетом по ",[40,5895,5897,5937],{"className":5896},[43],[40,5898,5900],{"className":5899},[47],[49,5901,5902],{"xmlns":51},[53,5903,5904,5934],{},[56,5905,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5928,5930,5932],{},[134,5907,3500],{},[63,5909,2129],{"stretchy":131},[134,5911,940],{},[63,5913,2138],{"stretchy":131},[63,5915,143],{},[134,5917,3511],{},[63,5919,2129],{"stretchy":131},[134,5921,940],{},[63,5923,2138],{"stretchy":131},[63,5925,1986],{},[134,5927,3309],{},[63,5929,2129],{"stretchy":131},[134,5931,940],{},[63,5933,2138],{"stretchy":131},[69,5935,5936],{"encoding":71},"f(n) = g(n) + h(n)",[40,5938,5940,5967,5994],{"className":5939,"ariaHidden":77},[76],[40,5941,5943,5946,5949,5952,5955,5958,5961,5964],{"className":5942},[81],[40,5944],{"className":5945,"style":166},[85],[40,5947,3500],{"className":5948,"style":3545},[90,437],[40,5950,2129],{"className":5951},[615],[40,5953,940],{"className":5954},[90,437],[40,5956,2138],{"className":5957},[173],[40,5959],{"className":5960,"style":181},[94],[40,5962,143],{"className":5963},[185],[40,5965],{"className":5966,"style":181},[94],[40,5968,5970,5973,5976,5979,5982,5985,5988,5991],{"className":5969},[81],[40,5971],{"className":5972,"style":166},[85],[40,5974,3511],{"className":5975,"style":3573},[90,437],[40,5977,2129],{"className":5978},[615],[40,5980,940],{"className":5981},[90,437],[40,5983,2138],{"className":5984},[173],[40,5986],{"className":5987,"style":95},[94],[40,5989,1986],{"className":5990},[99],[40,5992],{"className":5993,"style":95},[94],[40,5995,5997,6000,6003,6006,6009],{"className":5996},[81],[40,5998],{"className":5999,"style":166},[85],[40,6001,3309],{"className":6002},[90,437],[40,6004,2129],{"className":6005},[615],[40,6007,940],{"className":6008},[90,437],[40,6010,2138],{"className":6011},[173]," (A* с манхэттенским расстоянием). Запрещено пользоваться сторонними реализациями поиска; стандартные структуры данных (",[5015,6014,6015],{},"collections.deque",", ",[5015,6018,6019],{},"heapq",") — допустимы.",[1728,6022,6023],{},"Реализовать корректное отслеживание посещённых состояний во всех четырёх алгоритмах. Для DFS — с откатом при выходе из ветви, для остальных — глобально.",[1728,6025,6026],{},"Подобрать тестовый набор из пяти начальных конфигураций с заведомо известными длинами оптимальных решений 4, 8, 12, 16 и 20 ходов (из своего варианта; см. § «Варианты заданий»).",[1728,6028,6029],{},"На каждой конфигурации запустить все четыре алгоритма с одинаковым лимитом времени (например, 30 с) и собрать метрики: число раскрытых вершин, длина найденного решения, общее время в секундах, размер фронтира на пике.",[1728,6031,6032],{},"Сложить результаты в таблицу с пятью строками (по конфигурации) и колонками по алгоритмам. Подсчитать среднее по строкам.",[5885,6034,6036],{"id":6035},"результат","Результат",[15,6038,6039,6040,6068],{},"Сводная таблица сравнения и краткий (3–5 предложений на алгоритм) комментарий: какие теоретические свойства подтвердились, какие — нет, и какие наблюдаются расхождения с ",[40,6041,6043,6056],{"className":6042},[43],[40,6044,6046],{"className":6045},[47],[49,6047,6048],{"xmlns":51},[53,6049,6050,6054],{},[56,6051,6052],{},[134,6053,2126],{},[69,6055,2126],{"encoding":71},[40,6057,6059],{"className":6058,"ariaHidden":77},[76],[40,6060,6062,6065],{"className":6061},[81],[40,6063],{"className":6064,"style":717},[85],[40,6066,2126],{"className":6067,"style":2155},[90,437],"-оценками из лекции. Минимум одна конфигурация должна быть такой, на которой DFS не вернул оптимальное решение, а IDDFS — вернул; этот случай прокомментировать отдельно.",[27,6070,6072],{"id":6071},"часть-2-мини-экспертная-система","Часть 2. Мини-экспертная система",[5885,6074,5888],{"id":6075},"задание-1",[5091,6077,6078,6081,6091,6097,6100],{},[1728,6079,6080],{},"Выбрать предметную область из своего варианта (см. § «Варианты заданий»). Сформулировать 8–12 продукционных правил и 5–7 начальных фактов, потенциально доступных через диалог с пользователем.",[1728,6082,6083,6084,6016,6087,6090],{},"Реализовать базу знаний в виде Python-структуры: список правил (каждое — пара «список условий» \u002F «заключение») и множество фактов. Запрещено использовать готовые движки правил (",[5015,6085,6086],{},"durable_rules",[5015,6088,6089],{},"experta"," и т. п.) — реализация целиком собственная.",[1728,6092,6093,6094,1253],{},"Реализовать прямой вывод как функцию, которая многократно проходит по правилам и порождает новые факты до фиксации (нет новых выводов). Запрос недостающих фактов у пользователя реализовать через ",[5015,6095,6096],{},"input()",[1728,6098,6099],{},"Реализовать обратный вывод как рекурсивную функцию, доказывающую заданную цель: цель есть либо в фактах, либо в заключении правила, чьи условия можно доказать рекурсивно, либо запрашивается у пользователя.",[1728,6101,6102],{},"Прогнать систему в двух режимах на трёх сценариях с разным составом исходных фактов. Сценарий 1: все факты, нужные для вывода главной цели, известны; сценарий 2: половина фактов известна, половину придётся запросить; сценарий 3: главная цель недоказуема при имеющихся правилах.",[5885,6104,6036],{"id":6105},"результат-1",[15,6107,6108],{},"Работающая экспертная система с двумя режимами вывода и журнал прогона трёх сценариев в каждом режиме: какие вопросы задавала система, в каком порядке, какое заключение получено. По журналу подсчитать, в каком сценарии у какого режима было меньше запросов к пользователю, и объяснить, почему.",[27,6110,6112],{"id":6111},"часть-3-анализ-результатов-и-формирование-выводов","Часть 3. Анализ результатов и формирование выводов",[15,6114,6115],{},"Завершающий этап. На основании собранных метрик первой части и журналов второй сформулировать в отчёте 3–5 содержательных выводов. Минимальные тезисы, которые должны быть в выводах:",[1725,6117,6118,6121,6124],{},[1728,6119,6120],{},"какая стратегия поиска оказалась предпочтительной для класса задач, на котором проводилось сравнение, и при каких условиях этот выбор изменился бы;",[1728,6122,6123],{},"в каком сценарии прямой вывод имеет преимущество перед обратным и обратно;",[1728,6125,6126],{},"какие практические ограничения подходов на собственном опыте подтвердились (взрыв памяти у BFS, неоптимальность DFS, ручное составление правил у ЭС).",[22,6128,6130],{"id":6129},"эталон-решения","Эталон решения",[15,6132,6133],{},"Эталонные реализации и метрики готовятся преподавателем и в этот документ не выкладываются. Для самопроверки студент сравнивает свои метрики с типичными ориентирами:",[1725,6135,6136,6265,6268,6271],{},[1728,6137,6138,6139,6201,6202,6264],{},"BFS на конфигурации с оптимальной длиной 16 раскрывает порядка ",[40,6140,6142,6160],{"className":6141},[43],[40,6143,6145],{"className":6144},[47],[49,6146,6147],{"xmlns":51},[53,6148,6149,6157],{},[56,6150,6151],{},[288,6152,6153,6155],{},[59,6154,292],{},[59,6156,224],{},[69,6158,6159],{"encoding":71},"10^4",[40,6161,6163],{"className":6162,"ariaHidden":77},[76],[40,6164,6166,6169,6172],{"className":6165},[81],[40,6167],{"className":6168,"style":332},[85],[40,6170,336],{"className":6171},[90],[40,6173,6175,6178],{"className":6174},[90],[40,6176,343],{"className":6177},[90],[40,6179,6181],{"className":6180},[347],[40,6182,6184],{"className":6183},[351],[40,6185,6187],{"className":6186},[355],[40,6188,6190],{"className":6189,"style":332},[359],[40,6191,6192,6195],{"style":362},[40,6193],{"className":6194,"style":367},[366],[40,6196,6198],{"className":6197},[371,372,373,374],[40,6199,224],{"className":6200},[90,374]," вершин; на длине 20 — порядка ",[40,6203,6205,6223],{"className":6204},[43],[40,6206,6208],{"className":6207},[47],[49,6209,6210],{"xmlns":51},[53,6211,6212,6220],{},[56,6213,6214],{},[288,6215,6216,6218],{},[59,6217,292],{},[59,6219,3059],{},[69,6221,6222],{"encoding":71},"10^5",[40,6224,6226],{"className":6225,"ariaHidden":77},[76],[40,6227,6229,6232,6235],{"className":6228},[81],[40,6230],{"className":6231,"style":332},[85],[40,6233,336],{"className":6234},[90],[40,6236,6238,6241],{"className":6237},[90],[40,6239,343],{"className":6240},[90],[40,6242,6244],{"className":6243},[347],[40,6245,6247],{"className":6246},[351],[40,6248,6250],{"className":6249},[355],[40,6251,6253],{"className":6252,"style":332},[359],[40,6254,6255,6258],{"style":362},[40,6256],{"className":6257,"style":367},[366],[40,6259,6261],{"className":6260},[371,372,373,374],[40,6262,3059],{"className":6263},[90,374],". Расхождение в пределах одного порядка укладывается в норму.",[1728,6266,6267],{},"A* с манхэттенским расстоянием на тех же конфигурациях раскрывает на один-два порядка меньше вершин, чем BFS.",[1728,6269,6270],{},"DFS без ограничения глубины может вернуть решение длиной 60–100 ходов даже там, где оптимум — 16; это ожидаемое поведение, не ошибка реализации.",[1728,6272,6273],{},"В прямом выводе при полностью известных фактах ни один вопрос пользователю не задаётся; в обратном — обычно задаются вопросы только по условиям подцелей, попадающих в путь доказательства. Если в обратном выводе задаётся столько же или больше вопросов, чем в прямом, — реализация рекурсии, скорее всего, не использует уже доказанные подцели.",[22,6275,6277],{"id":6276},"варианты-заданий","Варианты заданий",[15,6279,6280],{},"Вариант студента определяется остатком от деления номера в журнале на 5. Внутри части варианты комбинируются (для головоломки — таблица «А», для экспертной системы — таблица «Б»).",[15,6282,6283],{},[386,6284,6285],{},"А. Начальные конфигурации «восьмёрки» (для части 1)",[6287,6288,6289,6303],"table",{},[6290,6291,6292],"thead",{},[6293,6294,6295,6300],"tr",{},[6296,6297,6299],"th",{"align":6298},"center","Вариант",[6296,6301,6302],{},"Конфигурации (порядок чтения слева направо, сверху вниз; 0 — пустая)",[6304,6305,6306,6317,6326,6335,6344],"tbody",{},[6293,6307,6308,6311],{},[6309,6310,343],"td",{"align":6298},[6309,6312,6313,6314],{},"в ",[5015,6315,6316],{},"pz-env\u002Fconfigs\u002Fvar_0.json",[6293,6318,6319,6321],{},[6309,6320,336],{"align":6298},[6309,6322,6313,6323],{},[5015,6324,6325],{},"pz-env\u002Fconfigs\u002Fvar_1.json",[6293,6327,6328,6330],{},[6309,6329,140],{"align":6298},[6309,6331,6313,6332],{},[5015,6333,6334],{},"pz-env\u002Fconfigs\u002Fvar_2.json",[6293,6336,6337,6339],{},[6309,6338,61],{"align":6298},[6309,6340,6313,6341],{},[5015,6342,6343],{},"pz-env\u002Fconfigs\u002Fvar_3.json",[6293,6345,6346,6348],{},[6309,6347,224],{"align":6298},[6309,6349,6313,6350],{},[5015,6351,6352],{},"pz-env\u002Fconfigs\u002Fvar_4.json",[15,6354,6355],{},"Каждый файл варианта содержит пять конфигураций с заведомо известными длинами оптимальных решений 4, 8, 12, 16 и 20 ходов.",[15,6357,6358],{},[386,6359,6360],{},"Б. Предметная область экспертной системы (для части 2)",[6287,6362,6363,6375],{},[6290,6364,6365],{},[6293,6366,6367,6369,6372],{},[6296,6368,6299],{"align":6298},[6296,6370,6371],{},"Область",[6296,6373,6374],{},"Главная цель",[6304,6376,6377,6387,6397,6407,6417],{},[6293,6378,6379,6381,6384],{},[6309,6380,343],{"align":6298},[6309,6382,6383],{},"Диагностика причины «не заводится автомобиль»",[6309,6385,6386],{},"конкретная неисправность (топливо \u002F зажигание \u002F стартер \u002F аккумулятор)",[6293,6388,6389,6391,6394],{},[6309,6390,336],{"align":6298},[6309,6392,6393],{},"Подбор языка программирования под задачу",[6309,6395,6396],{},"один из 4–5 языков",[6293,6398,6399,6401,6404],{},[6309,6400,140],{"align":6298},[6309,6402,6403],{},"Классификация животного по признакам",[6309,6405,6406],{},"конкретный класс\u002Fотряд",[6293,6408,6409,6411,6414],{},[6309,6410,61],{"align":6298},[6309,6412,6413],{},"Помощь библиотекаря: рекомендация раздела каталога",[6309,6415,6416],{},"один из 4–5 разделов",[6293,6418,6419,6421,6424],{},[6309,6420,224],{"align":6298},[6309,6422,6423],{},"Простая диагностика простудных симптомов",[6309,6425,6426],{},"одно из 4–5 заключений с рекомендацией",[15,6428,6429],{},"Состав 8–12 правил и 5–7 фактов студент проектирует самостоятельно. База знаний должна быть нетривиальной: хотя бы одно правило с тремя и более условиями, хотя бы одна цепочка длиной 3 и более правил.",[22,6431,6433],{"id":6432},"форма-отчёта","Форма отчёта",[15,6435,6436,6437,6440],{},"Отчёт сдаётся в виде Jupyter-ноутбука и сопроводительного ",[5015,6438,6439],{},"report.md"," в ветке студента по практическому занятию 2. Помимо общих требований к составу отчёта (см. правила выполнения работ практикума), специфично для этой работы:",[1725,6442,6443,6450,6456],{},[1728,6444,6445,6446,6449],{},"ноутбук ",[5015,6447,6448],{},"01_search.ipynb",": реализации четырёх алгоритмов, прогон на пяти конфигурациях варианта, сводная таблица как pandas DataFrame, текстовый блок с анализом по части 1;",[1728,6451,6445,6452,6455],{},[5015,6453,6454],{},"02_inference.ipynb",": база знаний (правила + начальные факты), реализации прямого и обратного вывода, журналы трёх сценариев в каждом режиме, текстовый блок с анализом по части 2;",[1728,6457,6458,6460],{},[5015,6459,6439],{},": сводные выводы по части 3 (3–5 содержательных тезисов с опорой на конкретные цифры из ноутбуков).",[22,6462,6464],{"id":6463},"контрольные-вопросы","Контрольные вопросы",[5091,6466,6467,6470,6581,6584,6587,6590,6593,6596],{},[1728,6468,6469],{},"Почему BFS оптимален при одинаковой стоимости переходов, а DFS — нет? Что должно поменяться в DFS, чтобы он стал оптимальным?",[1728,6471,6472,6473,6521,6522,6580],{},"У IDDFS и A* пространственная сложность одного порядка — ",[40,6474,6476,6497],{"className":6475},[43],[40,6477,6479],{"className":6478},[47],[49,6480,6481],{"xmlns":51},[53,6482,6483,6495],{},[56,6484,6485,6487,6489,6491,6493],{},[134,6486,2126],{},[63,6488,2129],{"stretchy":131},[134,6490,1784],{},[134,6492,1818],{},[63,6494,2138],{"stretchy":131},[69,6496,2895],{"encoding":71},[40,6498,6500],{"className":6499,"ariaHidden":77},[76],[40,6501,6503,6506,6509,6512,6515,6518],{"className":6502},[81],[40,6504],{"className":6505,"style":166},[85],[40,6507,2126],{"className":6508,"style":2155},[90,437],[40,6510,2129],{"className":6511},[615],[40,6513,1784],{"className":6514},[90,437],[40,6516,1818],{"className":6517},[90,437],[40,6519,2138],{"className":6520},[173],". Какое практическое следствие из этого вытекает для задач с большим ",[40,6523,6525,6542],{"className":6524},[43],[40,6526,6528],{"className":6527},[47],[49,6529,6530],{"xmlns":51},[53,6531,6532,6540],{},[56,6533,6534],{},[288,6535,6536,6538],{},[134,6537,1784],{},[134,6539,1818],{},[69,6541,2422],{"encoding":71},[40,6543,6545],{"className":6544,"ariaHidden":77},[76],[40,6546,6548,6551],{"className":6547},[81],[40,6549],{"className":6550,"style":2177},[85],[40,6552,6554,6557],{"className":6553},[90],[40,6555,1784],{"className":6556},[90,437],[40,6558,6560],{"className":6559},[347],[40,6561,6563],{"className":6562},[351],[40,6564,6566],{"className":6565},[355],[40,6567,6569],{"className":6568,"style":2177},[359],[40,6570,6571,6574],{"style":362},[40,6572],{"className":6573,"style":367},[366],[40,6575,6577],{"className":6576},[371,372,373,374],[40,6578,1818],{"className":6579},[90,437,374],"?",[1728,6582,6583],{},"Эвристика «число фишек не на своих местах» доминируется манхэттенским расстоянием. Можно ли построить ещё более сильную допустимую эвристику для «восьмёрки» — и какой ценой?",[1728,6585,6586],{},"В чём разница между «допустимостью» и «состоятельностью» эвристики? Приведите пример эвристики, допустимой, но не состоятельной.",[1728,6588,6589],{},"В каком классе сценариев обратный вывод задаёт меньше вопросов пользователю, чем прямой? Поясните на материале своего варианта.",[1728,6591,6592],{},"Что такое «комбинаторный взрыв» в продукционной системе и какие меры на практике используют для его сдерживания?",[1728,6594,6595],{},"Может ли A* с недопустимой эвристикой найти оптимальное решение? Если да, то при каких условиях; если нет, то почему?",[1728,6597,6598],{},"Как изменится поведение прямого вывода, если в правиле случайно поменять местами условие и заключение?",{"title":5017,"searchDepth":5120,"depth":5120,"links":6600},[6601,6602,6603,6604,6605,6610,6611,6612,6613],{"id":5169,"depth":5120,"text":5170},{"id":5179,"depth":5120,"text":5180},{"id":5248,"depth":5120,"text":5249},{"id":5850,"depth":5120,"text":5851},{"id":5878,"depth":5120,"text":5879,"children":6606},[6607,6608,6609],{"id":5882,"depth":5125,"text":5883},{"id":6071,"depth":5125,"text":6072},{"id":6111,"depth":5125,"text":6112},{"id":6129,"depth":5120,"text":6130},{"id":6276,"depth":5120,"text":6277},{"id":6432,"depth":5120,"text":6433},{"id":6463,"depth":5120,"text":6464},{},"\u002Fcourses\u002Faidt-iot-mii\u002Ftopic-02-pz","pz",{"title":5147,"description":5017},"courses\u002Faidt-iot-mii\u002Ftopic-02-pz","EU-CX7ZOPTBXuU4rzbKG9GZiuPb8KY9n76VwVFRHeZg",{"id":6621,"title":6622,"body":6623,"course_slug":5133,"description":5017,"env_label":5134,"env_url":5134,"extension":5135,"group":6648,"is_course_project":5136,"is_index":5138,"level":6649,"meta":6650,"navigation":5138,"path":6674,"section":5134,"seo":6675,"stem":6676,"topic_number":5134,"topic_slug":5134,"__hash__":6677},"courses\u002Fcourses\u002Faidt-iot-mii\u002Findex.md","Методы искусственного интеллекта",{"type":8,"value":6624,"toc":6645},[6625,6629],[22,6626,6628],{"id":6627},"документы","Документы",[1725,6630,6631,6638],{},[1728,6632,6633,6634,1253],{},"Требования к содержанию и оформлению — ",[916,6635,6637],{"href":6636},".\u002Fshared\u002FSTYLEGUIDE","shared\u002FSTYLEGUIDE.md",[1728,6639,6640,6641,1253],{},"Содержание курса — ",[916,6642,6644],{"href":6643},".\u002Ftopics","topics.md",{"title":5017,"searchDepth":5120,"depth":5120,"links":6646},[6647],{"id":6627,"depth":5120,"text":6628},"iot","бакалавриат",{"topics_count":6651,"has_lr":5138,"has_pz":5138,"has_course_project":5136,"final_assessment":5017,"tech_focus":6652,"kind":6653,"authors":6654,"publication":6665,"annotation":6673},9,"scikit-learn, Keras\u002FTensorFlow, Hugging Face","Учебное пособие",[6655,6660],{"last_name":6656,"first_name":6657,"patronymic":6658,"role":6659,"affiliation":5017},"Корчагин","Сергей","Геннадьевич","автор",{"last_name":6661,"first_name":6662,"patronymic":6663,"role":6659,"affiliation":6664},"Рындин","Никита","Александрович","ВГТУ",{"city":6666,"year":6667,"founder":6668,"publisher":6669,"udk":5017,"bbk":5017,"shelf_mark":5017,"isbn":5017,"approval_body":6672},"Воронеж",2026,"Министерство науки и высшего образования Российской Федерации",{"short":6664,"full":6670,"address":6671},"Федеральное государственное бюджетное образовательное учреждение высшего образования «Воронежский государственный технический университет»\n","394026, Воронеж, Московский проспект, 14","Издается по решению редакционно-издательского совета\nВоронежского государственного технического университета\n","Учебное пособие охватывает основные методы искусственного интеллекта:\nклассические алгоритмы поиска и логического вывода, постановку задач\nмашинного обучения, классические алгоритмы классификации и регрессии,\nобучение без учителя, методологию оценки и выбора моделей, нейронные\nсети и обработку естественного языка с применением современных\nпредобученных моделей.\n\nПредназначено для студентов бакалавриата, изучающих дисциплины\n«Методы искусственного интеллекта» и смежные курсы по машинному\nобучению. Предполагается базовое владение языком Python и навыки\nпредварительной обработки данных.","\u002Fcourses\u002Faidt-iot-mii",{"title":6622,"description":5017},"courses\u002Faidt-iot-mii\u002Findex","piE67Aq1EFie5slrRu4oHnVNvzYsc6XAWuF13eVVSic",1779455410590]