小妹作业中遇到这个问题请帮帮俺
[attach]64767[/attach]这是个串行调度,伪代码如下:
初始化: n=1;//表示第一阶段
ps1={1}; //表示最开始时可选的活动为第一个活动
ST1=0; //ST 活动的最早开始时间,这个表示第一个活动的开始时间为0;
While | PSn |<J , do 步骤n // PSn 表示不完全计划即已被安排的所有工作,J表示总共J个活动
Begin
计算En和πRt,t-1,2,…D, //En为可行任务集合,D为总工期上界,πRt 表示资源在t时刻的剩余量
En={j|j∉PSn ,Sj⊆PSn }; // 可行任务集合En为除了已经安排的集合PSn剩下的可行
πRt=Q-Σqj; // Q为给定的资源总限量, Σqj 为t时刻正在执行的任务集合 需要的总的资源量
ESj*=max{STi+di|i∈Pj*}; //活动j的最早开始时间 是j的所有紧前活动i的开始时间加上其工期di取最大值
STj*=min{ESj*≤t≤LSj*, rj*≤πRτ, τ=t,t+1,….t+dj*-1};// 活动j的开始时间满足的条件是,在它最早开始时间ESj与最晚开始时间LSj之间,且j需要的资源量rj小于等于此时可用的剩余资源总量
PSn+1= PSn∪{j*}; // 此时n+1阶段的不完全工作集合加上刚安排的工作j
n=n+1; // 进入下一个阶段 (∑∉∈)
END
经过以上步骤我们得到的是:
1. 一个可行的活动序列,得到序列就得到整个的时间,不要求时间最短。
2. 这个过程进行多次得到多种可行的活动序列。
3. 这个序列是在资源的约束下,不求最省资源。
4. 这个序列满足最前面的图的前后关系约束。
[ 本帖最后由 keenbo 于 2012-9-13 22:15 编辑 ]