Answer :
The usage of the N-Queens problem solver using the Differential Evolution algorithm combined with the Backtracking algorithm in Python:
python
import random
def is_safe(board, row, col, N):
# Check the row on the left side
for i in range(col):
if board[row][i] == 1:
return False
# Check the upper diagonal on the left side
i, j = row, col
while i >= 0 and j >= 0:
if board[i][j] == 1:
return False
i -= 1
j -= 1
# Check the lower diagonal on the left side
i, j = row, col
while i < N and j >= 0:
if board[i][j] == 1:
return False
i += 1
j -= 1
return True
def print_solution(board):
N = len(board)
for i in range(N):
for j in range(N):
print(board[i][j], end=" ")
print()
def differential_evolution(N, population_size, crossover_rate, mutation_rate, max_generations):
population = [[random.randint(0, N - 1) for _ in range(N)] for _ in range(population_size)]
generation = 0
while generation < max_generations:
for i in range(population_size):
candidate = population[i]
random_indexes = random.sample(range(population_size), 3)
a, b, c = population[random_indexes[0]], population[random_indexes[1]], population[random_indexes[2]]
mutated_candidate = [a[q] + mutation_rate * (b[q] - c[q]) for q in range(N)]
crossover = random.random()
crossed_candidate = [
candidate[q] if random.random() < crossover_rate else mutated_candidate[q] for q in range(N)
]
if sum(crossed_candidate) != sum(candidate): # Ensure each candidate has N queens
continue
if is_safe([[0] * N for _ in range(N)], 0, crossed_candidate[0], N):
population[i] = crossed_candidate
generation += 1
return population
def backtracking(N, population):
for i in range(len(population)):
board = [[0] * N for _ in range(N)]
for j in range(N):
board[j][population[i][j]] = 1
if is_solution(board, N):
return board
return None
def is_solution(board, N):
for i in range(N):
if sum(board[i]) != 1:
return False
return True
def solve_n_queens(N, population_size, crossover_rate, mutation_rate, max_generations):
population = differential_evolution(N, population_size, crossover_rate, mutation_rate, max_generations)
solution = backtracking(N, population)
if solution is None:
print("No solution found.")
else:
print("Solution:")
print_solution(solution)
# Example usage
N = 8
population_size = 100
crossover_rate = 0.8
mutation_rate = 0.2
max_generations = 100
solve_n_queens(N, population_size, crossover_rate, mutation_rate, max_generations)
What is the Python code
The above code uses an algorithm called Differential Evolution to create a group of possible solutions. After that, it uses the Backtracking algorithm to examine each possible solution and determine if it meets the conditions of the N-Queens problem.
So, one can change the values of N (the size of the chessboard), population_size, crossover_rate, mutation_rate, and max_generations as per one's requirements.
Learn more about Backtracking Algorithm on:
https://brainly.com/question/30035219
#SPJ1