国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

人工智能之A*算法求解

這篇具有很好參考價值的文章主要介紹了人工智能之A*算法求解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實驗?zāi)康?/h3>

熟悉和掌握啟發(fā)式搜索的定義、估價函數(shù)和算法過程

實驗平臺

Python 3.7 +

實驗要求

熟練掌握A*算法的基本原理。分析不同啟發(fā)式函數(shù)對問題求解的提升效果。

  1. 實現(xiàn)A*算法的求解,要求設(shè)計兩種不同的估價函數(shù):設(shè)置相同的初始狀態(tài)和目標(biāo)狀態(tài),針對不同估價函數(shù),求得問題的屆,比較它們對搜索算法性能的影響,包括擴展節(jié)點數(shù)、生成節(jié)點數(shù)、運行時間等。
  2. 畫出流程圖。
  3. 源程序代碼

實驗結(jié)果(可以包含數(shù)據(jù)集分析、實驗過程、結(jié)果截圖、結(jié)果分析等)

  • 八數(shù)碼問題
  1. 不同的估價函數(shù)對搜索算法性能的影響

(1)、曼哈頓距離:曼哈頓距離是八數(shù)碼問題中常用的估價函數(shù)之一。在這個算法中,每個狀態(tài)都會計算曼哈頓距離,并將距離加入優(yōu)先隊列中。曼哈頓距離具有良好的準(zhǔn)確性和高效性,因此在這個算法中表現(xiàn)良好。

(2)、歐幾里得距離:歐幾里得距離是另一個常用的估價函數(shù)。在這個算法中,每個狀態(tài)都會計算歐幾里得距離,并將距離加入優(yōu)先隊列中。與曼哈頓距離相比,歐幾里得距離可以更好地反映狀態(tài)之間的真實距離,但是由于它需要進行平方根計算,因此計算成本更高。

(3)、切比雪夫距離:切比雪夫距離是一種更為簡單的估價函數(shù),它只需要取兩個狀態(tài)之間橫向和縱向距離的最大值。在這個算法中,每個狀態(tài)都會計算切比雪夫距離,并將距離加入優(yōu)先隊列中。與曼哈頓距離相比,切比雪夫距離更為簡單,計算成本更低,但它可能不如曼哈頓距離那么準(zhǔn)確。

  1. 流程圖

說明曼哈頓距離和不在位數(shù)是否滿足a*條件,分析這兩個不同啟 發(fā)函數(shù)的a*算法性能;,python,算法,開發(fā)語言

源程序代碼

from queue import PriorityQueue

# 定義狀態(tài)類
class State:
??? def __init__(self, board, moves, previous):
??????? self.board = board
??????? self.moves = moves
??????? self.previous = previous

??? # 定義狀態(tài)比較函數(shù),用于在優(yōu)先隊列中比較狀態(tài)
??? def __lt__(self, other):
??????? return self.moves + self.manhattan_distance() < other.moves + other.manhattan_distance()

??? # 計算曼哈頓距離
??? def manhattan_distance(self):
??????? distance = 0
??????? for i in range(3):
??????????? for j in range(3):
??????????????? if self.board[i][j] == 0:
??????????????????? continue
??????????????? x, y = divmod(self.board[i][j] - 1, 3)
??????????????? distance += abs(x - i) + abs(y - j)
??????? return distance

??? # 判斷狀態(tài)是否為目標(biāo)狀態(tài)
??? def is_goal(self):
??????? return self.board == [[1, 2, 3], [4, 5, 6], [7, 8, 0]]

??? # 獲取當(dāng)前狀態(tài)的下一步狀態(tài)
??? def get_next_states(self):
??????? next_states = []
??????? i, j = next((i, j) for i in range(3) for j in range(3) if self.board[i][j] == 0)
??????? for x, y in ((i+1, j), (i-1, j), (i, j+1), (i, j-1)):
??????????? if 0 <= x < 3 and 0 <= y < 3:
??????????????? board = [row[:] for row in self.board]
??????????????? board[i][j], board[x][y] = board[x][y], board[i][j]
??????????????? next_states.append(State(board, self.moves+1, self))
??????? return next_states

??? # 獲取從初始狀態(tài)到達當(dāng)前狀態(tài)的路徑
??? def get_path(self):
??????? path = []
??????? state = self
??????? while state is not None:
??????????? path.append(state)
??????????? state = state.previous
??????? return reversed(path)

# A*搜索算法
def solve(start_board):
??? start_state = State(start_board, 0, None)
??? queue = PriorityQueue()
??? queue.put(start_state)
??? visited = set()
??? while not queue.empty():
??????? state = queue.get()
??????? if state.is_goal():
??????????? return state.get_path()
??????? if tuple(map(tuple, state.board)) in visited:
??????????? continue
??????? visited.add(tuple(map(tuple, state.board)))
??????? for next_state in state.get_next_states():
??????????? queue.put(next_state)

??? return None

# 測試代碼
if __name__ == '__main__':
?? ?start_board = [[1, 2, 3], [4, 5, 6], [0, 7, 8]]
??? path = solve(start_board)
??? if path is None:
??????? print("無解")
??? else:
??????? for i, state in enumerate(path):
??????????? print(f"步驟 {i}:")
??????????? for row in state.board:
??????????????? print(row)


說明曼哈頓距離和不在位數(shù)是否滿足a*條件,分析這兩個不同啟 發(fā)函數(shù)的a*算法性能;,python,算法,開發(fā)語言

  • 5*5迷宮尋路問題
  1. 不同的估價函數(shù)對搜索算法性能的影響

(1)、切比雪夫距離估價函數(shù):對于55迷宮的起點和目標(biāo)點,在網(wǎng)格上可視為同一正方形角落的兩個點。因此,用切比雪夫距離可以輕松快速地計算出任意兩點之間的代價。使用切比雪夫距離作為估價函數(shù)的A算法可以有效地搜索整個網(wǎng)格,直接到達目標(biāo)點,并盡可能少地探索其他節(jié)點。因此,此估價函數(shù)能夠有效地提高搜索算法性能。

(2)、曼哈頓距離估價函數(shù):曼哈頓距離是指兩點之間橫向和縱向的距離之和。在5*5迷宮中,使用曼哈頓距離可以快速估算出兩點之間的代價,但是這種估價方式會導(dǎo)致搜索算法探索更多的區(qū)域,因此相比于切比雪夫距離估價函數(shù),曼哈頓距離估價函數(shù)在搜索算法性能方面稍遜一籌。

(3)、歐幾里得距離估價函數(shù):歐幾里得距離是指兩點之間的直線距離。在5*5迷宮中,使用歐幾里得距離可以準(zhǔn)確地估算出兩點之間的代價,但是此估價方式需要更多的計算資源,因此可能會導(dǎo)致搜索算法性能下降。

綜上所述,在5*5迷宮尋路問題中,估價函數(shù)的選擇對搜索算法性能具有重要影響,切比雪夫距離估價函數(shù)可以在這個問題中提高搜索算法性能。

  1. 流程圖

說明曼哈頓距離和不在位數(shù)是否滿足a*條件,分析這兩個不同啟 發(fā)函數(shù)的a*算法性能;,python,算法,開發(fā)語言

源程序代碼

import numpy as np
import heapq


class Node:
??? def __init__(self, x: int, y: int, parent=None):
??????? self.x = x
??????? self.y = y
??????? self.parent = parent
??????? self.g = 0
??????? self.h = 0

??? def __lt__(self, other):
??????? return self.g + self.h < other.g + other.h


def heuristic(a: tuple, b: tuple) -> int:
??? return abs(b[0] - a[0]) + abs(b[1] - a[1])


def astar(maze: np.array, start: tuple, end: tuple) -> list:
??? open_set = []
??? closed_set = set()
??? start_node = Node(start[0], start[1])
??? end_node = Node(end[0], end[1])
??? heapq.heappush(open_set, start_node)

??? while len(open_set) > 0:
??????? current_node = heapq.heappop(open_set)
??????? if current_node.x == end_node.x and current_node.y == end_node.y:
??????????? path = []
??????????? while current_node is not None:
??????????????? path.append((current_node.x, current_node.y))
??????????????? current_node = current_node.parent
??????????? return path[::-1]
??????? closed_set.add((current_node.x, current_node.y))

??????? for x, y in [(0, -1), (0, 1), (-1, 0), (1, 0)]:
??????????? node = Node(current_node.x + x, current_node.y + y, current_node)
??????????? if node.x < 0 or node.y < 0 or node.x >= maze.shape[0] or node.y >= maze.shape[1]:
???????? ???????continue
??????????? if maze[node.x][node.y] == 1:
??????????????? continue
??????????? if (node.x, node.y) in closed_set:
??????????????? continue
??????????? node.g = current_node.g + 1
??????????? node.h = heuristic((node.x, node.y), (end_node.x, end_node.y))
??????????? heapq.heappush(open_set, node)

??? return None


if __name__ == '__main__':
??? start = (0, 0)
??? end = (4, 4)
??? maze = np.array([
??????? [0, 0, 0, 0, 1],
??????? [1, 1, 1, 0, 1],
??????? [0, 0, 0, 0, 0],
??????? [1, 1, 1, 1, 0],
??????? [1, 1, 1, 1, 0]
??? ])

??? path = astar(maze, start, end)
??? print(path)


說明曼哈頓距離和不在位數(shù)是否滿足a*條件,分析這兩個不同啟 發(fā)函數(shù)的a*算法性能;,python,算法,開發(fā)語言

實驗總結(jié)

通過這次實驗,我掌握了如何使用A*搜索算法解決迷宮問題和八數(shù)碼問題。這是一種常用的人工智能搜索算法,可以用于尋找路徑和規(guī)劃。

在實驗中,首先學(xué)習(xí)了迷宮問題的定義和A算法的基本思路。我們使用Python編寫代碼,在55大小的迷宮中,通過A*算法計算出從起點到終點的最短路徑。其中,需要考慮迷宮的障礙物、每個節(jié)點的代價值和啟發(fā)式函數(shù)等因素,也需要用到優(yōu)先隊列來存儲待擴展的節(jié)點。最后,通過繪制迷宮地圖和標(biāo)注路徑,完成了實驗任務(wù)。

接著,學(xué)習(xí)了八數(shù)碼問題的定義和A算法的適用性。同樣利用Python編寫代碼,通過A算法計算出從初始狀態(tài)到目標(biāo)狀態(tài)的最短路徑。在實驗中,為了提高算法效率和減少搜索深度,設(shè)計了一種簡單而可行的啟發(fā)式函數(shù),并使用優(yōu)先隊列存儲待擴展的節(jié)點,最終完成了實驗任務(wù)。

通過這次實驗,除了掌握了A*搜索算法的應(yīng)用,還進一步了解了Python的函數(shù)定義語法和相關(guān)知識,同時也加深了對算法原理和機制的理解。文章來源地址http://www.zghlxwxcb.cn/news/detail-794498.html

到了這里,關(guān)于人工智能之A*算法求解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【復(fù)習(xí)】人工智能 第六章 搜索求解策略(又多又難)

    【復(fù)習(xí)】人工智能 第六章 搜索求解策略(又多又難)

    在求解一個問題時,涉及到兩個方面: (1)該問題的表示 (2)相對合適的求解方法:由于絕大多數(shù)需要人工智能方法求解的問題缺乏直接求解的方法,因此, 搜索 為一種求解問題的一般方法。 另外如果真的想拿下這一章,還是走一下ppt或書上的八數(shù)碼的對應(yīng)的每一種情況

    2024年01月16日
    瀏覽(32)
  • 人工智能原理實驗4(2)——貝葉斯、決策求解汽車評估數(shù)據(jù)集

    人工智能原理實驗4(2)——貝葉斯、決策求解汽車評估數(shù)據(jù)集

    汽車數(shù)據(jù)集 車子具有 buying,maint,doors,persons,lug_boot and safety六種屬性,而車子的好壞分為uncc,ucc,good and vgood四種。 數(shù)據(jù)預(yù)處理 1.轉(zhuǎn)為數(shù)字編碼 將數(shù)據(jù)集中的中文分類編碼轉(zhuǎn)為數(shù)字編碼,以便更好地訓(xùn)練。這里采用sklearn的LabelEncoder庫進行快速轉(zhuǎn)換。 2.拆分?jǐn)?shù)據(jù)集 按7:3的比例拆

    2024年04月26日
    瀏覽(25)
  • 人工智能_機器學(xué)習(xí)065_SVM支持向量機KKT條件_深度理解KKT條件下的損失函數(shù)求解過程_公式詳細推導(dǎo)_---人工智能工作筆記0105

    人工智能_機器學(xué)習(xí)065_SVM支持向量機KKT條件_深度理解KKT條件下的損失函數(shù)求解過程_公式詳細推導(dǎo)_---人工智能工作筆記0105

    之前我們已經(jīng)說了KKT條件,其實就是用來解決 如何實現(xiàn)對,不等式條件下的,目標(biāo)函數(shù)的求解問題,之前我們說的拉格朗日乘數(shù)法,是用來對 等式條件下的目標(biāo)函數(shù)進行求解. KKT條件是這樣做的,添加了一個阿爾法平方對吧,這個阿爾法平方肯定是大于0的,那么 可以結(jié)合下面的文章去

    2024年02月04日
    瀏覽(26)
  • 【2022級研究生人工智能高級語言程序設(shè)計考試說明】

    考試題共包括4道大題: 第一大題:分類和回歸----(7選1) 第二大題:降維和聚類----(6選1) 第三大題:API調(diào)用(課程中學(xué)習(xí)過的所有云平臺)----(11選1) 第四大題:深度學(xué)習(xí)項目----(10選1) 題目采取隨機分配方式,請查閱 人工智能高級語言程序設(shè)計考試-題目分配表 ,

    2024年02月11日
    瀏覽(99)
  • 【人工智能】神經(jīng)元數(shù)學(xué)模型的基本方程式及其意義詳細說明

    【人工智能】神經(jīng)元數(shù)學(xué)模型的基本方程式及其意義詳細說明

    神經(jīng)元數(shù)學(xué)模型的基本方程式及其意義 在神經(jīng)科學(xué)中,數(shù)學(xué)模型被廣泛應(yīng)用于理解神經(jīng)元及其網(wǎng)絡(luò)的激活、溝通和計算作用。本文將詳細討論一些典型神經(jīng)元數(shù)學(xué)模型的基本方程式及其意義,以表達對神經(jīng)網(wǎng)絡(luò)實現(xiàn)認(rèn)知和行為功能的認(rèn)識。 一、Hodgkin-Huxley 模型

    2024年02月07日
    瀏覽(26)
  • 從 人工智能學(xué)派 視角來看 人工智能算法

    從 人工智能學(xué)派 視角來看 人工智能算法

    當(dāng)今人工智能的算法紛繁復(fù)雜:神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)CNN、遺傳算法、進化策略、知識圖譜、貝葉斯網(wǎng)絡(luò)、支持向量機SVM、強化學(xué)習(xí)、生成對抗網(wǎng)絡(luò)GAN,自編碼器… 如果你把每個算法獨立看待簡直是眼花繚亂,頭都是大的。這次我就帶你理理這些算法,有些算法其實是可以

    2024年03月15日
    瀏覽(37)
  • 【人工智能】深入了解人工智能的核心算法與應(yīng)用實踐

    【人工智能】深入了解人工智能的核心算法與應(yīng)用實踐

    人工智能知識對于當(dāng)今的互聯(lián)網(wǎng)技術(shù)人來說已經(jīng)是剛需。但人工智能的概念、流派、技術(shù)紛繁復(fù)雜,選擇哪本書入門最適合呢? 這部被譽為人工智能“百科全書”的《人工智能(第3版)》,可以作為每個技術(shù)人進入 AI 世界的第一本書。 這本書是美國人工智能領(lǐng)域的權(quán)威經(jīng)典

    2024年02月03日
    瀏覽(159)
  • 高級人工智能之群體智能:粒子群算法

    粒子群優(yōu)化算法(Particle Swarm Optimization, PSO)是一種基于群體協(xié)作和信息共享的優(yōu)化技術(shù)。它由Kennedy和Eberhart于1995年提出,靈感來源于鳥群和魚群的社會行為。PSO是解決連續(xù)空間優(yōu)化問題的有效方法,特別適合于多峰和高維問題。以下是PSO的基本思想和工作原理: 1.1基本思想

    2024年01月18日
    瀏覽(74)
  • 人工智能分類算法概述

    人工智能分類算法概述

    人工智能分類算法是用于將數(shù)據(jù)劃分為不同類別的算法。這些算法通過學(xué)習(xí)數(shù)據(jù)的特征和模式,將輸入數(shù)據(jù)映射到相應(yīng)的類別。分類算法在人工智能中具有廣泛的應(yīng)用,如圖像識別、語音識別、文本分類等。以下是幾種常見的人工智能分類算法的詳細講解過程: 決策樹 決策

    2024年04月11日
    瀏覽(23)
  • 【人工智能】遺傳算法

    【人工智能】遺傳算法

    可以把遺傳算法類比成一個游戲,我們需要通過這個游戲來找到最佳的解決方案。 首先,我們需要創(chuàng)建一些角色(也就是種群),每個角色有自己的裝備和技能(染色體),但是我們并不知道哪個角色更加強大。 然后,我們讓這些角色相互競爭,通過升級、打怪等方式來獲

    2024年02月02日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包