# Additional Distribution Constraints

The following additional distribution constraint types can be added into UniTime. They are not present in UniTime out of the box as they have either a special purpose or additional parameters that need to be provided before the distribution constraint can be registered. You can see the registered distribution constraint types on the Administration > Solver > Distribution Types page.

To register any of the following constraint types:

Download the appropriate XML (also available in GitHub, see Documentation/Scripts)

Use the Administration > Academic Sessions > Data Exchange page to import it. This will create a script that will register the appropriate distribution type(s).

Use the Administration > Utilities > Scripts page to run the registration script. The script is named Distribution Types: Create XXX Constraints, where XXX is the constraint name.

Verify that the distribution types have been registered using the Administration > Solver > Distribution Types page.

**Max Block**

Script: Create Max Block Constraint.xml

The MaxBlock constraint checks for too big blocks of back-to-back classes of an instructor on a day.

It has two parameters: a maximal length of a back-to-back block that is allowed and a minimum length of a break between two classes not to be considered in the same block.

Reference _MaxBlock:120:30_ translates to a maximal block of at most 2 hours (120 minutes) with classes not more than 30 minutes apart.

Implemented by the MaxBlockFlexibleConstraint class.

**Max Break**

Script: Create Max Break Constraint.xml

The MaxBreaks constraint limits the number of blocks of non back-to-back classes of an instructor on a day.

It has two parameters: a maximal number of breaks and a minimal length of a break between two classes not to be considered in the same block.

Reference _MaxBreaks:1:30_ translates to a maximum number of one break (two blocks) on a day of classes not more than 30 minutes apart.

Implemented by the MaxBreaksFlexibleConstraint class.

**Max Holes**

Script: Create Max Holes Constraint.xml

The MaxHoles constraint limits the number of free time (holes) for an instructor on a day.

It has one parameter: a maximal amount of free time in minutes (between the first and the last class on a day) that an instructor is allowed to have without a penalization.

For example, reference _MaxHoles:120_ translates to a maximum number of two hours of total free time between the first and the last class on a day.

If required, having more free time is prohibited. If preferred or strongly preferred, the excessive free time is penalized.

Implemented by the MaxHolesFlexibleConstraint class.

**Max Hours A Day**

Script: Create Max Hours A Day Constraint.xml

The MaxHours constraint limits the number of hours that can be taught on a day.

Classes are to be placed in a way that there is no more than *N* hours in any day.

Implemented by the GroupConstraint class (see ConstraintType.MAX_HRS_DAY).

**Work Day**

Script: Create Work Day Constraints.xml

The WorkDay constraint limits the number of hours between the start of the first class and the end of the last class on a day.

Classes are to be placed in a way that there are no more than N hours between the start of the first class and the end of the last class on any day.

Implemented by the GroupConstraint class (see ConstraintType.WORKDAY).

**Max Days**

Script: Create Max Days Constraints.xml

Classes must / should be placed in no more than N week days.

The MaxDays constraint limits the number of days of week during which the given set of classes are taught.

It has one parameter: a maximal number of week days during which the given set of classes can be placed.

Reference _MaxDays:2_ translates to a maximum number of 2 days a week.

Implemented by the MaxDaysFlexibleConstraint class.

**Max Half-Days**

Script: Create Max Half-Days Constraints.xml

Classes must / should be placed in no more than N week half-days. A class starting before noon is considered a morning class, a class starting at noon or later is considered an afternoon class.

The MaxHalfDays constraint limits the number of half-days of week during which the given set of classes are taught.

It has one parameter: a maximal number of week half-days during which the given set of classes can be placed.

A day is split by noon (which can be changed using General.HalfDaySlot parameter). A class starting before noon is considered a morning class (despite of its end), a class starting at noon or later is considered an afternoon class.

Reference _MaxHalfDays:4_ translates to a maximum number of 4 half-days a week.

Implemented by the MaxHalfDaysFlexibleConstraint class.

**Max Weeks**

Script: Create Max Weeks Constraint.xml

The MaxWeeks constraint limits the number of weeks during which the given set of classes are taught.

It has two parameters: a maximal number of weeks during which the given set of classes can be placed and a day combination indicating what days of the week are considered.If no days of the week are selected, all days of the week are considered.

Reference _MaxWeeks:3:6_ translates to a maximum number of 3 weeks, but only for classes that are placed on Fridays and Saturdays (64 for Monday, 32 for Tuesday, 16 for Wednesday, 8 for Thursday, 4 for Friday, 2 for Saturday, and 1 for Sunday). If the second parameter is zero, all days of week are considered.

Implemented by the MaxWeeksFlexibleConstraint class.

**Back-To-Back/Following Weeks**

Script: Create BTB-Following Weeks Constraints.xml

Back-To-Back Weeks: Given classes must be taught on weeks that are back-to-back (the gap between the two assigned date patterns is less than a week).

When prohibited or (strongly) discouraged: any two classes must have at least a week gap in between.

Following Weeks: Given classes must be taught on weeks that are back-to-back and in the given order.

When prohibited or (strongly) discouraged: given classes must be taught on weeks in the given order with at least one week between any two following classes.

Implemented by the GroupConstraint class (see ConstraintType.BTB_WEEKS and ConstraintType.FOLLOWING_WEEKS).