Purpose
The changeover (set-up) constraint.
By running an activity A the state of the manufacturing environment is changed. The start of an activity B depends on the state of the manufacturing environment also.
There is a changeover constraint between activity A and activity B if the following situation happens. If activity A and B run on the same machine M such as A is right before B then there is need to run between them a special activity CBA, called changeover. The purpose of the activity CBA is to bring the manufacturing environment (usually the machine M) into a state such as the activity B is able to start.
PODL Keywords
before-or-after-changeover
:before-co :after-co :mechanism :interval
PODL syntax and semantics
Suppose we have the activities A and B which may use the same machine to run. In order to start activity B after A (on the same machine) we have to run the changeover (setup) activity C1 first. In order to start activity A after B (on the same machine) we have to run the changeover (setup) activity C2 first. This relationship can be easily expressed by a table:
Changeover relationship
___________________________ | | A | B | |_____|________|__________| | A | | C1 | |_____|________|__________| | B | C2 | | |____ |________|__________|
In PODL, we first declare the changeover activities as having the type “changeover”:
:activity-type changeover
Here is the declaration of C1 and C2 in PODL:
#=================================================================== # Changeovers #=================================================================== ( activity :name C1 :activity-type changeover :duration 2 :uses ( role :role-name MACHINE :amount 1) ) ( activity :name C2 :activity-type changeover :duration 18 :uses ( role :role-name MACHINE :amount 1) )
The changeover constraint between all the activities A, C1, C2 and B is expressed as a temporal constraint, as is shown in the following PODL code:
( activity :name A :duration 1 :uses ( role :role-name MACHINE :amount 1 ) :produces ( resource-set :set-name A-RAW :role-name raw :amount 1 ) ) ( activity :name B :duration 1 :uses ( role :role-name MACHINE :amount 1 ) :produces ( resource-set :set-name B-RAW :role-name raw :amount 1 ) :temporal-relation ( before-or-after-changeover :activity A :before-co C1 :after-co C2 :mechanism machine1 :interval 0 ) )
The changeover constraint is declared inside the declaration of the
activity B and has the following syntax:
:temporal-relation ( before-or-after-changeover :activity A :before-co C1 :after-co C2 :mechanism machine1 :interval 0 )
and has the following meaning:
- The changeover C1 will be used when the activity A is right before the activity B and all of them on the same :mechanism machine1.
- The changeover C2 will be used when the activity A is right after the activity B and all of them on the same :mechanism machine1.
- There is an :interval of 0 units of time between activity B and any of its changeover: C1 and C2.
Implementation
It has been implemented as a :temporal-relation.
The difficulty of this constraint is its disjunctive nature. To emphasis this characteristic let us decompose the initial changeover relationship into smaller relations. We say that the activity A and B are in a “changeover” relation
( A changeover B )
if there is a situation in the manufacturing process such us there is need for a changeover activity to run between them. We consider the “changeover relation” as a symmetric one. We can extend this relation for all pairs of activities (except changeover activities, themselves) by adding to the model the “empty changeover activity”. We use the following notations:
( A B on-machine M )
activities A and B are both running on the machine M
( changeover-of B A on-machine M is CBA )
if B is before A and there is no other activity between B and A and both are running on machine A then there is a changeover CBA between them
( A right-changeover CAB )
CAB is a changeover that can run after A
( CAB left-changeover B )
CAB is a changeover that can run before B
Using these notation, the changeover constraint can be expressed as follows
( A changeover B ) = if ( A B on-machine M ) and ( changeover-of B A on-machine M is CBA ) and ( changeover-of A B on-machine M is CAB ) then ( A right-changeover CAB ) and ( CAB left-changeover B ) or ( B right-changeover CBA ) and ( CBA left-changeover A ) ( A right-changeover CAB ) = ( A before CAB ) and ( A on-same-machine CAB) ( CBA left-changeover A ) = ( CBA before A ) and ( CBA on-same-machine A)
The algorithm evaluates the truth value of the “if” condition. If true, propagates the branches of the or and keeps the results into
- the bit vector of the IntervalVariable:
start times for A and B - the activity list of the Schedule object:
here instances of the changeover activities are asserted or retracted
Future work has to be done for:
- incorporating the changeover constraint into texture measurements
- minimizing the capacity used by changeovers