A Python-based automatic scheduling system that fairly distributes 40 altar servers across church services over a 6-week period.
- Fair Distribution: Ensures every altar server gets equal assignments
- Sibling Pairing: Automatically assigns siblings together
- Availability Management: Respects individual availability preferences
- Absence Handling: Loads and processes absence data from file
- 8:30 AM Requirement: Ensures everyone serves at least once at the unpopular early service
- Three-Phase Algorithm: Optimizes assignments through multiple phases
- Comprehensive Reporting: Detailed statistics and validation reports
- Fairness: Equal number of assignments for all servers
- Sibling Rule: Siblings always assigned together
- No Consecutive Days: No server works consecutive days
- 8:30 AM Requirement: Everyone must serve early service at least once
- Availability: Only assigns servers when they're available
- Group Leader Distribution: Proper distribution across services
├── AltarServer.py # Main English implementation
├── Ministrant.py # Original German implementation
├── absences.txt # English absence data
├── abmeldungen.txt # German absence data
├── PROJECT_README.md # Detailed technical documentation
└── README.md # This file
-
Clone the repository
git clone <repository-url> cd altar-server-scheduling
-
Run the algorithm
python AltarServer.py
-
View results The program outputs:
- Mass assignments for each service
- Assignment statistics per server
- Absence validation
- 8:30 AM requirement compliance
=== MASS OVERVIEW ===
1.04.25 at 8:30 (needs 4 servers):
Assigned: 4 servers
- Max (was absent)
- Tom
- Paul
- Emma
=== ASSIGNMENT STATISTICS ===
Max: 2 assignments | 8:30 AM: OK
Lisa: 2 assignments | 8:30 AM: OK | Absences: 1
Tom: 3 assignments | 8:30 AM: OK
...
=== 8:30 AM REQUIREMENT CHECK ===
Everyone has at least one 8:30 service!
# Comments start with #
Name|Date
Max|1.04.25
Lisa|8.04.25
Modify the server list in AltarServer.py
:
new_server = AltarServer(
is_group_leader=False,
name="NewName",
assignment_counter=0,
siblings="SiblingName", # Empty string if no siblings
available=["Sunday 8:30", "Sunday 10:30"]
)
-
Phase 0: 8:30 AM Priority
- Prioritizes servers who haven't served early service
- Ensures compliance with early service requirement
-
Phase 1: Fair Distribution
- Sorts by assignment counter (least assignments first)
- Maintains sibling pairing throughout
-
Phase 2: Preference Optimization
- Attempts swaps to match server preferences
- Improves satisfaction while preserving fairness
- Language: Python 3.x
- Servers: 40 altar servers
- Schedule: 6 weeks (12 Sundays × 2 services = 24 masses)
- Dependencies: None (pure Python)
- Encoding: UTF-8 (supports international characters)
This project includes both German and English implementations:
- German:
Ministrant.py
(original) - English:
AltarServer.py
(translation)
Both versions are functionally identical and can be used interchangeably.
- Fork the repository
- Create a feature branch (
git checkout -b feature/improvement
) - Commit your changes (
git commit -am 'Add improvement'
) - Push to the branch (
git push origin feature/improvement
) - Create a Pull Request
This project is open source and available under the MIT License.
Perfect for:
- Churches managing altar server schedules
- Youth group coordinators
- Educational purposes (algorithm learning)
- Scheduling system examples
- Python programming practice
This project demonstrates:
- Object-oriented programming in Python
- Algorithm design and optimization
- File I/O operations
- Data structure manipulation
- Constraint satisfaction problems
- Fair distribution algorithms
Created with ❤️ for church communities and Python learners