Information Technology
Maintenance Billing and Amenity Booking System for a 120-Flat Apartment Society (Flask + MySQL)
Monthly dues, receipts, penalty ageing and clubhouse slots for a residents' welfare association
- Python 3.12
- Flask 3
- Jinja2
- +4
Conflict-free exam schedules from DSATUR and simulated annealing, measured on realistic college instances
Mapped to your syllabusUniversity of Calcutta CCF 2022 (4-year) · Research project (Hons with Research) · Semester 7–8Every end-semester examination, the exam section of a multi-programme college must place 40–50 courses into about 10 working days of morning and afternoon sessions so that no student faces two exams in one session, every hall fits its enrolment, and students are not ground down by back-to-back papers. Under Calcutta University's CCF, a B.Sc (Hons) student reads Major, Minor, MDC and SEC courses drawn from different departments, so the enrolment graph is dense and the schedule built by hand in a spreadsheet almost always hides clashes that surface on exam day.
This research project builds ExamTT, a Python tool that models the problem as graph colouring — courses are nodes, two courses share an edge when at least one student takes both, and sessions are colours — and measures four solution strategies on realistic instances: a random greedy baseline, Welsh–Powell, DSATUR, and simulated annealing that repairs and refines any initial schedule against a weighted cost of hard clashes and soft penalties (same-day repeats, consecutive-session clashes, rooms opened).
The contribution is an empirical comparison, not just a tool. Ten generated instances calibrated to the college's enrolment profile (3,200 enrolments, 12 halls, 2 sessions a day) are solved five times each with fixed random seeds; the study reports hard-conflict counts, soft-cost breakdowns, convergence curves and runtimes, and tests whether differences are significant. The dissertation is a defensible piece of undergraduate research: a clear problem, formal constraints, standard algorithms, honest measurement — and a tool the exam section can use.
Syllabus alignment
The exam section of a multi-programme college builds the end-semester examination timetable by hand in a spreadsheet. Under CCF, each honours student combines a Major with Minor, MDC and SEC courses from other departments, so the pattern of shared students across 40+ courses is far too dense to track mentally. The consequence repeats every semester: two exams land in the same session for some students and are discovered only when admit cards are printed; large courses are given halls that cannot seat them; some students get three exams in one day while others get a week free. Fixes are ad-hoc room changes that create new clashes elsewhere.
The problem is not carelessness but complexity — the task is equivalent to graph colouring, which is NP-hard, so a human cannot verify clash-freeness for thousands of enrolments. There is a need for a measured, automated approach: a formal constraint model, algorithms with guarantees about what they optimise, and an independent validator that proves the published schedule is clash-free before it reaches students.
Examination timetabling is a classic NP-hard scheduling problem, still solved manually in Indian multi-programme colleges. This project formalises the exam-timetabling problem for a college running Calcutta University's CCF curriculum, implements a graph-colouring-based solver in Python with three constructive heuristics (random greedy, Welsh–Powell, DSATUR) and one metaheuristic refinement (simulated annealing), and measures quality and runtime on ten realistic instances. The central research question is: does annealing a DSATUR seed produce significantly better schedules than constructive heuristics alone, and at what runtime cost?
A typical CCF college examines several honours programmes at once. Every student mixes a Major with Minor, MDC and SEC courses, so the courses any two programmes share are many; a clash is easy to create and hard to spot by eye.
In scope
Out of scope
Research design: a computational-experiment (algorithmic empirical) study. The independent variable is the algorithm (4 levels); dependent variables are hard-conflict count, soft cost, runtime and iterations to convergence; controlled variables are the instance set and random seeds. Every number in the dissertation is reproducible from a single run_experiments.sh invocation with fixed seeds.
| Phase | Weeks (24 total) | Activities | Deliverable |
|---|---|---|---|
| Literature review | 1–3 | Timetabling-as-colouring, Carter & Laporte survey, SA basics; write the 2-page research proposal | Proposal approved by supervisor |
| Formalisation | 4–5 | Fix H/S constraints, cost function, instance parameters | Problem-definition note |
| Instance builder | 6–8 | SQLite schema, spreadsheet import, parameterised generator, density calibration | Ten version-controlled instances |
| Constructive solvers | 9–12 | Random greedy, Welsh–Powell, DSATUR; validator + metrics modules | Solver v1 with tests |
| Annealing solver | 13–16 | SA with relocate/swap moves, T₀ and cooling tuning pass, convergence logging | Solver v2 with tuning log |
| Experiments | 17–19 | 10 instances × 5 seeds × 4 algorithms; CSV of all runs | Raw results + plots |
| Analysis | 20–21 | pandas summaries, Wilcoxon test, convergence reading | Results chapter tables |
| Writing | 22–24 | Dissertation chapters, viva preparation, code cleanup | Final dissertation |
Validity controls: the validator is independent of the solvers; the test suite pins known-small instances with hand-computed optima; every run logs its seed, version hash and machine time, so the comparison survives the viva question "how do you know this is not luck?"
ExamTT is a batch pipeline of seven stages. Nothing is interactive: each stage reads files and writes files, which keeps the experiment reproducible.
course, student, enrolment, hall and session tables; the generator writes instances, the importer reads the office's spreadsheets.solve(instance) -> Schedule); simulated annealing accepts any constructive schedule as its seed.flowchart TD
A["Spreadsheet import / generator"] --> B[("SQLite instance store")]
B --> C["Conflict graph (NetworkX)"]
C --> D1["Random greedy"]
C --> D2["Welsh-Powell"]
C --> D3["DSATUR"]
D1 --> E["Simulated annealing (relocate / swap)"]
D2 --> E
D3 --> E
D1 --> F["Validator + metrics"]
D2 --> F
D3 --> F
E --> F
F --> G[("Results CSV + convergence plots")]
G --> H["pandas analysis + Wilcoxon test"]erDiagram
COURSE ||--o{ ENROLMENT : "has"
STUDENT ||--o{ ENROLMENT : "holds"
SESSION ||--o{ ASSIGNMENT : "receives"
COURSE ||--o{ ASSIGNMENT : "is placed in"
HALL ||--o{ SEAT_ALLOC : "seats"
ASSIGNMENT ||--o{ SEAT_ALLOC : "is seated by"
COURSE {
string code PK
string title
int strength
string programme
}
STUDENT {
string anon_id PK
string programme
}
ENROLMENT {
string anon_id FK
string code FK
}
SESSION {
int id PK
int day
string slot
}
HALL {
string name PK
int capacity
}flowchart LR
S["Candidate schedule"] --> V{"Hard check H1-H3"}
V -->|"violation"| P["cost = hard_penalty x violations"]
V -->|"feasible"| Q["cost = w1 x S1 + w2 x S2 + w3 x S3"]
P --> N["SA accepts / rejects by cost"]
Q --> NModule 01
SQLite schema for courses, anonymised students, enrolments, halls and sessions; a parameterised generator that varies course count (30–50), per-student course load (Major + Minor + MDC + SEC) and hall capacity to produce ten instances whose conflict-graph density matches the calibrated college profile.
Module 02
Reads enrolments and builds an undirected weighted graph in NetworkX where nodes are courses and an edge's weight counts students shared by the two courses. Reports density, degree distribution and the clique bound used as a lower bound on sessions needed — the numbers the dissertation uses to argue the instances are non-trivial.
Module 03
Three one-shot colouring strategies behind a common interface: random first-fit baseline; Welsh–Powell ordering by descending degree; DSATUR via NetworkX's saturation-largest-first strategy. When colours (sessions) run out, the solver opens additional sessions on later days and records the overrun. Output is a Schedule object, never side effects.
Module 04
Starts from the best constructive schedule; each step picks relocate-one-course or swap-two-courses, evaluates the weighted cost (hard penalties dominated by soft weights w1 > w2 > w3), and accepts by the Metropolis rule. Initial temperature is tuned so early acceptance is about 80%; geometric cooling α ∈ {0.95, 0.97, 0.99} was compared in the tuning pass and 0.97 chosen. Logs cost per iteration for convergence curves.
Module 05
Re-checks H1 (per-student session clash), H2 (every course exactly once) and H3 (per-session seat demand vs hall capacity) directly from the instance and the schedule, independent of solver internals. Metrics decompose the final cost into S1 same-day repeats, S2 consecutive-session clashes and S3 halls opened, so the dissertation can say which kind of improvement annealing bought.
Module 06
Runs the 10 × 5 × 4 grid with fixed seeds, writing one CSV row per run (algorithm, instance, seed, hard conflicts, S1–S3, runtime, iterations). The analysis notebook produces mean ± standard-deviation tables, convergence overlays and the Wilcoxon signed-rank test between DSATUR and the annealed schedules across the ten instances.
Slide 1
Automated Exam Timetabling: Graph Colouring versus Simulated Annealing
Slide 2
Motivation
Slide 3
Research Question and Formalisation
Slide 4
Literature Positioning
Slide 5
System Pipeline
Slide 6
The Four Algorithms
Slide 7
Experimental Design
Slide 8
Results
Slide 9
Cost Decomposition
Slide 10
Demo / Sample Schedule
Slide 11
Threats to Validity
Slide 12
Conclusion & Future Work
Bullets, speaker notes and the .pptx · ₹2,000
Read each answer, close it, and say it in your own words. Your viva will ask. Now you'll know.
Deciding whether the conflict graph can be coloured with k colours is the graph k-colouring decision problem, which is NP-complete, and exam timetabling adds capacities and soft costs on top. Practically it means no known polynomial algorithm guarantees the best schedule, so my project compares heuristics and a metaheuristic that trade optimality for tractable runtime, and measures that trade-off instead of claiming optimality.
Each course is a node. An undirected edge joins two courses when at least one student is enrolled in both, weighted by the number of shared students. Colouring the graph assigns courses to sessions, because a proper colouring means no edge has both ends in one session — which is exactly hard constraint H1 that no student sits two exams together. Hall capacity is a per-colour bin-packing check layered on top of the colouring.
DSATUR colours the vertex with the largest saturation degree — the number of distinct colours already used by its neighbours — breaking ties by ordinary degree, and updates saturation dynamically after each placement. On my instances it beats Welsh–Powell's static descending-degree order because the dense, irregular enrolment graph keeps changing which course is most constrained, and DSATUR adapts to that while Welsh–Powell commits to a fixed order.
+13 more questions, with answers
Unlocks with the project · ₹2,000
Unlock for ₹2,000What to change before it goes anywhere near a submission. Skipping it is how the demo fails live.
Unlocks with the project · ₹2,000
Unlock for ₹2,000How to study it, adapt it and walk your examiner through it, step by step.
Unlocks with the project · ₹2,000
Unlock for ₹2,000OnlyProjects. (2026). Automated Exam Timetabling for a Multi-Programme College: Graph Colouring versus Simulated Annealing (Python): B.Sc Information Technology project bundle [Educational resource]. https://onlyprojects.online/projects/bsc-it-exam-timetabling-colouring-vs-annealing
Keep browsing
Same degree, same syllabus slot, different idea. Pick the one your guide will actually approve.
Information Technology
Monthly dues, receipts, penalty ageing and clubhouse slots for a residents' welfare association
Information Technology
From the bahi-khata register to a browser: daily can deliveries, monthly bills and dues for a 20-litre jar supplier
Agriculture
Cattle-dung blends with paddy straw, leaf litter and market waste, benchmarked against FCO Schedule IV specifications
Biochemistry
A p-nitrophenyl phosphate assay read at 405 nm, non-linear Michaelis-Menten fitting, and competitive inhibition by inorganic phosphate
Biotechnology
Four disinfestation protocols, 144 nodal explants on MS medium, and chi-square tests that decide which protocol actually wins
Botany
Frequency, density, abundance and IVI from 20 nested quadrats, with Shannon, Simpson and Jaccard comparisons of a protected and a disturbed plot