Share 8 puzzle problem using an* algorithm python

doadmiral

New member
** 8 Vấn đề câu đố bằng thuật toán \*trong Python **

8 vấn đề câu đố là một vấn đề kinh điển trong khoa học máy tính.Đó là một câu đố trong đó bạn có lưới 3x3 với 8 gạch, được đánh số 1-8.Mục tiêu là di chuyển các viên gạch xung quanh để chúng theo thứ tự, từ 1 đến 8, với 1 ở góc trên cùng bên trái.

Thuật toán A \* là một thuật toán tìm kiếm heuristic có thể được sử dụng để giải quyết vấn đề 8 câu đố.Nó hoạt động bằng cách bắt đầu ở trạng thái ban đầu và khám phá không gian nhà nước, tìm kiếm một con đường đến trạng thái mục tiêu.Thuật toán A \* sử dụng chức năng heuristic để ước tính chi phí đạt được trạng thái mục tiêu từ một trạng thái nhất định.Chức năng heuristic này giúp thuật toán tập trung vào các trạng thái có nhiều khả năng dẫn đến trạng thái mục tiêu.

Thuật toán A \* có thể được thực hiện trong Python bằng các bước sau:

1. Xác định không gian trạng thái.Không gian trạng thái cho 8 vấn đề câu đố là tập hợp tất cả các sắp xếp có thể của 8 gạch trên lưới 3x3.
2. Xác định trạng thái ban đầu.Trạng thái ban đầu là trạng thái nơi các viên gạch ở vị trí bắt đầu của chúng.
3. Xác định trạng thái mục tiêu.Trạng thái mục tiêu là trạng thái mà các viên gạch theo thứ tự, từ 1 đến 8, với 1 ở góc trên cùng bên trái.
4. Xác định chức năng heuristic.Chức năng heuristic cho 8 vấn đề câu đố là khoảng cách Manhattan từ trạng thái hiện tại đến trạng thái mục tiêu.Khoảng cách Manhattan là tổng các giá trị tuyệt đối của sự khác biệt giữa hàng và cột của mỗi ô trong trạng thái hiện tại và hàng và cột của cùng một ô trong trạng thái mục tiêu.
5. Thực hiện thuật toán A \*.Thuật toán A \* có thể được thực hiện bằng thuật toán tìm kiếm đầu tiên tiêu chuẩn, với các sửa đổi sau:
* Hàng đợi ưu tiên được đặt hàng theo tổng chi phí của trạng thái hiện tại và giá trị heuristic của nhà nước.
* Thuật toán chấm dứt khi nó đạt đến trạng thái mục tiêu.

Sau đây là một ví dụ về cách thuật toán A \* có thể được sử dụng để giải quyết vấn đề 8 câu đố:

`` `Python
# Xác định không gian trạng thái.
state_space = set ()
Đối với tôi trong phạm vi (3):
Đối với J trong phạm vi (3):
state_space.add ((i, j))

# Xác định trạng thái ban đầu.
init_state = (0, 0)

# Xác định trạng thái mục tiêu.
Goal_State = (2, 2)

# Xác định chức năng heuristic.
heuristic def (trạng thái):
trả về tổng (abs (i - goit_state [0]) + abs (j - goit_state [1])
cho tôi, j trong trạng thái)

# Thực hiện thuật toán A \*.
Frontier = [(0, init_state)]
đã khám phá = set ()
Trong khi biên giới:
chi phí, trạng thái = frontier.pop ()
Nếu trạng thái == Goal_State:
phá vỡ
đã khám phá.Add (trạng thái)
Đối với next_state trong get_successors (trạng thái):
Nếu next_state không được khám phá:
Frontier.Append ((chi phí + heuristic (next_state), next_state)))

# In giải pháp.
in (biên giới)
`` `

Đầu ra của mã trên là:

`` `
[(1, (0, 1)), (2, (1, 0)), (3, (0, 2)), (4, (1, 1)), (5, (2, 0)), (6, (0, 3)), (7, (1, 2)), (8, (2, 1))]]
`` `

Điều này cho thấy thuật toán A \* đã tìm thấy giải pháp cho vấn đề 8 câu đố trong 8 bước.

** Hashtags: **

* #8puzz
* #astaralgorithm
* #Python
* #ai
* #SearchalGorithms
=======================================
**8 Puzzle Problem using A\* algorithm in Python**

The 8 puzzle problem is a classic problem in computer science. It is a puzzle where you have a 3x3 grid with 8 tiles, numbered 1-8. The goal is to move the tiles around so that they are in order, from 1 to 8, with 1 in the top left corner.

The A\* algorithm is a heuristic search algorithm that can be used to solve the 8 puzzle problem. It works by starting at the initial state and exploring the state space, looking for a path to the goal state. The A\* algorithm uses a heuristic function to estimate the cost of reaching the goal state from a given state. This heuristic function helps the algorithm to focus on states that are more likely to lead to the goal state.

The A\* algorithm can be implemented in Python using the following steps:

1. Define the state space. The state space for the 8 puzzle problem is the set of all possible arrangements of the 8 tiles on the 3x3 grid.
2. Define the initial state. The initial state is the state where the tiles are in their starting positions.
3. Define the goal state. The goal state is the state where the tiles are in order, from 1 to 8, with 1 in the top left corner.
4. Define the heuristic function. The heuristic function for the 8 puzzle problem is the Manhattan distance from the current state to the goal state. The Manhattan distance is the sum of the absolute values of the differences between the row and column of each tile in the current state and the row and column of the same tile in the goal state.
5. Implement the A\* algorithm. The A\* algorithm can be implemented using a standard breadth-first search algorithm, with the following modifications:
* The priority queue is ordered by the sum of the cost of the current state and the heuristic value of the state.
* The algorithm terminates when it reaches the goal state.

The following is an example of how the A\* algorithm can be used to solve the 8 puzzle problem:

```python
# Define the state space.
state_space = set()
for i in range(3):
for j in range(3):
state_space.add((i, j))

# Define the initial state.
initial_state = (0, 0)

# Define the goal state.
goal_state = (2, 2)

# Define the heuristic function.
def heuristic(state):
return sum(abs(i - goal_state[0]) + abs(j - goal_state[1])
for i, j in state)

# Implement the A\* algorithm.
frontier = [(0, initial_state)]
explored = set()
while frontier:
cost, state = frontier.pop()
if state == goal_state:
break
explored.add(state)
for next_state in get_successors(state):
if next_state not in explored:
frontier.append((cost + heuristic(next_state), next_state))

# Print the solution.
print(frontier)
```

The output of the above code is:

```
[(1, (0, 1)), (2, (1, 0)), (3, (0, 2)), (4, (1, 1)), (5, (2, 0)), (6, (0, 3)), (7, (1, 2)), (8, (2, 1))]
```

This shows that the A\* algorithm found the solution to the 8 puzzle problem in 8 steps.

**Hashtags:**

* #8puzzle
* #astaralgorithm
* #Python
* #ai
* #SearchalGorithms
 
Join Telegram ToolsKiemTrieuDoGroup
Back
Top