Timetable EngineConstraint-based timetabling system for Manchester University
This system helps you generate optimal timetables for Manchester University using constraint-based optimization.
This system supports multiple simultaneous users. Each user gets their own isolated workspace with separate data files and solutions.
💡 Your session and data are automatically managed. Sessions expire after 24 hours of inactivity.
v2.3 · April 2026 — Start by editing your Excel workbook (.xlsx) in the Workbook Editor (grid + dropdowns), then apply it to your session for solving.
Important: The editor works from a saved draft in your browser. Uploading an Excel workbook (.xlsx) on the Data Upload tab does not automatically replace what’s currently in your editor draft unless you upload/open it from the editor.
Upload a single Excel workbook (.xlsx) (recommended) or use the CSV/YAML multi-file route.
Set up your constraint preferences and weights. The system supports both hard constraints (must be satisfied) and soft constraints (preferences with penalties).
Recommendation: Most users should keep the default constraint weights. Only change weights if you have a specific outcome you’re trying to push (e.g., reduce student conflicts at the cost of more instructor gaps).
Run the optimization solver to find the best timetable that satisfies all constraints while minimizing penalties.
Examine the generated timetable, view reports, and export results in various formats (CSV, HTML, ICS calendar).
Edit your timetable workbook in a spreadsheet-style grid (sections, instructors, rooms, timeslots, buildings, patterns, cohorts, weights, and more).
Draft (this browser): The editor keeps a saved draft in your browser so you can safely iterate without changing the server session until you’re ready.
Server session: Nothing is used for solving until you click Apply to session for Solve, which sends your current draft to the server session.
Important: Uploading an Excel workbook (.xlsx) on the Data Upload tab does not automatically replace what’s currently in your editor draft.
If you already have an Excel workbook (.xlsx), open the editor and use Upload workbook (.xlsx) inside the editor to load it into your draft.
Release v2.3 · April 2026
Load your timetable data in one of these ways:
Upload one Excel workbook (.xlsx) with multiple sheets (same structure as the downloadable blank/example workbooks).
Note: There is no separate “Validate Data” button here—after a successful upload, validation runs automatically (same checks as the CSV flow). Messages appear below.
Required sheets: sections, instructors, rooms, timeslots, config, patterns, weights
Optional sheets: buildings, cohorts, section_groups
Need a starter Excel workbook? Go to the Workbook Editor tab to download blank/example workbooks and edit your saved draft.
Workbook Editor: Full-screen editor for all sheets. Your work is saved in this browser. Upload an Excel workbook (.xlsx), download an Excel workbook (.xlsx), then Apply to session for Solve (optional backup download first) — you’ll be taken to the Solve tab to generate the timetable.
Supported formats: CSV and YAML.
For the CSV route, the system uses the following file formats:
Required: sections.csv, instructors.csv, rooms.csv, timeslots.csv, config.yaml · Optional: section_groups.csv, buildings.csv, cohorts.csv
Configure constraint weights and solver parameters to customize the optimization process.
Suggested default: Keep the constraint weights as-is unless you have a specific scheduling issue you’re trying to correct.
Recommended: Use the default weights. Adjust only when you’re iterating on a specific trade-off.
Time patterns are typically defined in your Excel workbook (.xlsx) (the patterns sheet, or via the Workbook Editor). The server stores the active session settings in config.yaml, and the patterns currently loaded for this session are displayed below:
Run the optimization solver to generate your timetable.
Review your generated timetable and export results.
Follow these steps to generate your first timetable:
Easy method: Upload one Excel workbook (.xlsx) containing all your data in separate sheets.
Benefits: All data in one file, easier to manage, patterns and weights included, less prone to errors.
What it is: A full-screen, in-browser editor for the same multi-sheet Excel workbook (.xlsx) you use outside the app (sections, instructors, rooms, timeslots, patterns, weights, and more). Edit in a spreadsheet-style grid with dropdowns and validation.
Local draft: The grid is saved automatically in this browser (localStorage). Clearing site data removes it—use Download workbook (.xlsx) for a backup.
Upload workbook (.xlsx): Loads an Excel workbook (.xlsx) from your computer into the editor (same upload as the Data tab).
Apply to session for Solve: Asks if you want to download an Excel workbook (.xlsx) backup, then sends the grid to the server and opens the Solve tab to run the solver. Fix validation errors first if the server rejects the apply.
Validation: Errors and warnings appear while you edit.
Where to open it: Go to the Workbook Editor tab and click Open Workbook Editor.
You can also upload individual CSV files if you prefer the original method.
Section Assignment: Each section must be assigned exactly once
Room Exclusivity: No two sections can occupy the same room at the same time
Instructor Exclusivity: No instructor can teach two sections simultaneously
Room Capacity: Room capacity must meet section requirements
Room Features: Room must have all required features
Pinned Events: Sections with pinned timeslots/rooms must be fixed
Student Conflicts: Minimize overlapping required sections for cohorts
Instructor Gaps: Minimize idle time between classes
Late Slots: Avoid late time slots for instructors who prefer not to teach late
Walking Time: Minimize walking distance between consecutive classes
Fairness: Distribute undesirable slots fairly among instructors
Infeasible Problem: Check for conflicting constraints or insufficient resources
No Valid Assignments: Verify room capacity and feature requirements
Poor Quality Solution: Adjust constraint weights to prioritize important factors
Use appropriate time limits based on problem size
Start with simpler constraints and add complexity gradually
Use pinned assignments for critical sections
For programmatic access, use the REST API endpoints:
Version: 2.3 (Excel workbook + Workbook Editor)
Date: April 2026
Developers: Jeff Osborne and Cursor AI
Location: Manchester University, North Manchester, Indiana, USA
CP-SAT Solver: Google's OR-Tools Constraint Programming SAT solver for optimal solutions
Multi-Objective Optimization: Balances multiple competing constraints and preferences
Hard Constraints: Must be satisfied (instructor conflicts, room capacity, time overlaps)
Soft Constraints: Optimized with penalty weights (preferences, gaps, late slots)
Integer Linear Programming: Converts scheduling problems into mathematical optimization
Excel workbook (.xlsx): Upload all data in a single Excel workbook (.xlsx) with multiple sheets
Workbook Editor: Edit the full multi-sheet workbook in the browser; draft stored locally, then apply to the server for solve
Multi-User Support: Up to 20 simultaneous users with isolated workspaces
Session Management: Automatic session tracking with 24-hour inactivity timeout
Real-time Optimization: Generates timetables in seconds to minutes
Flexible Constraints: Supports complex scheduling rules and preferences
Interactive Interface: Web-based GUI for easy data upload and result visualization
Multiple export formats: Excel workbook (.xlsx), CSV, and PDF for weekly schedules
Dataset Import/Export: Save and restore complete datasets as ZIP files
Solve Queue: Manages concurrent solver runs to optimize server resources
Scalable Architecture: Handles small to large-scale scheduling problems
Constraint Validation: Ensures data consistency before optimization
Backend: Python with FastAPI framework
Solver: Google OR-Tools CP-SAT
Frontend: HTML5, CSS3, JavaScript (ES6+)
Database: SQLite for solution persistence
Server: Uvicorn ASGI server with Apache reverse proxy
For questions, bug reports, or feature requests, please contact Jeff Osborne.
Email: jposborne@manchester.edu