8-queen problem using hill-climbing in python github

tinyrabbit631

New member
#8-HEMEN VẤN ĐỘNG

Vấn đề 8 người là một vấn đề nổi tiếng NP-Hard trong tối ưu hóa tổ hợp.Đó là một phần mở rộng của vấn đề 8-Queens, trong đó mục tiêu là đặt tám nữ hoàng lên bàn cờ để không có hai nữ hoàng nào tấn công nhau.Trong vấn đề 8 người, các nữ hoàng được phép tấn công nhau theo đường chéo cũng như theo chiều ngang và chiều dọc.

Vấn đề 8 người là một vấn đề khó giải quyết và không có thuật toán thời gian đa thức nào được biết đến để tìm giải pháp.Tuy nhiên, có một số thuật toán heuristic có thể được sử dụng để tìm các giải pháp gần đúng.Một thuật toán như vậy là leo đồi.

Hill Climbing là một thuật toán tìm kiếm cục bộ bắt đầu bằng một giải pháp ngẫu nhiên và sau đó lặp đi lặp lại giải pháp bằng cách thực hiện các thay đổi nhỏ.Thuật toán chấm dứt khi nó đạt đến tối ưu cục bộ, đây là một giải pháp không thể cải thiện bằng cách thực hiện bất kỳ thay đổi nào.

Có thể sử dụng leo đồi để giải quyết vấn đề 8 người đàn ông bằng cách bắt đầu với một vị trí ngẫu nhiên của các nữ hoàng và sau đó lặp đi lặp lại các thay đổi nhỏ cho vị trí cho đến khi đạt được tối ưu cục bộ.Tối ưu cục bộ có thể không phải là tối ưu toàn cầu, nhưng nó thường là một xấp xỉ tốt.

Mã Python sau đây thực hiện thuật toán leo đồi để giải quyết vấn đề 8 người:

`` `Python
def hill_climbing (bảng):
"" "
Giải quyết vấn đề 8 người bằng cách sử dụng leo đồi.

Args:
Bảng: Một mảng 8x8 đại diện cho vị trí ban đầu của các nữ hoàng.

Trả lại:
Một mảng 8x8 đại diện cho vị trí tốt nhất của các nữ hoàng được tìm thấy bởi thuật toán.
"" "

# Khởi tạo giải pháp tốt nhất được tìm thấy cho đến nay.
best_board = bảng

# Lặp lại cho đến khi đạt được tối ưu cục bộ.
Trong khi đúng:
# Tạo một giải pháp mới bằng cách thực hiện một thay đổi nhỏ cho giải pháp hiện tại.
new_board = make_random_change (bảng)

# Kiểm tra xem giải pháp mới có tốt hơn giải pháp tốt nhất được tìm thấy cho đến nay không.
Nếu is_better (new_board, best_board):
# Cập nhật giải pháp tốt nhất được tìm thấy cho đến nay.
best_board = new_board
khác:
# Giải pháp mới không tốt hơn giải pháp tốt nhất được tìm thấy cho đến nay, vì vậy hãy dừng lặp lại.
phá vỡ

# Trả lại giải pháp tốt nhất được tìm thấy.
trả về best_board

`` `

Hàm `hill_climbing ()` mất một mảng 8x8 đại diện cho vị trí ban đầu của nữ hoàng làm đầu vào và trả về một mảng 8x8 đại diện cho vị trí tốt nhất của các nữ hoàng được tìm thấy bởi thuật toán.

Hàm `make_random_change ()` có một mảng 8x8 đại diện cho một vị trí của nữ hoàng và trả về một mảng 8x8 mới đại diện cho một vị trí mới của các nữ hoàng thu được bằng cách thực hiện một thay đổi nhỏ cho vị trí ban đầu.

Hàm `is_better ()` mất hai mảng 8x8 đại diện cho hai vị trí của nữ hoàng và trả về giá trị boolean cho biết liệu vị trí thứ nhất có tốt hơn vị trí thứ hai hay không.

Mã sau đây cho thấy cách sử dụng hàm `hill_climbing ()` để giải quyết vấn đề 8 người đàn ông:

`` `Python
# Tạo một vị trí ban đầu của Nữ hoàng.
board = [[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0
=======================================
#8-Hemen Problem #Hill-Climbing #Python #github ## 8-Hemen Problem using Hill-Climbing in Python

The 8-Hemen problem is a well-known NP-hard problem in combinatorial optimization. It is an extension of the 8-Queens problem, where the goal is to place eight queens on a chessboard so that no two queens attack each other. In the 8-Hemen problem, the queens are allowed to attack each other diagonally as well as horizontally and vertically.

The 8-Hemen problem is a difficult problem to solve, and there is no known polynomial-time algorithm for finding a solution. However, there are a number of heuristic algorithms that can be used to find approximate solutions. One such algorithm is hill-climbing.

Hill-climbing is a local search algorithm that starts with a random solution and then iteratively improves the solution by making small changes. The algorithm terminates when it reaches a local optimum, which is a solution that cannot be improved by making any single change.

Hill-climbing can be used to solve the 8-Hemen problem by starting with a random placement of the queens and then iteratively making small changes to the placement until a local optimum is reached. The local optimum may not be the global optimum, but it is often a good approximation.

The following Python code implements a hill-climbing algorithm for solving the 8-Hemen problem:

```python
def hill_climbing(board):
"""
Solves the 8-Hemen problem using hill-climbing.

Args:
board: A 8x8 array representing the initial placement of the queens.

Returns:
A 8x8 array representing the best placement of the queens found by the algorithm.
"""

# Initialize the best solution found so far.
best_board = board

# Iterate until a local optimum is reached.
while True:
# Create a new solution by making a small change to the current solution.
new_board = make_random_change(board)

# Check if the new solution is better than the best solution found so far.
if is_better(new_board, best_board):
# Update the best solution found so far.
best_board = new_board
else:
# The new solution is not better than the best solution found so far, so stop iterating.
break

# Return the best solution found.
return best_board

```

The function `hill_climbing()` takes a 8x8 array representing the initial placement of the queens as input and returns a 8x8 array representing the best placement of the queens found by the algorithm.

The function `make_random_change()` takes a 8x8 array representing a placement of the queens and returns a new 8x8 array representing a new placement of the queens that is obtained by making a small change to the original placement.

The function `is_better()` takes two 8x8 arrays representing two placements of the queens and returns a boolean value indicating whether the first placement is better than the second placement.

The following code shows how to use the `hill_climbing()` function to solve the 8-Hemen problem:

```python
# Create an initial placement of the queens.
board = [[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0
 
Join ToolsKiemTrieuDoGroup
Back
Top
AdBlock Detected

We get it, advertisements are annoying!

Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.

I've Disabled AdBlock