2025年7月10日木曜日

7月10日リリース機能その1

 1)スタッフ毎のシフトとタスクのスタッフ名チェックを廃止


Syncfusionの仕様なのか不明ですが、formulaを書くとExcel上では動いているのですが、それを再び読むと、formulaがそのまま表示されてしまい、どうにも動きません。例えば、

=スタッフ定義!B3 

というformulaを書くと、Excel上では動作しますが、それをスケジュールナースでインポートすると、Formulaの内容が表示されてしまって上手く行きませんでした。仕方なくスタッフ名チェックを外すことにしました。

スタッフ名は、もはや見ていないので、予定と同様何であっても問題なく読み込めるようになります。




2025年7月9日水曜日

夜勤禁止・宅直禁止ラベルをシフト予定上で作るには

 タスク型勤務表において、夜勤や、宅直は、通常業務時間帯シフトとは独立に存在しえるので、タスクとなります。タスク予定は、シフト予定とは別画面となります。そうなると、タスクの禁止、例えば、夜勤禁止、宅直禁止といったラベルは、タスク予定上で操作することになり、ちょっと面倒です。

そこで、シフト予定画面上で、夜勤禁止や、宅直禁止といったラベルを作ることにします。このラベルを使うことによってシフト状態は指定できなくなってしまいますが、それでも実用的な場合があります。




2025年7月8日火曜日

経験年数5年以下の組み合わせを禁止

import sc3
import itertools
import math

def 夜勤ペア禁止(list0,list1):
    for day in 全日:
        if  day<制約開始日:
            continue
        or_list0=[]
        or_list1=[]
        #sc3.print(daydef[day]+"夜勤ペア禁止しました。")
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'入り')#
            sc3.print(staffdef[person]+' ')
            or_list0.append(v1)
        sc3.print('\n')
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'入り')#
            sc3.print(staffdef[person]+' ')
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"夜勤ペア禁止",5)

        or_list0.clear()
        or_list1.clear()
        
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'明け')#
            or_list0.append(v1)
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'明け')#
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"夜勤ペア禁止",5)

        sc3.print(daydef[day]+"夜勤ペア禁止しました。\n")
def 休日日勤ペア禁止(list0,list1):
    for day in 今月休診日:
        or_list0=[]
        or_list1=[]
        #sc3.print(daydef[day]+"夜勤ペア禁止しました。")
        for person in list0:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            or_list0.append(v1)
        for person in list1:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            or_list1.append(v1)
        v1=sc3.Or(or_list0)
        v2=sc3.Or(or_list1)
        sc3.AddSoft(~(v1&v2),"休日日勤ペア禁止",5)
        sc3.print(daydef[day]+"休日日勤ペア禁止しました。\n")

def 夜勤人数は最大1人(slist):
    for day in 全日:
        if  day<制約開始日:
            continue
        list0=[]
        for person in slist:
            v1=sc3.GetShiftVar(person,day,'入り')#
            list0.append(v1)
        sc3.AddSoft(sc3.SeqError(0,1,1,list0),"夜勤人数は最大1人",5)

def 休日日勤人数は最大1人(slist):
    for day in 今月休診日:
        list0=[]
        for person in slist:
            v1=sc3.GetShiftVar(person,day,'日勤')#
            list0.append(v1)
        sc3.AddSoft(sc3.SeqError(0,1,1,list0),"休日日勤人数は最大1人",5)

def 合計年数未満の組み合わせを禁止する(years):#Mar302020
    print(str(years)+"年数未満の組み合わせを禁止します。")
    s=set() #set
    for person in 経験年数属性.keys():
        経験年数=経験年数属性[person]
        s.add(経験年数)
    for 経験年数 in s:
        if 経験年数 * 2 < years:#Mar302020 Self組み合わせ の総数和<=1に制約する
            slist=[]
            for person in 経験年数属性.keys():
                if 経験年数 == 経験年数属性[person]:
                    slist.append(person)
            夜勤人数は最大1人(slist)
            休日日勤人数は最大1人(slist)
                
    for v in itertools.combinations(s,2):
        if v[0]+v[1]=0:
            連休.append(D)
            D -=1
    #後方を探索する
    D=day+1
    while D<=制約終了日 and D in 休日:
        連休.append(D)
        D +=1
    #print(連休)
    連休.sort()
    print("連休",連休)
    return 連休#ソートした連休を返す


合計年数未満の組み合わせを禁止する(合計年数最小値) #Jul072025 マクロ引数に変更



経験年数をスタッフプロパティで設定し、Pythonでそれらを読み取り、指定合計年数最小値未満の全ての組み合わせを禁止しています。








合算年数の指定は、マクロにして、Pythonコードをいじらなくても良いようにしています。

ログ例です。Debug出力も兼ねています。
コンパイルの準備中
ソルバを呼び出し中です。
	制約をコンパイル中です。
	Python プロパティファイルの生成が終わりました。
5年数未満の組み合わせを禁止します。
経験年数1年2年
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-01夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-02夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-03夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-04夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-05夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-06夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-07夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-08夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-09夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-10夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-11夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-12夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-13夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-14夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-15夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-16夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-17夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-18夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-19夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-20夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-21夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-22夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-23夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-24夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-25夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-26夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-27夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-28夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-29夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ10 スタッフ19 スタッフ29 スタッフ41 スタッフ44 スタッフ52 2025-06-30夜勤ペア禁止しました。
2025-06-01休日日勤ペア禁止しました。
2025-06-07休日日勤ペア禁止しました。
2025-06-08休日日勤ペア禁止しました。
2025-06-14休日日勤ペア禁止しました。
2025-06-15休日日勤ペア禁止しました。
2025-06-21休日日勤ペア禁止しました。
2025-06-22休日日勤ペア禁止しました。
2025-06-28休日日勤ペア禁止しました。
2025-06-29休日日勤ペア禁止しました。
経験年数1年3年
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-01夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-02夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-03夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-04夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-05夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-06夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-07夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-08夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-09夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-10夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-11夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-12夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-13夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-14夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-15夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-16夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-17夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-18夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-19夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-20夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-21夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-22夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-23夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-24夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-25夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-26夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-27夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-28夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-29夜勤ペア禁止しました。
スタッフ11 スタッフ20 スタッフ21 スタッフ30 スタッフ42 スタッフ61 スタッフ62 
スタッフ39 スタッフ40 スタッフ51 スタッフ60 2025-06-30夜勤ペア禁止しました。
2025-06-01休日日勤ペア禁止しました。
2025-06-07休日日勤ペア禁止しました。
2025-06-08休日日勤ペア禁止しました。
2025-06-14休日日勤ペア禁止しました。
2025-06-15休日日勤ペア禁止しました。
2025-06-21休日日勤ペア禁止しました。
2025-06-22休日日勤ペア禁止しました。
2025-06-28休日日勤ペア禁止しました。
2025-06-29休日日勤ペア禁止しました。

2025年7月5日土曜日

通常、休みシフトは土日祝のみだが、今月診療日に予定で休みが入力されることもある

 これをGUIでやろうとすると、

■今月診療日に、休みシフトをソフト制約で禁止にする

ことが一般的ですが、予定として入力された休みシフトがソフトエラーとなってしまうのが気に食わない、方もいらっしゃるかもしれません。

その場合は、Pythonで記述します。予定で何か入力された以外は、今月診療日の休みシフトを禁止にします。10行足らずで済みます。


def 土日祝休みは今月診療日予定がなければ不可():
    for day in 今月診療日:
        for person in 全スタッフ:
            if shift_schedules[person][day][0]=="":
                v=sc3.GetShiftVar(person,day,'土日祝休み')
                s="予定なしなら、平日診療日土日休み不可 "+staffdef[person]
                sc3.AddHard(~v,s)

土日祝休みは今月診療日予定がなければ不可()

2025年7月4日金曜日

Q.グループホームにつきましては、ライセンスを2022年に購入してお ります

 Ans.

大変失礼いたしました。グループホームプロジェクト作成履歴を確認しました。

その場合、

■現行プロジェクトからの軽微な変更にたいする質問でしたら、無料の範囲で対応可能かもしれません。

■あるいは、特養プロジェクトと同様に、一回限りの有償変更、または、1年間プロジェクト作成版(1年間レクチャ無制限、税込み5万5千円、変更案件)として受付可能です。


2025年7月3日木曜日

Q.グループホームもプロジェクト作成をお願いしたいです。 その場合料金はどうなりますでしょうか?

 Ans.

現状、特養プロジェクトで、お使い頂いておりますが、それとは別のライセンスとなります。(新規のライセンスが必要となります。)従い、サブスクまたは買い切り版のライセンスを新規にご購入いただく必要がございます。これは、有償プロジェクト作成の更改中であったとしても同様となります。



2025年7月2日水曜日

Branching Strategy

 新しいBranching Strategyを作成しました。これによりようやく全INRC2問題の厳密解証明がリーズナブルな時間範囲内に収まりました。最長で一カ月以上計算機を廻さないと厳密解証明が出来ませんでしたが、現在約1日で出来るようになりました。(ちなみにGPUは使っていませんが、GPU搭載マシンだと電気代に影響がありました)

具体的なBranchingは、これまでに報告されていない新しい方法です。難問の4題は、以下のようになりました。







そのエッセンスは人力で勤務表作成をで行うのと似ています。解は、後ほどGitHubに上げておきます。

ここ1年位、悶々として進展がなかったのですが、これで、ようやく前に踏み出せます。残りの未解決問題SchedulingBenchmark3問について取り組んで行くことができます。

大規模化でのLpソルバ問題は、つい最近CuoptとHighs(Version1.11.0)が、Warm Startをサポートするようになりました。これによりどちらを使ってもLPソルバの問題は、解消している筈です。待ち望んでいた外部環境は全て整っています。

後は、内部問題(サブ問題)だけの問題です。こちらは、新たな設計開発が必要になり、現在構想中です。

<今後の予定>

7-8月 未解決NSPへの取り組み

9月  Highsの最新版取り込み コード整理

10月 英論文化

11月 RPA内製化

1月 AIモデリング作業開始

4月 和論文化

2025年6月30日月曜日

連続勤務8日以内

 仕様上は、連続勤務9日を禁止にすればよいのですが、9日という長いパターンは、

■長いパターンソルバ負担大

■連続勤務8日禁止は、容易と思われる

ことから、連続勤務8日を禁止 で実装しています。



2025年6月29日日曜日

Q.スタッフ毎のシフト 先月分の引継ぎ?

 Ans.

先月部には、本設定を適用しない」オプションをオンにしてください。本設定は、ハード制約ですが、このオプションをオンにすると、本設定は無視(前月部は、全スタッフが全シフトオンになります)されるので、前月部と今月部の制約が異なるハードエラーとなる問題を回避することが出来ます。



2025年6月28日土曜日

次の日が休日のパターン問題

パターン最後で制約する(パターン後方タイプ)のは、好ましくありません。パターンの最初が制約最終日の場合、次の月のパターン日は、無視されてしまうからです。

これに対して、パターン最初(パターン前方タイプ)で見ていれば、先月からのパターンで効いてくれるので、問題なく作用します。

特に、パターン後方タイプのパターン最後が休日というパターンは問題です。制約最終日がパターン最初である場合は、次月が休日であっても効きません。

次のパターンは、本来は、後方パターンですが、前方パターンに変更した例です。

次の日が休日入りである場合は、呼び出し(オンコール)タスク禁止という例ですが、前方パターンに変換しています。


問題なのは、次月月始めが祝であることは、分からないので、予め特別の日の設定で、それを定義しています。(1月1日をケアしています。)



2025年6月27日金曜日

土日夜勤者の代休

 GUIで書けます。

■Aは、土日

■Bは、平日

になります。仕様的には、下のような仕様で一見難しそうに見えるのですが、

A=夜=入り または 明け 

つまり、土日の夜勤数と

B=代休=x

つまり、平日の代休数

が等しい 

と等号関係で記述出来ます。なので、Python を使うことなくGUIで記述可能となります。



2025年6月26日木曜日

放射線技師勤務表プロジェクト

お客さまの許可を頂いたので公開します。

現在、開発中のプロジェクトになります。正確には、5年前からお使い頂いていたのですが、最近、大きな変更要求を頂き有償プロジェクト変更を行うこととなりました。

 https://www.nurse-scheduling-software.com/japanese/publications/Automation_of_Radiological_Technologist_Rostering_with_Constraints2.pdf


これから、ご要求仕様に対してUpdateを行っていきます。

2025年6月24日火曜日

Q.設定変更の要望書

 Q.

2020年よりスケジュールナースを利用させていただき、大変助かっております。この5年間、勤務形態も様々な変更があり、勤務表作成時の追加作業が増えてまいりました。スケジュールナースの導いてくれた「解」で完結できることを希望しております。

設定変更の要望書、参考資料を添付して送ります。
拙い文章で理解し難い箇所もあるかと思いますので、zoom会議で捕捉説明させていただきたいです。

Ans.
変更規模が大きいので、有償になってしまいます。この規模の変更ですと、
 1年間サポート付(会議回数無制限)の5万5千円(税込み)をお勧めします。
1年というサポート期間の間に、制約や、最適化といった現代的な勤務表づくりに必要な知識をOJTでお教えします。そのためのZOOMレクチャは、何回でも無料です。

2025年6月23日月曜日

6月18日リリース機能 その6

 Excel スタッフ毎のシフト・タスクのエラー表示改善


スタッフ毎のシフトで名前が

スタッフプロパティシートと一致していない、というエラーを表示しています。

そもそも、次のようにExportしていれば、無用ですので、次回より検討したいと思います。


2025年6月22日日曜日

6月18日リリース機能 その5

 ■行制約 Day空集合に対して、ハード制約・ソフト制約に関係なく無視に変更

ハード制約は、無視していましたが、ソフト制約は無視していませんでした。今回、行制約Day空集合に対しては、全部無視にソルバを統一しました。



上で第6週は、Empty Day集合ですが、ソルバ上でのエラーは0です。(実行されません)

GUI解上では、黄色マーキングされる場合があります。



2025年6月21日土曜日

6月18日リリース機能 その4

 ■タスク勤務表で、タスク集合によるハード予定制約を含んだ場合での計数制約バグ修正


ソルバに致命的なエラー(ソルバ最適化機構にバグ)がありました。

2025年6月20日金曜日

6月18日リリース機能 その3

 ■解のコピー・ラインコピー追加

こちらは ラインコピーできます。


安直にそのままスタッフプロパティシートに張り付け出来ます。


2025年6月19日木曜日

6月18日リリース機能 その2

 ■解のコピー追加

解のコピーをすることが出来ます。



この使い道としては、「最小0」で、とりあえずの様子を見るための記述にします。


これで、解を出しておいて、必要部をコピーして、予定基数制約に張り付けることが出来るようになります。必要なら基数制約を編集して「リフレッシュ」します。

毎日の勤務者数をシフト・シフト集合・タスク・タスク集合について制約出来ます。


安直に制約したい場合に便利になりました。

なお、ラインコピーもメニューにありますが、現在は動作していません。



2025年6月18日水曜日

6月18日リリース機能 その1

■ タスク予定基数制約部にリフレッシュを追加

基数制約編集後は、リフレッシュして編集を確定させてください


■タスク名表示にシフトとシフト集合とタスク集合を追加


これの何が嬉しいかというと、割に簡単に日々の勤務者数を変えられる点です。

この機能は、タスクプロジェクトである必要があります。シフトプロジェクトをタスクなしのタスクプロジェクトに変換することは、割に簡単に出来るので、シフトプロジェクトでも日々の勤務者数を変えることが出来ます。通常の列制約と両使いすることも出来ますが、矛盾がないように注意する必要があります。



2025年6月17日火曜日

Q「日勤以外」を希望する場合の予定入力の仕方

 Q.

予定入力についてですが、ある日の勤務で「日勤以外」を希望する場合、当院では「当直・明け・休み」のいずれかを希望することになるのですが、そのような予定入力のやり方は設定されていますか?

Ans.

シフト定義の脇にシフト集合のタブがあります。

それで、欲しいシフト集合を合成していただけますでしょうか?

例を添付しますので参考にしてください。



2025年6月16日月曜日

NotebookLM化によるメンテナンス

 今後、プロジェクト作成サービスプロジェクトおよびレクチャに使用したプロジェクトは、全てお客さまの許可を頂いた上で、

NotebookLM上で、メンテナンスをすることにしました。

個人情報は全て秘匿しますが、シフト・タスク・グループや、グループ集合は、そのまま公開となります。


NoteboolLM上でメンテナンスすることの利点は、

1)他のユーザ実装を参考に出来る

2)実際的な実装マニュアルに出来る

3)何年後かに、担当者が変わったとしても自職場の実装思想、仕様等は、NotebookLM上で共有されており、引き継ぎが楽。

です。

私にとっても、単にマニュアルを見てもらうだけのご質問には、案内をしなくてもよくなり、双方にとってメリットしかありません。

ご理解の程、よろしくお願いいたします。

2025年6月14日土曜日

お客さまのプロジェクトファイル

 ご相談を機に、お客さまが作成したプロジェクトファイルを拝見させていただくときがあります。

で、気づくのは、物凄く沢山の予定と制約群があることです。お客さま自身が一から記述したプロジェクトというのは、担当者が変わったりして何年も引継がれてきた資産だと思います。

ではありますが、大体の傾向として、

■ハード制約が多すぎる

■冗長な制約が多い

■予定が多すぎる

ように思います。

で、それを見てしまうと添削したくなってしまい、無償レクチャをオファーすることがあります。勿論、強制ではなく、業務が立て込んでいればお断りして頂いて構いません。

(お客さまの許可が得られたならば、添削例をアップします。)


また、既に私が設計した5年前のプロジェクトも未だ現役で頑張っている例もお見掛けしました。スタッフ名は大分入れ替わっていましたが、ほぼ設計時のままでした。

このように永く使っていただけることも多いのですが、共通しているのは、ルールは初期設計時から、変わっているということです。

初期設計時のままルールが同じであれば、何の問題もないのですが、現実の世界で、ルールが不変の職場は存在しないと言ってよいでしょう。

其のたびに、菅原システムズ等の業者に頼むよりは、

自分達でメンテナンス出来る力をつけておいた方がよい

というポリシーに数年前より変更したのは、上のような背景があるからです。






2025年6月13日金曜日

NotebookLM入門

 グーグル「NotebookLM」入門:信頼できる自分だけのAIアシスタントを作るには? | Business Insider Japan

なるほど、取り込まれるのは、テキストがコピーされることなので、ソースを更新するには、

1)ソースを選択して削除



2)再度ソースを取り込み


する必要があるようです。

はい、サイトを更新したらこの処理を忘れないようにします。


2025年6月12日木曜日

スケジュールナースNOTEBOOKLMの中身 活用方法

 下は、NotebookLMを開いた様子です。


マインドマップを開いた様子です。




クリックするとソースが表示されます。

次は、チャットで「夜勤の平準化」と入力してみました。


記事のソースが表示されるので、参照したい箇所を素早く見つけだすことが出来ます。

是非ご活用頂きたいと思います。

これで調べたけれども、なお不明な場合に、サポートをご活用頂くのが望ましいと思います。

まとめると、

1)スケジュールナースNotebooklm上で質問

2)1)で不明な場合にサポートに質問(プロジェクトファイル添付が望ましい)

3)菅原システムズの作業時間が一定時間以下ならば、無償サポート。

4) 大抵は、無償サポートとなります。(経験的には、5%程度以下が有償サポートになります。)有償になる場合、お見積りを提出し有償サポートを申し受けます。 (例は、こちら)

ということになります。


近い将来の構想としては、RPAツールの内製化 とAIモデリングの開発を予定しています。

しかし、それは、上記2)3)の代替えにしかならず、4)がAIモデリングに置き換わることはほぼない、という見解です。

ところで、「仕様から制約に落とし込むには?」と質問して、

https://schedule-nurse.blogspot.com/2024/09/blog-post_10.html

がソース表示されることを期待していたのですが、それらしい回答は得られませんでした。

明示的にソース追加してみたのですが、「ドメイン制限によりインポート出来ない」とのメッセージが出てインポートそのものが出来ないことが原因のようです。

具体的な操作ではなくて、こういう抽象度の高い質問に対する回答は、やはり資料を提供した方がよいので、折を見て、どこかのPDFに入れ込もうと思います。どこかに入れておきさえすれば、後は、NotebookLMが探してくれるので、探す手間がかかりません。

そういった地道な作業を繰り返し行うことで、回答品質が上がっていくはずです。





2025年6月11日水曜日

スケジュールナースNotebookLM一般公開について

https://notebooklm.google.com/notebook/62d80db8-458e-4928-9a97-020357dc34c6

グーグルアカウントがあると、スケジュールナースに関する情報を閲覧することが出来ます。

スケジュールナースの機能と文書は膨大で、初心者から上級者まで、各々のレベルに応じた目的の情報を探すのは容易ではありません。しかし、これがあると情報を整理して見ることが出来ます。

次の動画で、男女の会話部分は、NOTEBOOKLMが作成したものです。サイトを読み込ませ、若干のプロンプト追加1回で、作成しました。動画部分は、男女の会話に合わせて、適当に私がコピペしたものです。

私が書いていないことも会話していますが むしろ核心をついている、ようにも見えて驚くばかりです。


例えば、勤務表作成サービスを、「伴走サービス」と言っていますが、本サイト・ブログを探しても、その言葉は一切使っていません。しかし、的を得ている言葉だと思いますしこれ以上に端的な表現も思いつきません。AIが書いた人間以上に本質を言葉で表現出来ている、本当に凄いことだと思います。





2025年6月10日火曜日

ZOOM録画に対するお願い

 最近、お客さまとZOOMすることが多くて、結果、録画ZOOM容量がひっ迫していることが多いです。

個別にダウンロードをお願いしておりましたが、今後は、


■お客さまの方で必要がある場合にはダウンロードして頂く

■ダウンロードする場合は、1週間以内とする(一週間を過ぎたものは削除します)


ということにしたいと思います。よろしくお願いいたします。

2025年6月9日月曜日

特許支払い期限通知サービス

保有する4件の特許のうち最初の2件、登録特許5807978と、5807980の特許が、11年目を迎えようとしています。長い年月が経ちましたが、アルゴリズム1は、改善を行いつつも基本的には当初の特許クレーム通りの実装で変わりがありません。

特許維持のため特許年金送付処理を行いました。

10年を超えると減免措置はなくなり特許維持に結構かかります。

 国内出願に関する料金 | 経済産業省 特許庁


手続きとしては、

1)納付番号を取得

2)Payeasyで納付

3)納付書送付

となります。期限までに納めないと権利が消失してしまいますが、現在は、Remindサービスがあることに気づき、登録しました。

特許(登録)料支払期限通知サービス

これですと1カ月ないし2カ月前にメールが届くので、忘れる心配がありません。


2025年6月8日日曜日

CuoptとHighs(1.11.0)がWarmStartをサポート

 CuoptとHighs最新版(1.11.0)でCUPDLPのWarmStartがサポートされたようです。実装を見ると、CuoptとHighs実装は、共にCOPT版のCUPDLPを基礎にしているものの同じではないようです。

Cuoptの方は、RMMを使っています。GPUを使ったボトルネックは、メインGPUメモリの帯域問題の他に、CPUとの通信速度が極めて遅いことがあります。特に小規模のLPの場合、一回の計算サイクルが短く、相対的にCPUとの通信速度がボトルネックになってしまいます。反対に、大規模LPでは、計算サイクルが長く相対的に問題にはなりえません。RMMを使えば小規模LP時の問題を回避できるのですが、残念ながらRMMは、Windowsではサポートされていません。恐らくはデバイスドライバ関連の問題だと思うので、多分、今後も変わることはないでしょう。。従い、Windowsでは、Cuopt版をそのまま使用することは出来ないと思います。この辺はサーバAPIとして使ってくれ、というスタンスかもしれません。また、SPMV改善は未だなされていないようです。

SPMV改善がなされれば、COPT版と明確な差異となる筈です。こちらは、メインGPUメモリの帯域問題を改善するので、大規模であればあるほど、その寄与度合いは上がるはずです。なので、NVIDAも本気で取り組むはずです。Mittleman Benchmarkに現れると思いますので、結果を待ちたいと思います。

とりあえず、HIGHSは、RMMの問題はないと思いますので、HIGHSをそのままポートしたいと思います。また、近い将来Cuopt版でSPMV改善がなされると思うのでそちらもWatchして行きたいと思います。


2025年6月7日土曜日

Goolge AI Essentials 申し込み

来るべきAIプロンプトによるモデリング実装のために、とりあえず勉強しなければ、

と思っていました。


LLMのプロンプトエンジニアリングの本が良さそうと思っていたのですが、入手が遅くなりそうなので、こちらは、スキップして、下記に申し込みしました。


2025年6月6日金曜日

生成AIと最適化の未来

久保先生のビデオ。面白いです。 

生成AIで最適化する研究についてのディスカッション

NotebookLMを使って、男女の会話を自動生成したようです。

これ凄いですね。自然すぎて、ビックリです。

【1番使える‼️】無料のGoogle最強AI「NotebookLM」に日本語版音声Audio Overview機能が爆誕!徹底解説

スケジュールナースで、どうすれば良いか分からないときは、リソースを指定して、NotebookLM化しておくと、ヒントになると思います。スケジュールナースは、日々アップデートしているのであまり古い情報は見ないようにした方がよいでしょう。(ハルシネーション対策)


リソースの検索先を示しておきます。

本ブログ (スケジュールナースⅢ以降・2021年以降)

マニュアル

制約FAQS

著作

しかし、どんなに情報整理しても、分からない制約が存在する可能性はあります。ありきたりのよくある制約については、解る可能性がありますが、そうではない制約もあるかもしれません。その場合は、サポートをご活用ください。

モデリングは、私自身悩むこともまれではありません。看護師・介護士関連では、ほぼ定型的な処理ですので、悩むことはないのですが、新規の他業種プロジェクトでは、本当に悩むことがあります。お客さま自身が仕様を分かっていないことがあること、にも起因していると思いますが、それだけではなく、どういうモデリングをしたら上手くそしてメンテナンスが容易なプロジェクトになるかというのは、試行錯誤の部分が多々ある、ということでもあります。私自身・そしてお客さまもよく分かっていない、そうした問題は、依然として存在し、AIから最も遠い領域であると思います。

消えるプログラマ、残るソフトウェア開発者 と言われているように、お客さまとの開発作業が含まれている分野が最後は残ると思います。


2025年6月5日木曜日

RPAツールの内製化

 最近のサポートにおいて、ZOOMは必須で、多いときは週に4回位こなします。ZOOMで、お客さまのご質問に答えたり、その場でご要求を実装したりします。実装するのは、私ではなくお客さまPCを共有して、私の指示を基にお客さまのスケジュールナース上で実装していきます。そうするのは時間がかかるのですが、少しでも覚えて頂くことを目的としてお客さまご自身で手を動かして頂くことを行っています。しかし、その場でやって頂くのは、定型処理であり、ありふれた制約であることが殆どです。

で、思ったことですが、それを私の代わりにAIにやらせるには、ちょっとハードルが高すぎるということです。そもそもGUIを直接に弄るのは難しい、そこでRPAツールを使えばどう?という発想が生まれてきます。

一方、何かスケジュールナース上で、看護研究で、勤務パターンによる急な欠勤者による影響度の調査、というテーマがあったとしましょう。この場合、パラメータを変えて大量の求解処理の必要があります。それをいちいち手で行うのはやってられない、RPAツールで出来ないか?という発想があると思います。

市井のツール、Power Automateを少し弄ってみたのですが、例えば特定の予定セルを操作するのは、とてもつもなく面倒で遅いということです。これは、外部からアプリの中身は分からないので、仕方がないということだと思います。

ならば、ツールに頼るのではなく、スケジュールナース自身で、スケジュールナースGUIを直接プログラミング言語で操作できるライブラリがあれば、その目的に叶うことになります。現状は、Pythonで制約処理と、ポスト処理を各々別プロセスで行わせていますが、それとは別に、Pythonで、GUIを操作できるようにしたいと思います。いわば、RPAツールの内製化です。

夢は、日本語で指示すると、例えば「遅番を分けて!」と指示すると遅番シフトを分けて、自動的に遅番⇒遅番集合にしてくれる、みたいな定型処理・ありきたりの処理の自動化を実現させることです。モデリング的発想だと、一気にモデル化しようとするから訳がわからなくなりますが、一つ一つの制約を実装・変更・追加・確認しながら組み込んで行ければ、人間と対話しながら人間の理解できるペースで実装できる、というところが、モデリングコンペティションのそれとは実際的に違います。

そのためには、やはりGUIとの橋渡し部分で、PythonでGUIを操れるようにする必要がある、ということです。

現状は、NSP問題の解決に注力していて余力がないのですが、来期以降取り組みたいテーマです。全てのNSP問題の解決は勿論ですが、市井のモデリングをAIと対話しながら出来るようになって、初めてスケジュールナースが完成する と思います。





2025年6月2日月曜日

Q. ブランク予定でUBが0にならない

 Ans.

解を見ると最大夜勤回数設定の多い方が、夜勤間隔エラーを生じています。


そこで、夜勤回数が6回以上の方は、次のように夜勤間隔制約を外すようにします。


以上です。

<Notes>

一般に、予定が入力されていない状態(ブランク予定)よりUBが良くなることはありません。制約を追加変更したときは、必ずブランク予定で求解し、UB==0を確認しましょう。

もしも、UB==0になっていなかったのなら、原因を解析しリーズナブルなエラーであるかどうかを見極めるようにしましょう。

2025年6月1日日曜日

Q.夜勤専門スタッフが入りならば、遅出3名以上、明けならば、早出2名以上

 Ans.

ペア制約AならばBで実装します。

仕様的には、

■今月の毎日について、夜勤専門スタッフが1名以上入りならば、遅出が3名以上

■今月の毎日について、夜勤専門スタッフが1名以上明けならば、早出が2名以上

となります。演算子「または」は、1名以上(≧1) と同じ意味になります。

以上で実装終了です。

<Notes>

この制約も、Default仕様に対する特殊ケースなので、矛盾しません。書き連ねることが出来ます。

ペア集合の不等式制約結果は、黄色・赤色マーキングが現在出来ません。要改善アイテムとしてリストしています。

2025年5月31日土曜日

Q.新人の夜勤回数だけは、制約をキープしたい

 Ans.新人の夜勤回数の制約レベルを上げて、重みを独立に変更できるようにします。

以上です。


2025年5月30日金曜日

Q. 水土は、早番・日勤2名以上

 Ans.

今月水土という曜日集合を作ります。

列制約で制約します。

以上で完了です。

<Notes>

既に、Defaultで、早番・日勤共1名以上という制約が存在します。その特殊ケースである今回の制約は、何ら矛盾することがないので、書き連ねることが出来ます。

2025年5月29日木曜日

Q.夜勤責任者および週末責任者

 Q.

■ 責任者に関する制約

夜勤責任者:

夜勤者3名(夜勤専門)のうち、必ず1名は「夜勤責任者グループ」から選出され勤務

する必要あり


週末責任者:

土日祝日の勤務には、必ず1名は「週末責任者グループ」から選出され勤務する必要

あり

Ans.

グループ集合で、責任者のレベルを定義します。


スタッフ定義で責任者を定義します。

グループ集合で、責任者レベル1を定義します。

制約します。

以上です。

<Notes>

当初、責任者レベル6まで定義していましたが、実際的には、一つだけにしたようです。


2025年5月28日水曜日

Q. あるスタッフは、出来ない遅番の種類がある

 Ans. 管理上分ける必要があるシフトは、分割します。

出来ない種類の遅番を遅3として追加します。


遅番集合を定義します。

遅番集合で制約します。

遅3のスタッフ毎のシフトを設定します。


遅番集合と、遅3に関わる制約を変更追加します。

遅3の回数を平準化します。

遅3の間隔を制約します。

遅3の回数を定義する集合を設定します。




以上で実装終了です。