2023年11月19日日曜日

委員会のチェック

 9つある委員会は、全て日勤です。解から、開催日を人手が割り出すのは手間です。また、ソフトエラーがあった場合、必ずしも、目的の人数が確保できている訳ではありませんので、最大確保できた日を報告することとします。また、確保できなかった場合、長日勤を含めてカウントするとどうなるかも報告しています。

このプロジェクトは、多人数かつタイトなプロジェクトで時間がかなりかかっています。


import sc3
import itertools
import ctypes

def 委員会制約():
    MessageBox = ctypes.windll.user32.MessageBoxW
    res=MessageBox(HWND, '委員会に長日を含めますか?(推奨)', '長日を含める選択', 3)
    include_long=False
    if res==6:
        include_long=True
    use_hard_constraint=False
    res=MessageBox(HWND, '委員会制約をハード制約にしますか?(推奨)', '委員会制約をハード制約にする選択', 3)
    if res==6:
        use_hard_constraint=True
    global_vars = globals()
    print("グローバル変数一覧:")
    for var_name, var_value in global_vars.items():
        if '委員会' in var_name and isinstance(var_value,list):#委員会という名前を持つリストオブジェクトのみリストアップ
            assign_comittee(var_name,var_value[0],include_long,use_hard_constraint)# ":", var_value)

def assign_comittee(name,vars_list,include_long,use_hard_constraint):
    print(name,vars_list,include_long)
    day_end=100
    if name=='現任教育委員会' or name=='新任教育委員会':#10日までに開催委員会
        day_end=制約開始日+10
    day_list=[]
    for day in 今月稼働日:
        and_list=[]
        for person in vars_list:
            v=sc3.GetShiftVar(person,day,'日勤')
            if include_long:
                v2=sc3.GetShiftVar(person,day,'ロング日勤')
                and_list.append(v2|v)
            else:
                and_list.append(v)
        vx=sc3.And(and_list)
        day_list.append(vx)
        if day>day_end:
            break
    if use_hard_constraint:
        sc3.AddHard(sc3.Or(day_list),name)
    else :
        sc3.AddSoft(sc3.Or(day_list),name,5)
    
def check_comittee_sub(name,vars_list,include_long=False):
    #print(name,vars_list)
    day_end=100
    if name=='現任教育委員会' or name=='新任教育委員会':#10日までに開催委員会
        day_end=制約開始日+10
    day_list=[]
    big_cnt_day=0
    big_cnt=0
    for day in 今月稼働日:
        and_cnt=0
        for person in vars_list:
            if include_long:
                v=shift_solution[person][day]=='日勤' or shift_solution[person][day]=='ロング日勤' or shift_solution[person][day]=='ロング日勤単発'
            else:
                v=shift_solution[person][day]=='日勤' 
            if v:
                and_cnt+=1
        if and_cnt>big_cnt:
            big_cnt=and_cnt
            big_cnt_day=day
        if big_cnt==len(vars_list):
            day_list.append(day)
        if day>day_end:
            break
    success=True
    if len(day_list)>=1:
        if include_long:
            print("長日を含めると")
        print("successful ",name)
        for day in day_list:
            print(name,"委員会日は、",daydef[day],"参加者全員は",len(vars_list),"人です")
        print("")
    else:
        if include_long:
            print("長日を含めても")
        print("unsuccessful ",name,len(vars_list),"人に対して",big_cnt,"人しかアサインされていません。",daydef[day])
        success=False
        if include_long:
            print("")
    
    return success
def check_comittee():
    
    global_vars = globals()
    print("グローバル変数一覧:")
    for var_name, var_value in global_vars.items():
        if '委員会' in var_name and isinstance(var_value,list):#list list
            success=check_comittee_sub(var_name,var_value[0])# ":", var_value)
            if not success:
                check_comittee_sub(var_name,var_value[0],True)


    

def post_main():
    check_comittee()
    

委員会制約()

ポスト処理後は、以下の表示となりました。
コンパイルの準備中
ソルバを呼び出し中です。
	制約をコンパイル中です。
	Python プロパティファイルの生成が終わりました。
グローバル変数一覧:
現任教育委員会 [5, 22, 28, 33, 46, 51, 56] False
新任教育委員会 [2, 29, 32, 54, 58, 62] False
リスク委員会 [3, 25, 31, 57, 64] False
感染委員会 [4, 24, 37, 55, 59, 66] False
業務委員会 [2, 21, 39, 52, 62, 65] False
倫理委員会 [3, 34, 41, 42, 49, 61] False
ケア委員会 [3, 23, 43, 48, 50, 53] False
教育企画委員会 [5, 6, 19, 30, 35, 45] False
記録委員会 [4, 26, 27, 38, 47, 60] False
Aチームリーダ会議 [6, 8, 9, 10] [12, 13, 14, 15, 16, 17, 18] 2
Bチームリーダ会議 [7, 11, 12, 13] [12, 13, 14, 15, 16, 17, 18] 2
今月休日8人以上 8 [5, 11, 12, 13, 18, 19, 25, 26, 32, 33] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
今月平日副看護師長会議日以外9人以上 9 [6, 7, 8, 9, 10, 14, 15, 16, 17, 20, 21, 22, 23, 27, 28, 29, 30, 31, 34, 35] [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
今月副看護師長会議日9人以上 9 [24] [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69]
	Algorithm 1 Solving Process Started..
			o 2887   16.728000(sec) 
			o 2738   16.861000(sec) 
			o 2677   17.144000(sec) 
			o 2593   17.609000(sec) 
			o 2534   17.730000(sec) 
			o 2509   17.818000(sec) 
			o 2440   17.914000(sec) 
			o 2418   18.003000(sec) 
			o 2363   18.090000(sec) 
			o 2318   18.174000(sec) 
			o 2282   18.281000(sec) 
			o 2265   18.373000(sec) 
			o 2219   18.473000(sec) 
			o 2150   18.576000(sec) 
			o 2022   18.726000(sec) 
			o 2003   18.808000(sec) 
			o 1948   18.896000(sec) 
			o 1890   18.983000(sec) 
			o 1883   19.061000(sec) 
			o 1843   19.139000(sec) 
			o 1789   19.299000(sec) 
			o 1733   19.433000(sec) 
			o 1670   19.525000(sec) 
			o 1642   19.630000(sec) 
			o 1587   19.798000(sec) 
			o 1573   19.878000(sec) 
			o 1497   20.035000(sec) 
			o 1432   20.116000(sec) 
			o 1340   20.400000(sec) 
			o 1332   20.482000(sec) 
			o 1315   20.592000(sec) 
			o 1278   20.767000(sec) 
			o 1194   20.913000(sec) 
			o 1172   20.993000(sec) 
			o 1112   21.085000(sec) 
			o 1104   21.164000(sec) 
			o 1094   21.243000(sec) 
			o 1073   21.326000(sec) 
			o 1024   21.616000(sec) 
			o 1006   21.699000(sec) 
			o 999   21.780000(sec) 
			o 972   21.869000(sec) 
			o 939   21.958000(sec) 
			o 927   22.037000(sec) 
			o 911   22.118000(sec) 
			o 897   22.208000(sec) 
			o 864   22.312000(sec) 
			o 857   22.393000(sec) 
			o 832   22.479000(sec) 
			o 825   22.575000(sec) 
			o 807   22.656000(sec) 
			o 784   22.761000(sec) 
			o 770   22.868000(sec) 
			o 764   22.948000(sec) 
			o 749   23.195000(sec) 
			o 708   23.274000(sec) 
			o 692   23.360000(sec) 
			o 684   23.445000(sec) 
			o 669   23.537000(sec) 
			o 646   23.637000(sec) 
			o 632   23.819000(sec) 
			o 611   23.956000(sec) 
			o 586   24.037000(sec) 
			o 571   24.119000(sec) 
			o 548   24.383000(sec) 
			o 521   24.496000(sec) 
			o 504   24.592000(sec) 
			o 497   24.870000(sec) 
			o 490   24.955000(sec) 
			o 468   25.050000(sec) 
			o 442   25.287000(sec) 
			o 438   25.372000(sec) 
			o 416   25.457000(sec) 
			o 407   25.539000(sec) 
			o 392   25.808000(sec) 
			o 376   25.903000(sec) 
			o 368   25.984000(sec) 
			o 353   26.120000(sec) 
			o 350   40.217000(sec) 
			o 338   40.329000(sec) 
			o 333   40.490000(sec) 
			o 329   40.598000(sec) 
			o 323   40.742000(sec) 
			o 308   40.834000(sec) 
			o 295   41.180000(sec) 
			o 291   41.284000(sec) 
			o 287   41.526000(sec) 
			o 280   41.625000(sec) 
			o 272   41.704000(sec) 
			o 267   55.882000(sec) 
			o 262   56.089000(sec) 
			o 257   56.176000(sec) 
			o 252   56.261000(sec) 
			o 247   56.582000(sec) 
			o 239   56.681000(sec) 
			o 231   56.787000(sec) 
			o 226   56.873000(sec) 
			o 221   56.964000(sec) 
			o 213   81.083000(sec) 
			o 212   105.596000(sec) 
			o 210   105.677000(sec) 
			o 206   105.769000(sec) 
			o 202   105.848000(sec) 
			o 198   106.304000(sec) 
			o 196   106.438000(sec) 
			o 194   106.518000(sec) 
			o 191   106.757000(sec) 
			o 190   106.837000(sec) 
			o 188   106.933000(sec) 
			o 186   107.012000(sec) 
			o 184   107.386000(sec) 
			o 183   107.742000(sec) 
			o 181   108.191000(sec) 
			o 178   108.484000(sec) 
			o 176   108.569000(sec) 
			o 174   109.120000(sec) 
			o 170   109.210000(sec) 
			o 168   109.290000(sec) 
			o 166   109.373000(sec) 
			o 164   109.656000(sec) 
			o 162   109.930000(sec) 
			o 160   110.008000(sec) 
			o 158   110.088000(sec) 
			o 156   110.167000(sec) 
			o 154   110.430000(sec) 
			o 149   110.526000(sec) 
			o 147   110.606000(sec) 
			o 145   110.687000(sec) 
			o 143   110.925000(sec) 
			o 141   111.321000(sec) 
			o 135   111.558000(sec) 
			o 134   111.643000(sec) 
			o 132   111.784000(sec) 
			o 130   111.864000(sec) 
			o 128   111.943000(sec) 
			o 126   112.346000(sec) 
			o 125   112.451000(sec) 
			o 123   112.530000(sec) 
			o 121   112.622000(sec) 
			o 120   137.179000(sec) 
			o 118   137.262000(sec) 
			o 115   137.376000(sec) 
			o 113   137.460000(sec) 
			o 112   137.970000(sec) 
			o 109   138.207000(sec) 
			o 108   138.288000(sec) 
			o 107   138.368000(sec) 
			o 106   138.965000(sec) 
			o 105   139.044000(sec) 
			o 104   139.125000(sec) 
			o 103   139.205000(sec) 
			o 101   139.556000(sec) 
			o 98   139.636000(sec) 
			o 97   140.223000(sec) 
			o 92   140.411000(sec) 
			o 91   140.494000(sec) 
			o 89   140.575000(sec) 
			o 88   140.654000(sec) 
			o 86   140.734000(sec) 
			o 85   140.819000(sec) 
			o 84   140.901000(sec) 
			o 82   141.306000(sec) 
			o 81   141.384000(sec) 
			o 80   141.465000(sec) 
			o 78   141.546000(sec) 
			o 77   141.707000(sec) 
			o 76   141.787000(sec) 
			o 74   141.900000(sec) 
			o 72   141.980000(sec) 
			o 70   142.111000(sec) 
			o 68   142.191000(sec) 
			o 67   142.270000(sec) 
			o 66   142.357000(sec) 
			o 65   142.514000(sec) 
			o 64   142.846000(sec) 
			o 62   142.926000(sec) 
			o 59   143.006000(sec) 
			o 58   143.085000(sec) 
			o 55   143.165000(sec) 
			o 54   143.245000(sec) 
			o 52   143.324000(sec) 
			o 50   143.405000(sec) 
			o 49   143.484000(sec) 
			o 48   143.896000(sec) 
			o 46   143.976000(sec) 
			o 43   144.054000(sec) 
			o 41   144.261000(sec) 
			o 40   144.341000(sec) 
			o 39   144.449000(sec) 
			o 37   144.586000(sec) 
			o 36   144.667000(sec) 
			o 35   144.748000(sec) 
			o 34   144.857000(sec) 
			o 33   147.963000(sec) 
			o 32   148.264000(sec) 
			o 31   148.850000(sec) 
			o 30   149.683000(sec) 
			o 29   152.470000(sec) 
			o 28   152.940000(sec) 
			o 27   155.131000(sec) 
			o 26   157.387000(sec) 
			o 25   157.683000(sec) 
			o 23   160.193000(sec) 
			o 22   160.365000(sec) 
			o 21   160.537000(sec) 
			o 20   160.705000(sec) 
			o 19   161.021000(sec) 
			o 18   163.325000(sec) 
			o 17   164.045000(sec) 
			o 16   170.757000(sec) 
			o 15   171.258000(sec) 
			o 14   173.438000(sec) 
			o 12   173.907000(sec) 
			o 10   175.485000(sec) 
			o 9   188.802000(sec) 
			o 8   191.120000(sec) 
			o 7   215.816000(sec) 
			o 6   220.261000(sec) 
			o 5   223.345000(sec) 
	Python プロパティファイルの生成が終わりました。
 _____________________________________
|           |           |             |
|   Weight  |   Errors  |    Cost     |
|___________|___________|_____________|
|           |           |             |
|         7 |         0 |           0 |
|         6 |         0 |           0 |
|         5 |         0 |           0 |
|         3 |         0 |           0 |
|         2 |         2 |           4 |
|         1 |         1 |           1 |
|___________|___________|_____________|
|                       |             |
|         Total         |           5 |
|_______________________|_____________|
	*********UB=5(0)  267.77(cpu sec)
o 5(0)
解探索が終了しました。 270 (秒)
解が得られました。
ポスト処理を実行します。ソルバを呼び出し中です。
グローバル変数一覧:
successful  現任教育委員会
現任教育委員会 委員会日は、 2023-10-11 参加者全員は 7 人です
現任教育委員会 委員会日は、 2023-10-12 参加者全員は 7 人です

successful  新任教育委員会
新任教育委員会 委員会日は、 2023-10-02 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-03 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-04 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-05 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-06 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-10 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-11 参加者全員は 6 人です
新任教育委員会 委員会日は、 2023-10-12 参加者全員は 6 人です

successful  リスク委員会
リスク委員会 委員会日は、 2023-10-30 参加者全員は 5 人です
リスク委員会 委員会日は、 2023-10-31 参加者全員は 5 人です

successful  感染委員会
感染委員会 委員会日は、 2023-10-02 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-03 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-04 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-05 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-06 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-10 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-11 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-12 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-13 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-16 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-17 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-18 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-19 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-20 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-23 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-24 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-25 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-26 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-27 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-30 参加者全員は 6 人です
感染委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

successful  業務委員会
業務委員会 委員会日は、 2023-10-20 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-23 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-24 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-25 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-26 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-27 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-30 参加者全員は 6 人です
業務委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

successful  倫理委員会
倫理委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

successful  ケア委員会
ケア委員会 委員会日は、 2023-10-23 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-24 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-25 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-26 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-27 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-30 参加者全員は 6 人です
ケア委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

successful  教育企画委員会
教育企画委員会 委員会日は、 2023-10-26 参加者全員は 6 人です
教育企画委員会 委員会日は、 2023-10-27 参加者全員は 6 人です
教育企画委員会 委員会日は、 2023-10-30 参加者全員は 6 人です
教育企画委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

successful  記録委員会
記録委員会 委員会日は、 2023-10-05 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-06 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-10 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-11 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-12 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-13 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-16 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-17 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-18 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-19 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-20 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-23 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-24 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-25 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-26 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-27 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-30 参加者全員は 6 人です
記録委員会 委員会日は、 2023-10-31 参加者全員は 6 人です

Aチームリーダ会議 [6, 8, 9, 10] [12, 13, 14, 15, 16, 17, 18] 2
Aチームリーダ会議は確保できました。必要人数 2 人に対して 2 人確保しました。 2023-10-12
Bチームリーダ会議 [7, 11, 12, 13] [12, 13, 14, 15, 16, 17, 18] 2
Bチームリーダ会議は確保できました。必要人数 2 人に対して 2 人確保しました。 2023-10-10
ポスト処理を終了しました。 1 (秒)

0 件のコメント:

コメントを投稿