MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
Job | Task | Machine | Duration | Manning
----|------|---------|----------|--------
Ja | Ta1 | M1 | 2 | 3
Ja | Ta2 | M2 | 6 | 2
Jb | Tb1 | M2 | 5 | 2
Jb | Tb2 | M1 | 3 | 3
Jb | Tb3 | M2 | 3 | 2
Jc | Tc | M2 | 4 | 2
Jd | Td1 | M1 | 5 | 4
Jd | Td2 | M2 | 2 | 1
In the previous example, resources outside the schedule were not taken into account. External reourses can dramtically affect whether or not the overall schedule is workable. One such limiting resource is manpower. The Job schedule has now been extended to include the manpower requirement for each of the 8 tasks.
Above, is the manpower requirement for the schedule calculated in the previous example. Our actual manpower resource is 6 workers, which is clearly exceeded in two places and were we to employ 2 additional staff there would be considerable wastage.
We now modify the program from the previous example to include a cummulative/4 constraint for the manpower resource. This constraint must apply to the whole schedule for all machines as it is an overall limiting resource which may not be exceeded. Allocating manpower to the tasks is more complicated than allocating machines, as different tasks require different manpower.
program :- Jobs = [Ja,Jb,Jc,Jd],
M1_Tsk = [Ta1,Tb2,Td1], M2_Tsk = [Ta2,Tb1,Tb3,Tc,Td2],
M1_Dur = [Da1,Db2,Dd1], M2_Dur = [Da2,Db1,Db3,Dc,Dd2],
M1_Dur = [ 2, 3, 5], M2_Dur = [ 6, 5, 3, 4, 2],
M1_Man = [ 3, 3, 4], M2_Man = [ 2, 2, 2, 2, 1],
append(M1_Tsk,M2_Tsk,Tasks),
append(M1_Dur,M2_Dur,Durations),
append(M1_Man,M2_Man,Manning),
Tasks in 0..100, Jobs in 0..100, Men = 6,
Ta2 ?>= Ta1 + Da1, Tb2 ?>= Tb1 + Db1,
Td2 ?>= Td1 + Dd1, Tb3 ?>= Tb2 + Db2,
Ja ?= Ta2 + Da2, Jc ?= Tc + Dc,
Jb ?= Tb3 + Db3, Jd ?= Td2 + Dd2,
cumulative(M1_Tsk,M1_Dur,[1,1,1],1),
cumulative(M2_Tsk,M2_Dur,[1,1,1,1,1],2),
cumulative(Tasks,Durations,Manning,Men),
minimize_maximum(label(Tasks),Jobs),
print((Tasks,Durations,Manning,Jobs)).
Execution of the program derives the following results (in 0.02 seconds):
[user] ?- program.
[0,7,2,5,0,11,10,7], [2,3,5,6,5,3,4,2], [3,3,4,2,2,2,2,1], [11,14,14,9]
yes
The resulting lists correspond to the optimised Start times, Durations, Manpower and Job Completions. The manpower schedule is illustrated more clearly below:
The manpower resource is clearly better utilised in the new schedule but we must also examine how this affects the job schedule.
The manpower resource has shifted the completion time by one time unit but the overall efficiency of the Job-Shop is now quite high.
In practice there are a number of other factors that must be taken into account in a typical Job-Shop. Manpower resources often vary with time due to holidays and sickness, a more thorough representation is therefore required.
Machines usaually require regular maintenance to be scheduled or different clean-up activities to be made after different tasks. Maintenance can easily be scheduled as fixed tasks with fixed constraints defining the start and duration on each machine, before the schedule is derived. Clean-up after or preparation before a given task is best subsumed within the task to be scheduled.
|