An intelligent timetable scheduling system for engineering colleges and educational institutions that uses Genetic Algorithms to generate conflict-free schedules while satisfying complex constraints.
noConflict automates the tedious process of creating academic timetables by using evolutionary algorithms to find optimal schedules that satisfy various constraints such as faculty availability, lab sessions, and avoiding scheduling conflicts.
- Genetic Algorithm Engine: Uses tournament selection, uniform crossover, and mutation to evolve optimal schedules
- Constraint Satisfaction: Automatically satisfies hard constraints like:
- No faculty teaching multiple classes simultaneously
- No section scheduled for multiple subjects at the same time
- Lab sessions kept as consecutive blocks
- Faculty availability preferences
- Multi-Period Course Support: Intelligent handling of lab sessions requiring consecutive time slots
- CSV-Based Data Input: Easy to configure using simple CSV files for:
- Subjects (courses)
- Sections (student groups)
- Faculty members and their availability
- Multiple Export Formats:
- Excel (
.xlsx) export for easy sharing - PDF export for printing
- CSV export for data analysis
- Excel (
- JavaFX GUI: User-friendly graphical interface for:
- Loading data
- Running the scheduler
- Viewing generated timetables
- Exporting results
Before running this project, ensure you have the following installed:
-
Java Development Kit (JDK) 17 or higher
- Download from Oracle JDK or OpenJDK
- Verify installation:
java -version
-
Apache Maven 3.6 or higher
- Download from Apache Maven
- Verify installation:
mvn -version
-
System Requirements
- Operating System: Windows, macOS, or Linux
- RAM: Minimum 2GB (4GB recommended)
- Disk Space: ~500MB for dependencies
-
Clone the repository
git clone https://github.com/NICKSTER0506/noConflict.git cd noConflict -
Build the project
mvn clean install
-
Run the application
mvn javafx:run
Create or modify CSV files in the data/ directory:
-
subjects.csv: Define your coursesid,name,code,hoursPerWeek,isLab 1,Data Structures,CS301,4,false 2,DBMS Lab,CS302L,3,true
-
sections.csv: Define student sections/groupsid,name,semester,batch 1,CS-A,3,2023
-
faculty.csv: Define faculty members and availabilityid,name,department,availability 1,Dr. Smith,Computer Science,MON-FRI 9:00-17:00
- Launch the application (
mvn javafx:run) - Click "Load Data" to import your CSV files
- Configure settings (optional):
- Population size
- Mutation rate
- Maximum generations
- Click "Generate Timetable"
- View the generated schedule in the GUI
After generating a timetable:
- Click "Export to Excel" to save as
.xlsx - Click "Export to PDF" to save as
.pdf - Click "Export to CSV" to save as
.csv
noConflict/
├── data/ # Input data files
│ ├── faculty.csv
│ ├── sections.csv
│ └── subjects.csv
├── src/
│ ├── main/
│ │ ├── java/com/scheduler/
│ │ │ ├── engine/ # Genetic algorithm implementation
│ │ │ │ ├── GeneticAlgorithm.java
│ │ │ │ ├── FitnessFunction.java
│ │ │ │ ├── ConstraintSatisfaction.java
│ │ │ │ └── TimetableGenerator.java
│ │ │ ├── model/ # Data models
│ │ │ │ ├── Chromosome.java
│ │ │ │ ├── Gene.java
│ │ │ │ ├── Slot.java
│ │ │ │ ├── Subject.java
│ │ │ │ ├── Section.java
│ │ │ │ └── Faculty.java
│ │ │ ├── ui/ # JavaFX user interface
│ │ │ │ ├── MainApp.java
│ │ │ │ └── DashboardController.java
│ │ │ └── util/ # Utility classes
│ │ │ ├── CsvParser.java
│ │ │ └── DataExporter.java
│ │ └── resources/ # FXML and CSS files
│ └── test/ # Unit tests
├── tools/ # Bundled tools (Maven)
├── pom.xml # Maven configuration
└── README.md # This file
- Language: Java 17
- Build Tool: Apache Maven
- GUI Framework: JavaFX 17.0.2
- Algorithm: Genetic Algorithm (Evolutionary Computation)
- Data Processing: OpenCSV 5.7.1
- Export Libraries:
- Apache POI 5.2.3 (Excel export)
- OpenPDF 1.3.30 (PDF export)
- Testing: JUnit 5.9.2
The project uses a Steady-State Genetic Algorithm with the following components:
-
Representation:
- Chromosome = Complete timetable
- Gene = Single class assignment (slot + subject + section + faculty)
-
Selection: Tournament selection (size 5)
-
Crossover: Uniform crossover at gene group level (preserves lab blocks)
-
Mutation:
- Swap mutation (exchanges two classes within same section)
- Re-roll mutation (randomly reassigns time slots)
-
Fitness Function: Evaluates solutions based on:
- Hard constraints (no conflicts)
- Soft constraints (preferences like spreading out subjects)
-
Constraint Repair: Post-processing to fix any remaining conflicts
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Add support for room/venue constraints
- Implement additional export formats
- Add more sophisticated fitness functions
- Improve the UI/UX
- Add more comprehensive unit tests
- Support for half-day schedules
- Multi-language support
This project is licensed under the MIT License - see the LICENSE file for details.
- Original Developer: GlyphicGuy
- Fork Maintainer: NICKSTER0506
- Warnings about
sun.misc.Unsafewhen running on Java 24+ (these are harmless and don't affect functionality) - Very large datasets (>100 sections) may require longer evolution times
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with a detailed description
- Include your Java version and error messages if applicable
- Inspired by the NP-complete nature of the timetable scheduling problem
- Built to help educational institutions automate their scheduling process
- Thanks to all contributors who help improve this project
Happy Scheduling! 📅✨