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 件のコメント:
コメントを投稿