Schedule a list of meetings, distributing research and journal club presentations so as to maximize the time-separation between presentations by the same individual.
using PresentationScheduling
dates = Date("2024-08-28"):Week(2):Date("2024-12-18")
individuals = ["John", "Jane", "Bob", "Alice", "Sven", "Luis", "Jean", "Malcolm"]
presentations_modify = Dict("Malcolm" => 1, "Alice" => 3)
journals_modify = Dict("Malcolm" => 0, "Alice" => 0, "Sven" => 0)
cannot_attend = Dict("Malcolm" => dates[3:end])
schedule = optimize_presentation_schedule(
    individuals, dates, presentations_modify, journals_modify, cannot_attend;
    default_presentations=2,
    min_total=2,
    max_total=3,
    min_presentations=1,
    max_presentations=3,
    min_journals=0,
    max_journals=1,
    time_limit=20)Which returns a PresentationSchedule that displays as a time-table:
