- Java JDK 24.0.1 (should also work with Java JDK 17 or newer)
- Apache Maven 3.9.10
Clone the repository:
git clone https://github.com/bruhenri12/meeting-planner.gitIn the project's root directory, build with:
mvn clean packageThen, use the generated .jar in 'target' (target\meeting-planner-1.0.jar), passing as an argument the .xlsx dataset file in the format provided by the description.
To do this, use the following command:
java -jar target\meeting-planner-1.0.jar <path_to_file.xlsx>The planner will then run for 5 minutes, and at the end: it will create a file in the same path as the provided source .xlsx, with the missing Meetings cells filled with the scheduled data (not in the same order as the source file); and will print to the terminal: the model score (hard/medium/soft), the log of each meeting with its respective ID, and separate tables by day, indicating by ID the room and time of each meeting.
Some warnings may appear, but don't worry, they are from unused deprecated default libraries that I could not fix.
You can save the model's terminal output to a text file with:
java -jar target\meeting-planner-1.0.jar <path_to_file.xlsx> > output.txtNote: You can find the example files provided in the description in the src\main\resources\datasets directory.
- Termination time: 300 seconds (5 minutes), this value was setted for testing with datasets with up to 200 meetings, for larger datasets, it may be necessary to increase this time value for the tag
secondsSpentLimiton thesolverConfig.xmlfile at the pathsrc\main\resources\solverConfig.xml. - Construction heuristic: First Fit Decreasing, chosen to minimize leftover longer meetings for local search, fitting the longest meetings into slots first.
- Local search heuristic: Tabu Search
Values decided after experimentation and recommendations from the model documentation, in the table section: Table 1. Optimization Algorithms Overview
Develop a solver to schedule meetings, capable of handling any dataset in the format of the provided examples.
- Room conflict: Two meetings cannot occur in the same room at the same time.
- Mandatory participation: A person cannot have two mandatory meetings at the same time.
- Minimum room capacity: A meeting can only be allocated to a room that accommodates all its participants.
- Start and end on the same day: Meetings must not span more than one day.
- Preferred participation: A person cannot have two preferred meetings at the same time, nor a mandatory and a preferred meeting at the same time.
- The sooner, the better: Schedule meetings as early as possible.
- Gap between meetings: There should be at least one time slot between two meetings.
- Simultaneous meetings: Minimize the number of parallel meetings to avoid conflicts for participants.
- Allocate larger rooms first: Prefer larger available rooms to accommodate as many people as possible, even if not all are formally registered.
- Room stability: If a person has two consecutive meetings (with up to two time slots between them), it is preferable that both occur in the same room.
The solver can use any framework and algorithm. It is recommended to use open source and market solvers, rather than implementing a solver from scratch.
- VSCode
- Git
- Java
- Timefold
- Maven