Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

import random from simpleai.search.models import SearchProblem from simpleai.search import breadth _ first, depth _ first, uniform _ cost , limited _ depth _ first, iterative

import random
from simpleai.search.models import SearchProblem
from simpleai.search import breadth_first, depth_first, uniform_cost, limited_depth_first, iterative_limited_depth_first, astar, greedy
class NQueens(SearchProblem):
def __init__(self, N, initial_state=None):
self.N = N
if initial_state is None:
self._set_state()
else:
self.state = tuple(map(int, initial_state))
super().__init__(tuple(self.state)) # Initial state is a tuple of queen positions
def actions(self, state):
return [(i, j) for i in range(1, self.N +1) for j in range(1, self.N +1)]
def result(self, state, action):
i, j = action
new_state = list(state)
new_state[i -1]= j
return tuple(new_state)
def is_goal(self, state):
return self._count_attacking_pairs(state)==0
def heuristic(self, state):
return self._count_attacking_pairs(state)
def generate_random_state(self):
random_state =""
for _ in range(self.N):
str_val = random.randint(1, self.N)
random_state += str(str_val)
return random_state
def _set_state(self):
state_answer = input("Enter 1 for Manual Entrance, 0 for Random State:")
if state_answer =="0":
self.state = self.generate_random_state()
elif state_answer =="1":
state_temp = input("enter state: ")
if self._is_valid(state_temp):
self.state = state_temp
else:
self.state = "wrong state"
else:
self.state = "wrong entry"
def _count_attacking_pairs(self, state):
if self._is_valid(self.state):
attacking_pairs =0
for index, state_indexed in enumerate(state):
for index1, state_indexed1 in enumerate(state):
if index < index1:
coordinate =[index +1, int(state_indexed)]
coordinate_1=[index1+1, int(state_indexed1)]
if (abs(coordinate[0]- coordinate_1[0])== abs(coordinate[1]- coordinate_1[1])) or \
(coordinate[0]== coordinate_1[0]) or (coordinate[1]== coordinate_1[1]):
attacking_pairs +=1
return attacking_pairs
return "Error"
def _is_valid(self, state):
if len(state)!= self.N:
print("The length of the state string is not equal to N.")
return False
for i in range(len(state)):
try:
if not 1<= int(state[i])<= self.N:
print("State string includes numbers greater than N or less than 1.")
return False
except ValueError:
return False
return True
def solve_with_algorithm(self, algorithm):
result=None
algorithm = None
if algorithm_name =='bfs':
algorithm = breadth_first
elif algorithm_name == 'ucs':
algorithm = uniform_cost
elif algorithm_name =='dfs':
algorithm = depth_first
elif algorithm_name =='dls':
limit = int(input("Enter depth limit for DLS: "))
algorithm = limited_depth_first
result = limited_depth_first(self, depth_limit=limit)
elif algorithm_name == 'ids':
algorithm = iterative_limited_depth_first
elif algorithm_name == 'greedy':
algorithm = greedy
elif algorithm_name == 'astar':
algorithm = astar
if algorithm:
problem = NQueens(self.N, self.state)
if result is None:
result = algorithm(problem, graph_search=graph_search)
print(f"
Algorithm: {algorithm_name}")
print(f"Resulting State: {result.state}")
print(f"Resulting Path: {result.path()}")
print(f"Cost: {result.cost}")
if hasattr(result, 'nodes'):
print(f"Viewer Statistics: Max Fringe Size: {result.nodes['max_fringe_size']}, Visited Nodes: {result.nodes['visited_nodes']}")
else:
print("Viewer statistics not available for this algorithm.")
else:
print("Invalid algorithm name. Please enter a valid algorithm.")
if __name__=="__main__":
N = int(input("Enter the size of the chessboard (N): "))
algorithm_name = input("Enter the algorithm name (BFS, UCS, DFS, DLS, IDS, Greedy, A*): ").lower()
graph_search = input("Use graph search? (yes or no): ").lower()== 'yes'
queens_problem = NQueens(N)
queens_problem.solve_with_algorithm(algorithm_name). please add this code block value, mutate and crossover functions and adjust this according to the simpleai library. Add genetic search, hill climbing search and random restarts hill climbing search. P

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Concepts

Authors: David Kroenke

4th Edition

0136086535, 9780136086536

More Books

Students also viewed these Databases questions

Question

=+48. Oil prices, again. Return to the oil price data of Exercise

Answered: 1 week ago