A simple AI utilities package for search, CSP, and games.
Project description
AI Utilities Package
This package provides essential implementations of AI algorithms, making it easier for students to learn and experiment with search algorithms, constraint satisfaction problems (CSP), and game-playing strategies. It is based on the AIMA-Python project but has been modularized and simplified for educational use.
Features
- Search Algorithms: Implements uninformed (BFS, DFS, UCS) and informed (Greedy, A*) search algorithms.
- Constraint Satisfaction Problems (CSP): Includes backtracking search, forward-checking, and heuristics for CSPs.
- Game Playing: Implements Minimax and Alpha-Beta pruning for decision-making in two-player games.
Installation
To install this package, use:
pip install aistudent-1.0.0-non-any-py312.whl
Dependencies
- numpy
- networkx
- sortedcontainers
- scipy
- matplotlib
These dependencies will be installed automatically, but you can manually install them using:
pip install numpy networkx sortedcontainers scipy matplotlib
Usage
Once installed, you can import and use the package in your Python scripts.
Example 1: Using BFS from Search Module
from aistudent.aiutils.search import breadth_first_graph_search, EightPuzzle
initial_state = (1, 2, 3, 4, 0, 5, 6, 7, 8)
puzzle_problem = EightPuzzle(initial_state)
solution = breadth_first_graph_search(puzzle_problem)
for node in solution.path():
print("Move:", node.action)
print("State:", node.state)
Example 2: Solving a CSP Problem
from aistudent.aiutils.csp import CSP, backtracking_search
variables = ["A", "B", "C", "D"]
domains = {var: ["Red", "Green", "Blue"] for var in variables}
neighbors = {
"A": ["B", "C"],
"B": ["A", "C", "D"],
"C": ["A", "B", "D"],
"D": ["B", "C"]
}
def constraint(var1, value1, var2, value2):
return value1 != value2
graph_coloring = CSP(variables, domains, neighbors, constraint)
solution = backtracking_search(graph_coloring)
print("Graph Coloring Solution:", solution)
Example 3: Minimax Algorithm for Game AI
from aistudent.aiutils.games import TicTacToe, GameState, minmax_decision
game = TicTacToe()
board_state = {
(1, 1): 'X', (1, 2): 'O', (1, 3): 'O',
(2, 2): 'O',
(3, 2): 'X', (3, 3): 'X'
}
all_positions = {(r, c) for r in range(1, 4) for c in range(1, 4)}
occupied_positions = set(board_state.keys())
available_moves = list(all_positions - occupied_positions)
initial_state = GameState(
to_move='X', # X's turn to play
utility=0, # No immediate win/loss
board=board_state, # Given board configuration
moves=available_moves # Possible moves for X
)
print("The initial board for Tic-Tac-Toe is:")
game.display(initial_state)
# Use the Minimax algorithm to determine the best move for X
best_move = minmax_decision(game=game, state=initial_state)
# Apply the best move to get the next board state
next_state = game.result(initial_state, best_move)
# Display the chosen best move
print("\nBest move for X:", best_move)
# Display the board after X's move
print("\nBoard after X's move:")
game.display(next_state)
Example 4: A* Algorithm
from aistudent.aiutils.search import astar_search, EightPuzzle
initial_state = (1, 2, 3, 4, 0, 5, 6, 7, 8)
puzzle_problem = EightPuzzle(initial_state)
solution = astar_search(puzzle_problem)
for node in solution.path():
print("Move:", node.action)
print("State:", node.state)
Example 5: DFS Example
from aistudent.aiutils.search import depth_first_graph_search
from collections import deque
class PacmanGame:
def __init__(self, grid):
self.grid = grid
self.rows = len(grid)
self.cols = len(grid[0])
self.start = None
self.goal = None
# Find Pac-Man (P) and Apple (A) positions
for r in range(self.rows):
for c in range(self.cols):
if grid[r][c] == 'P':
self.start = (r, c)
elif grid[r][c] == 'A':
self.goal = (r, c)
# Set initial state for search
self.initial = self.start
def actions(self, state):
""" Returns valid moves: (Up, Down, Left, Right) """
r, c = state
possible_moves = [
(r-1, c), (r+1, c), (r, c-1), (r, c+1)
]
return [move for move in possible_moves if self.is_valid(move)]
def is_valid(self, state):
""" Check if a move is within bounds and not a wall """
r, c = state
return 0 <= r < self.rows and 0 <= c < self.cols and self.grid[r][c] != 'X'
def result(self, state, action):
""" Moving Pac-Man to new state """
return action
def goal_test(self, state):
""" Check if Pac-Man found the Apple """
return state == self.goal
def path_cost(self, c, state1, action, state2):
""" Returns cost of the path (default = 1 per move) """
return c + 1
grid = [
['P', '.', '.', 'X', 'A'],
['.', 'X', '.', '.', '.'],
['.', '.', 'X', '.', '.'],
['X', '.', '.', '.', '.']
]
pacman = PacmanGame(grid)
solution = depth_first_graph_search(pacman)
if solution:
print("Solution found! Path to Apple:")
for step in solution.path():
print(step.state)
else:
print("No solution found!")
Credits & Contributions
This package is based on the AIMA-Python implementations by Stuart Russell & Peter Norvig, originally developed as part of Artificial Intelligence: A Modern Approach.
Original Implementation: AIMA-Python Contributors
Refactored & Simplified for Students: [Babar Ahmad]
Package Creation & Modularization: [Babar Ahmad]
This package is designed to simplify AI learning for students by providing easy-to-use, modular AI implementations.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aistudent-1.0.3.tar.gz.
File metadata
- Download URL: aistudent-1.0.3.tar.gz
- Upload date:
- Size: 43.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b54097bbf6e3e0f931a595d6c2b93b8bd2705187b8be47fa95b1471196e01b7b
|
|
| MD5 |
71b710563bc71a55f51cf545c1d3fa35
|
|
| BLAKE2b-256 |
acc6bf4dc1e1873013b77729ec5c343716510c542753a4b37606c7298fa400b8
|
File details
Details for the file aistudent-1.0.3-py3-none-any.whl.
File metadata
- Download URL: aistudent-1.0.3-py3-none-any.whl
- Upload date:
- Size: 44.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a6df7682b6e93d252d725af856a2f4be9318b1b617afa434dcac15975d94051
|
|
| MD5 |
d59fb5d22de5dce57c44e2a323cb9203
|
|
| BLAKE2b-256 |
114696c7026407335916515f41ce0be3134d5a47d792207c3d6700e1031d6fc8
|