计划网络图
概念: 称任何消耗资源的行动为作业,称作业的开始或结束为事件,事件本身不消耗资源。 关键路线是累计作业时间最长的路线。时间参数: 1)事件的最早时间: 事件 j j j的最早时间用 t E ( j ) t_{E}(j) tE(j)表示,它表示以事件 j j j为始点的各工作最早可能开始的时间,也表示以事件 j j j为终点的各工作最早可能完成的时间,它等于从始点事件到该事件的最长路线上所有工作的工时总和。事件最早时间可用下列递推公式,按照事件编号从小到大的顺序逐个计算。 设事件编号为 1 , 2 , ⋯   , n 1,2,\cdots,n 1,2,⋯,n,则: { t E ( 1 ) = 0 ; t E ( 1 ) 是与事件 j 相邻的各紧急事件的最早时间 t E ( j ) = m a x i { t E ( i ) + t ( i , j ) } \left\{ \begin{aligned} t_{E}(1)=0; \qquad \text{$t_{E}(1)$是与事件$j$相邻的各紧急事件的最早时间} \\ t_{E}(j)=\mathop{max}\limits_{i}\{t_{E}(i)+t(i,j)\} \end{aligned} \right. ⎩⎨⎧tE(1)=0;tE(1)是与事件j相邻的各紧急事件的最早时间tE(j)=imax{tE(i)+t(i,j)} 2)事件的最迟时间: { t L ( n ) = 总 工 期 ; t E ( 1 ) 是与事件 j 相邻的各紧急事件的最早时间 t L ( j ) = m i n j { t L ( j ) − t ( i , j ) } \left\{ \begin{aligned} t_{L}(n)=总工期; \qquad \text{$t_{E}(1)$是与事件$j$相邻的各紧急事件的最早时间} \\ t_{L}(j)=\mathop{min}\limits_{j}\{t_{L}(j)-t(i,j)\} \\ \end{aligned} \right. ⎩⎨⎧tL(n)=总工期;tE(1)是与事件j相邻的各紧急事件的最早时间tL(j)=jmin{tL(j)−t(i,j)} 例4.16(求最早开工时间) model: sets: events/1..8/:x; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6,5 7,5 8,6 7,6 8,7 8/:t; endsets data: t=5 10 11 4 4 0 15 21 25 35 0 20 15; enddata min=@sum(events:x); @for(operate(i,j):x(j)>=x(i)+t(i,j)); end例4,16(将关键路看做最长路)
model: sets: events/1..8/:d; operate(events,events)/1 2,1 3,1 4,2 5,3 4,3 5,4 6,5 6,5 7,5 8,6 7,6 8,7 8/:t,x; endsets data: t=5 10 11 4 4 0 15 221 25 35 0 20 15; d=1 0 0 0 0 0 0 -1; enddata max=@sum(operate(i,j):t(i,j)*x(i,j)); @for(events(i):@sum(operate(i,j):x(i,j))- @sum(operate(j,i):x(j,i))=d(i)); end