有安排上的問題,許多家庭。我期待到那裏 我的地方從一個家庭到另一個家庭 過渡需要重新配置機器(建立時間)工作/家庭任務的一個問題。表達設置時間與累積值
我使用cumulatives[2/3]
來解決這個問題,但我不確定如何設置時間 可以表示。
在這個小例子,我有屬於3個不同家庭的10種任務。任何任務都可以在任何機器上運行,但是從一個系列中的一個任務切換到另一個系列中的另一個任務需要添加安裝時間。
:- use_module(library(clpfd)).
:- use_module(library(lists)).
go(Ss, Es, Ms, Tm, Lab) :-
Ss = [S1, S2, S3, S4,S5,S6,S7,S8,S9,S10], %Starttimes
Es = [E1, E2, E3, E4,E5,E6,E7,E8,E9,E10], %Endtimeds
Ms = [M1, M2, M3, M4,M5,M6,M7,M8,M9,M10], %MachineIds
domain(Ss, 1, 30),
domain(Es, 1, 30),
domain(Ms, 1, 3),
Tasks = [
%Family 1: Setuptime, Su1 = 4,
task( S1, 6, E1, 1, M1), %Task T1
task( S2, 6, E2, 1, M2), %Task T2
task( S3, 3, E3, 1, M3), %Task T3
task( S4, 7, E4, 1, M4), %Task T4
%Family 2: Setuptime, Su2 = 3
task( S5, 5, E5, 1, M5), %Task T5
task( S6, 8, E6, 1, M6), %Task T6
task( S7, 4, E7, 1, M7), %Task T7
%Family 3: Setuptime, Su3 = 5
task( S8, 4, E8, 1, M8), %Task T8
task( S9, 4, E9, 1, M9), %Task T9
task(S10, 5, E10, 1, M10) %Task T10
],
%All machines has resource capacity = 1
Machines = [
machine( 1, 1), %M1
machine( 2, 1), %M2
machine( 3, 1) %M3
],
cumulatives(Tasks, Machines, [bound(upper),task_intervals(true)]),
maximum(MaxEndTime, Es),
%Make the list of options to pass to the labeling predicate
append([ [minimize(MaxEndTime)], [time_out(Tm, _)], Lab ], LabOpt),
Vars=[S1,M1,S2,M2,S3,M3,S4,M4,S5,M5,S6,M6,S7,M7,S8,M8,S9,M9,S10,M10],
labeling(LabOpt, Vars).
一個有效的時間表(但不是最優的)可能是:
M1: Su1,T1,T2,Su3,T10
M2: Su2,T5,T6,Su3,T8
M3: Su1,T3,T4,Su2,T7,Su3,T9
如何與使用cumulatives[2/3]
一起表達這一點的最好方法是什麼?通過使每個任務的持續時間成爲一個域變量並向其添加額外的約束條件?