////
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
////

[[meetingScheduling]]
= Meeting scheduling
:imagesdir: ../..


[[meetingSchedulingProblemDescription]]
== Problem description

Assign each meeting to a starting time and a room.
Meetings have different durations.

Hard constraints:

* Room conflict: two meetings must not use the same room at the same time.
* Required attendance: A person cannot have two required meetings at the same time.
* Required room capacity: A meeting must not be in a room that doesn't fit all of the meeting's attendees.
* Start and end on same day: A meeting shouldn't be scheduled over multiple days.

Medium constraints:

* Preferred attendance: A person cannot have two preferred meetings at the same time, nor a preferred and a required meeting at the same time.

Soft constraints:

* Sooner rather than later: Schedule all meetings as soon as possible.
* A break between meetings: Any two meetings should have at least one time grain break between them.
* Overlapping meetings: To minimize the number of meetings in parallel so people don't have to choose one meeting over the other.
* Assign larger rooms first: If a larger room is available any meeting should be assigned to that room in order to accommodate as many people as possible
    even if they haven't signed up to that meeting.
* Room stability: If a person has two consecutive meetings with two or less time grains break between them they better be in the same room.


[[meetingSchedulingProblemSize]]
== Problem size

[source,options="nowrap"]
----
50meetings-160timegrains-5rooms  has  50 meetings, 160 timeGrains and 5 rooms with a search space of 10^145.
100meetings-320timegrains-5rooms has 100 meetings, 320 timeGrains and 5 rooms with a search space of 10^320.
200meetings-640timegrains-5rooms has 200 meetings, 640 timeGrains and 5 rooms with a search space of 10^701.
400meetings-1280timegrains-5rooms has 400 meetings, 1280 timeGrains and 5 rooms with a search space of 10^1522.
800meetings-2560timegrains-5rooms has 800 meetings, 2560 timeGrains and 5 rooms with a search space of 10^3285.
----
