rcpsp33.py
026 027 028 029 030 031 032
|
#rcpsp32.py
:
#====資源制約
res=prob.addResource("Resource",capacity={(0,"inf"):10})
mode={}
for i in data:
mode[i]=Mode("M{0:02d}_{1:02d}".format(i,data[i][3]),duration=data[i][1])
mode[i].addResource(res,requirement=data[i][3])
act[i].addModes(mode[i])
|
この部分を次のように書き換えます。行030の前で、1人で何日かかるかをperiodとして計算し、1人でperiod期間仕事をするようにスケジューリングを行って、そのあとで並列化を行っています。
026 027 028 029 030b 030 031 031a 032
|
#rcpsp33.py
:
#====資源制約
res=prob.addResource("Resource",capacity={(0,"inf"):10})
mode={}
for i in data:
period=data[i][1]*data[i][3] #1人で何日かかるか
mode[i]=Mode("M{0:02d}_{1:02d}".format(i,period),duration=period)
mode[i].addResource(res,requirement=1)
mode[i].addParallel(start=1,finish=period,maxparallel=10)
act[i].addModes(mode[i])
|
これを実行すると次を得ます。
【rcpsp33.txt】
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
|
activity mode duration 1 2 3 4 5 6 7 8 910111213
---------------------------------------------------------------------
A01 M01_09 9 *6*3
A02 M02_04 4 *4
A03 M03_06 6 *6
A04 M04_16 16 *10*6
A05 M05_20 20 *4*10*6
A06 M06_20 20 *4*10*6
A07 M07_20 20 *4*10*6
A08 M08_04 4 *4
A09 M09_10 10 *4*6
A10 M10_15 15 *10*5
---------------------------------------------------------------------
resource usage/capacity
---------------------------------------------------------------------
Resource 10 910101010101010101010 5
10101010101010101010101010
---------------------------------------------------------------------
|
とても簡単に究極の平準化が行えると言えます。