# Resource assignment¶

The solver decides which resource(s) should be assigned for a task to be processed. A Worker instance can process only one task per time period whereas a CumulativeWorker can process different tasks at the same time.

## Single resource assignment¶

Tell the task that it requires a set of resources to be processed

assemble_engine = FixedDurationTask('AssembleCarEngine', duration=10)
john = Worker('JohnBenis')

# the AssembleCarEngine can be processed by JohnBenis ONLY


## Multiple resources assignment¶

To constraint different resources to process one single task.

paint_car = FixedDurationTask('PaintCar', duration=13)

john = Worker('JohnBenis')
alice = Worker('AliceParker')

# the PaintCar task requires JohnBenis AND AliceParker


## Alternative resource assignment¶

The SelectWorkers class let the solver decide which resource(s) to assign to a task, among a collection of workers that have the ability to process the task. The solver can decide to assign exactly $$n$$ resources, at most $$n$$ or at least $$n$$. For example, if 3 drillers are available, and if a drilling task can be processed by any of one of these 3 drillers, it is defined as:

drilling_hole = FixedDurationTask('DrillHolePhi10mm', duration=10)
driller_1 = Worker('Driller1')
driller_2 = Worker('Driller2')
driller_3 = Worker('Driller3')
# the DrillHolePhi10mm task can be processed by the Driller1 OR the Driller2 OR the Driller 3
nb_workers_to_select=1,
kind='exact'))


This tells the solver to assign exactly 1 resource among the list of the three workers able to process the task. The kind parameter can take either 'exact' (default value), 'min' or 'max' values.

nb_workers can take any integer between 1 (default value) and the number of capable workers from the list.