Task Sequencing

Sequencing tasks in time according to the available resources: A task sequencing problem can be solved for work defined according to two hierarchies: orders and tasks
If only orders are provided, they will be scheduled as if they are the lowest level detail that needs to be handled by the sequencing model. If however, orders are defined that contain tasks,
these tasks are considered the lowest level detail of work that needs to be sequenced. The order level is then only used to incorporate priorities.

Input

Order

An Order is an executable piece of work that can take a pre-determined amount of time, and that needs to be handled with a certain priority. It can contain multiple tasks.
If tasks are provided, they are sequenced rather than the order itself. An order can have an availability and should have a resourceRequirement.

Task

A task is the lowest-level detail for work that needs to be scheduled that can be provided in the model. If provided, it is always defined under the higher hierarchy of an order. Futher, we define tasks using
a duration (pre-determined amount of time to finish the task), a resourceRequirement and (optionally) an availability.

ResourceRequirement

For the work that is incorporated in the model (from either orders or tasks), a resource requirement can be defined. A resource requirement can be specified using three different constructs:

  • a combination of the name of the capacitated resource type and how many of these resources are required.
  • a combination of the name of the plannable resource type and the name of the specific resource that is required.
  • a combination of the name of the plannable resource type and an object that incorporates how many resources and what (additional) skills they require.
    {
      "hammer": 2,
      "location": "location0"
      "operator": {
        "value" : 2,
        "skill" : ["electrician", "heavy tool"]
      }
    }

Resource

There are 2 types of Resources:

  • a Plannable Resource: demands that a resource is explicitly assigned to a task.
  • a Capacitated Resource: only requires available capacity of a resource. Specific assignment is not necessary.

For example, take the assignment problem of a task "hammer a nail" that requires a technician and a hammer to execute that task.
Usually, we don't need to know that for task "hammer a nail", you need a specific hammer with serial number SNxxx.
You just need to know that there are ample hammers availabe for all tasks that require a hammer to be performed at the same time. E.g. there are 4 hammers available and you will take 1.
For a technician however, it might be required that the schedule points out who will execute that task.
Will it be John, Alex or Lee?
Therfore, a hammer can be considered a Capacitated Resource, while a technician is a Plannable Resource in this example.

Structure of a Capacitated Resource:

{
"type": "capacitated",
"name": "hammer",
"supply": 4,
"availability": [ {
  "from": "2021-02-06T09:00:00",
  "to": "2021-02-06T18:00:00"
}]
}

Structure of a Plannable Resource:

{
"type": "plannable",
"name": "technician",
"supply": [
  {
    "name": "John",
    "skill": ["a","b"],
    "availability": [ {
      "from": "2021-02-06T09:00:00",
      "to": "2021-02-06T18:00:00"
    }]
  }
]
}

Constraints

CodeDescription
Resource AvailabilityA task should not be planned to a resource outside its availability
Resource CapacityA resource should not assigned at the same time to more than one task.
Order PriorityThe priority of the orders that are assigned is maximized.

Output