130 lines
3.7 KiB
Python
130 lines
3.7 KiB
Python
# Assignment-C6 (Expert System - Airline Scheduling and Cargo Schedules)
|
|
|
|
"""
|
|
THIS CODE HAS BEEN TESTED AND IS FULLY OPERATIONAL.
|
|
|
|
Problem Statement: Implement any one of the following Expert System
|
|
VI. Airline scheduling and cargo schedules
|
|
|
|
Code from ArtificialIntelligence (SPPU - Third Year - Computer Engineering - Content) repository on KSKA Git: https://git.kska.io/sppu-te-comp-content/ArtificialIntelligence
|
|
"""
|
|
|
|
"""
|
|
Install required package: experta
|
|
pip install experta
|
|
"""
|
|
|
|
# BEGINNING OF CODE
|
|
from experta import *
|
|
|
|
class Flight(Fact):
|
|
"""Flight details"""
|
|
flight_id: str
|
|
aircraft_type: str
|
|
available: bool
|
|
pilot_available: bool
|
|
destination: str
|
|
|
|
class Cargo(Fact):
|
|
"""Cargo details"""
|
|
cargo_id: str
|
|
weight: float
|
|
category: str # e.g., perishable, fragile, standard
|
|
priority: str # high, medium, low
|
|
destination: str
|
|
|
|
# Define the Expert System
|
|
class AirlineExpertSystem(KnowledgeEngine):
|
|
|
|
@Rule(Cargo(weight=P(lambda x: x > 10000)))
|
|
def reject_heavy_cargo(self):
|
|
print("Cargo rejected: Weight exceeds limit (10,000kg).")
|
|
|
|
@Rule(
|
|
Flight(available=True, pilot_available=True, destination=MATCH.dest),
|
|
Cargo(destination=MATCH.dest, priority='high')
|
|
)
|
|
def schedule_high_priority(self, dest):
|
|
print(f"High priority cargo scheduled to {dest} on available flight.")
|
|
|
|
@Rule(
|
|
Flight(available=True, pilot_available=True, destination=MATCH.dest),
|
|
Cargo(destination=MATCH.dest, category='perishable')
|
|
)
|
|
def schedule_perishable(self, dest):
|
|
print(f"Perishable cargo assigned to next available flight to {dest}.")
|
|
|
|
@Rule(
|
|
Flight(available=True, pilot_available=True, destination=MATCH.dest),
|
|
Cargo(destination=MATCH.dest)
|
|
)
|
|
def schedule_standard(self, dest):
|
|
print(f"Standard cargo scheduled to {dest}.")
|
|
|
|
@Rule(Flight(available=False))
|
|
def no_flight(self):
|
|
print("No flight available currently.")
|
|
|
|
@Rule(Flight(pilot_available=False))
|
|
def no_pilot(self):
|
|
print("No pilot available for the flight.")
|
|
|
|
# Function to get user input and run the system
|
|
def run_system():
|
|
engine = AirlineExpertSystem()
|
|
engine.reset()
|
|
|
|
print("\nEnter Flight Details")
|
|
flight_id = input("Flight ID: ")
|
|
aircraft_type = input("Aircraft Type: ")
|
|
available = input("Is Flight Available? (yes/no): ").lower() == 'yes'
|
|
pilot_available = input("Is Pilot Available? (yes/no): ").lower() == 'yes'
|
|
destination = input("Destination: ")
|
|
|
|
flight_fact = Flight(
|
|
flight_id=flight_id,
|
|
aircraft_type=aircraft_type,
|
|
available=available,
|
|
pilot_available=pilot_available,
|
|
destination=destination
|
|
)
|
|
print(f"Declaring Flight Fact: {flight_fact}")
|
|
engine.declare(flight_fact)
|
|
|
|
print("\nEnter Cargo Details")
|
|
cargo_id = input("Cargo ID: ")
|
|
|
|
# Input validation for weight
|
|
while True:
|
|
try:
|
|
weight = float(input("Weight (in kg): "))
|
|
if weight <= 0:
|
|
raise ValueError("Weight must be a positive number.")
|
|
break
|
|
except ValueError as e:
|
|
print(e)
|
|
|
|
category = input("Category (perishable/fragile/standard): ").lower()
|
|
priority = input("Priority (high/medium/low): ").lower()
|
|
cargo_destination = input("Destination: ")
|
|
|
|
cargo_fact = Cargo(
|
|
cargo_id=cargo_id,
|
|
weight=weight,
|
|
category=category,
|
|
priority=priority,
|
|
destination=cargo_destination
|
|
)
|
|
print(f"Declaring Cargo Fact: {cargo_fact}")
|
|
engine.declare(cargo_fact)
|
|
|
|
print("\nRunning Expert System...\n")
|
|
try:
|
|
engine.run()
|
|
except Exception as e:
|
|
print(f"An error occurred: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
run_system()
|
|
# END OF CODE
|