*Understanding the Roomchecking planner philosophy*

## Introduction

When one wants to tackle with a planning he has 2 approaches :

**Linear approach**: you put each room the best way, then almost at the end, when you are happy, you are left with some rooms that you can't allocate without violating the rules. you can just patch or completly redo the plan ...

**Global approach** : you look at the problem from 10miles, incorporating all the constraints and find a good plan. The planner uses this approach.

Each time you add a constraint, the planner looks for an optimal feasable solution that satisfies the constraints. Sometimes you can't have all constraints respected...

## 3 Key concepts to learn to understand how to tweak the planner

### 1.Objective

What is the objective of the planner?

The objective of the planner is to maximize the number of rooms to clean, while minimizing the number of attendants, and less travelling time.

you can have an objective of giving bewteen 1 and 20 rooms per attendant

you can have an objective of giving bewteen 1 and 300 min per attendant

you can have an objective of giving a fix number of rooms per attendant (target mode)

### 2. Positive Contribution

Each time you help the planner with some prefered floors or rooms, you increase the objective

When you put in the individual Attendant, some Building, Floors and rooms, the planne will increase the objective if he founds them in one of the solutions.

### 3.Negative Contribution

Each time you prevent the planner from making less rooms, you penalize the objective.

Each time a Cleaner travels between rooms and building she does less rooms, so Travel time has a *negative* contribution to the objective

Weight travel time of 1 : will accept a solution with some floor changes

Weight travel time of -5 : will severely penalize the travel time and force the planner to favor a solution with less floor changes

### 4.Constraint/Weight

When a human says that a Cleaner should not change builing, he actually says : she should not change building, unless...

thus the concept of Weight : how **really** important is the constraint or the award ?

# Global Constraints

## Constraints

**Max Travel Time** : this is the sum of all the travel times :

$level to level travel time + building to building tavel time$

We do not want the cleaner to spend too much time on travelling...

**Max Building Travel Time** : this is the maximum buildings to buildings time/distance a cleaner is allowed to travel.

For Amsterdam city, we set 20 min between buildling.

So each time the cleamer moves from Parool to Trouw, we add 20. In the sample we allow to move 2 times by settings 40:

**Max building to building distance allowed** : when evaluating if a cleaner can move to the next building we check if we allow her to do a long walk.

For Amsterdam City, since we set 20 min from Parool to Trouw (back and forward), if we put 19 here, the planner will forbid going from P to T and vice versa.

**Max Shift Floor allowed** : this the max floor distance a cleaner is allowed to jump

**Max Level change count** : this is the number of time a cleaner could change floor.

## Weight

Weight Travel Time

Weight Cleaning Time

Weight Rooms cleaned

**Weight Epsilon Credits** : put -1 if you want to balance by credits otherwise 0

** Weight Epsilon Rooms** :put -1 if you want to balance by rooms otherwise 0

*Explanation : Epsilon is a deviation, so the more we deviate from the mean, the more we penalize the objective, thus the negative number*

### Award

Award Level : Weight Level Award

Award Room : Weight Room Award

Award Building : Weight Building Award

### Distance Matrix

The distance matrix is the distance between buildings. We set the distance to 20min, meaning that the planner will have to decide if it is better to travel 20min to clean a room.

The reason why we have the other way round is that we may want to prevent travelling the other way round.

```
{
"locations": [
"P",
"T",
],
"distances": [
[
"0",
"20",
],
[
"20",
"0",
]
]
}
```

## Individual Cleaner constraints

After the global constraint is set, you can override the decision for each individual cleaner :

**Time windows** (from -to) :

**Affinity** : you can favorize a Building, floors, rooms, and room categories. The weight associated will increase the importance of your choice when the planner will have to make a decision.

**Credits** :

**No Rooms** :