2025年7月25日金曜日

SchedulingBenchmarks instance15再挑戦

 マルチスレッド化して様子を見てみました。スレッド数は8にしました。下記は、テスト中の様子です。


約2日走らせて、LB=3826.6 UB=3828となっています。なので、UB=3827が発見されれば、即終了です。後、僅かのように見えますが、実際には、BranchingTreeの爆発状態にあり、終了まで2週間程度かかる見込みです。(大体こういうテストをしているとWindows強制アップデートによりテスト途中終了となってしまうのが常です。)

経験的には、ここまで来て未だUB=3827を発見できないということは、その解は本当に存在しない、すなわちUB=3828こそが厳密解である可能性が非常に高い、ということです。ただし、UB=3827解が存在しないという厳密な証明のためには、LB=3827プラスアルファとなるまでBranchingTreeをスキャニングする必要がある、ということです。


CPUの稼働率を見ると、

上のように、稼働率100%とはなっていません。Hyperthreadを加味して最低50%程度稼働しているべきなのがそうなっていないのは、キャッシュヒット率によるものであると推察されます。

A)この稼働率を上げることが出来れば、速度アップとなるはずです。
B)もう一つの問題として、インスタンス23以上では、128GBRAMをもってしてもグラフ規模が大きすぎてコンパイルできない、という問題があります。

A)B)の両方を一挙に完結する方法として、グラフの縮約化があります。要するにメモリのダイエットです。厳密解を得るのに必要な緒元を失うことなしに、ダイエットを行うことは、instance15を解くことは勿論ですが、instance23を解くにも必要なことです。

この方法が実用化出来れば、アルゴリズム3の使用頻度が3%から20%位に上がるかもしれません。というのは、多くの実務インスタンスにおいてもグラフコンパイル速度がネックとなっている為です。

instance15だけを見れば、cutting plane 的なアプローチの方が適しているように思えますが、グラフダイエットこそが本丸であると思います。そしてそれは、アルゴリズム3実用化のために必要でもあります。アルゴリズム3の実用化は、これまで知られていない多くの実務インスタンスの厳密解を知るのに大きく寄与するはずです。



2025年7月24日木曜日

XML converter for Scheduling Benchmarks

 未解決のスケジューリングベンチマーク問題について取り組みを始めました。

未解決なのは、

instance15

instance23

instance24

の3問です。

検討を始めるにあたって、スケジュールナースのCSV解をAutoRosterのフォーマット(XML)に読み込ませるためのコンバータを制作しました。これまでは、IFDEFコンパイルオプションにより、AutoRosterに読み込ませる解XMLをスケジュールナース内部で生成していましたが、いちいち再コンパイルする手間をなくすのが目的です。

以下使い方です。

とりあえず、求解を中止しました。2時間程走らせてUB=3828 になっています。この値はは、菅原システムズが所持する世界記録に同じです。


解画面で、

CSVファイルで出力すると、プロジェクトファイル名+_shift.csvで、ファイル出力されます。

次にXMLコンバータ起動、求解し、出力されたファイルを指定します。
同じフォルダに、tak_solution.xml が出力されます。
AutoRosterを起動して、下記フォルダにtak_solution.xmlファイルを置いて読み込みます。

確かに、解は、Feasibleで、かつUB=3828をAutoRosterでも確認できました。

中身は、PostPythonで書いていて、INRC2用のコンバータcsv.nurse3と同じように、単なるフォーマットコンバータです。

2025年7月23日水曜日

7月16日リリース機能その5

5)Historyのダイエット


5年程お使い頂いたお客さまのプロジェクトファイルのサイズは、12MBになっていました。これは、予定での状態をスタッフ名:予定のmapを過去も記憶しているからです。通常、過去の予定を覚えておく必要はない、と思われるので、消去できるオプションを作成しました。


 以前のヒストリデータを消去:0だと、予定表示開始日より0日以前のデータが消去されます。設定ボタンを押して、スケジュールナースを終了すると、ダイエットが行われます。このお客様の場合、12MB→1.5MB程度とダイエット出来ました。


2025年7月22日火曜日

7月16日リリース機能その4

 4)ExcelファイルオープンでNGの場合、ファイルクリエートにしていましたが、既存ファイルを新規ファイルにしてしまう問題がありました。これを改善し、ファイルが存在しない場合のみ、ファイルクリエート方式に変更しました。


この変更により、例えオープン可能でも読み込み不能なシートが含まれる場合(Invalidな外部参照等が含まれる場合)には、読み込みが出来ないメッセージ(Unexpected xml tag)が出て読み込みません。新規ファイルをCreateもしません。

この場合の対処方法としては、Excelファイルに含まれるInvalidリンクを削除してください。





2025年7月21日月曜日

All optimal solutions for the 8-week INRC2

All optimal solutions for the 8-week INRC2 (Second International Nurse Scheduling Competition) have been uploaded using our newly developed solver, which is currently under active development.

These solutions have been verified using the official Validator, and the corresponding validation output is also attached.

For most instances, Schedule Nurse was able to obtain exact solutions within eight hours, although a few required nearly a full day of computation (Ryzen 9700X).

Upon completing all exact solutions for the Scheduling Benchmarks, we plan to write a research paper. Our new solver will conclusively address all instances that have remained without known optimal solutions for many years.

Schedule_Nurse3_Gallery/English/Benchmarks/INRC2/8weeks at main · sugawara-system/Schedule_Nurse3_Gallery · GitHub

2025年7月20日日曜日

7月16日リリース機能その3

 3)2026年5月24日以上、カレンダが更新できない問題の対策



カレンダマックスを2100年以上に更新しました。適用は、スケジュールナースPrivateとスケジュールナースサブスクリプションのみです。その他のエディションの適用は行わないのでご注意ください。

2025年7月19日土曜日

7月16日リリース機能その2

2) スケジュールナース のUpdate廃止


現在、3つのversionをメンテナンスしていますが、2つに集約します。

今後、スケジュールナースPrivateと、スケジュールナースサブスクリプションのみが、

今後のメンテナンス対象となります。


「スケジュールナース」は、開発に貢献した方等にも無償配布しておりましたが、スケジュールナースPrivateに移行をお願いします。該当の方は、マイクロソフトアカウントを取得の上、サポートにご連絡頂ければ、引き続き無償で使用できるようにいたします。

後述のように、スケジュールナースは、Updateしないと、2026年5月以降のカレンダが効きませんので、該当するバージョンをお持ちの方は、早めに切り替えをお願いいたします。


2025年7月18日金曜日

Q添付のファイルで予定入力のスタッフ4の2日に「希扱」の予定入力を入れた時のエラーの理由がどうしてもわかりません

 Ans.

拘束*拘束制約がハード制約となっており、先月からの連続で見るとスタッフ4が1日に拘束とならざるを得ないことと矛盾するようです。



30日にスタッフ4が拘束であることは変えようがないので、拘束*拘束制約をソフト制約化することにより解が出るようにします。



解析:
Python制約レベル7のエラーが出ています。とりあえず、この原因かどうかを判別したいので当該言語制約の✓を外して求解します。

依然としてハードエラーになりました。根本原因は、Pythonではありません。

スタッフ4関係であることは間違いなさそうなので、関係しそうなハード制約をソフト制約化
し求解の試行錯誤を行います。下記、スタッフ4の下記制約をソフト化するだけで、解が出ることが分かりました。
当該制約をソフト化したときの解です。拘束*拘束パターンが出現していることが分かります。

スタッフ4の30日勤務をブランクとすれば、ハード制約のままでもOKでした。よって、この制約が原因である、と特定できました。

以上で解析終了です。

最終的な解は、PythonをEnableして以下のように得ました。

考察
解がないときの解析は、非常に面倒です。簡単には、解がないときは、予定部をソフト化して、予定が変更になった部分に着目します。

しかし、今回、原因がない原因を追究したい、とのことでしたので、上のような手順で解析しました。上のように、具体的原因の追究は手間がかかるのが普通です。特に、ハード制約が多く、解のない原因が複数の要因による場合、真の原因に辿り着くのは容易ではありません。従い、次の指針を推奨します。

基本的には、ハード制約は、必ず実現できるものであるべきです。実現出来ない可能性があるものは、原則的にソフト制約とします。

どうしてもこれだけは実現したいというアイテムは、ハード制約化してもよいですが、その数は出来るだけ抑えるようにするようにした方がよいでしょう。



2025年7月17日木曜日

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

 1)スタッフプロパティシートの書き込みは、グループ定義とグループ集合を除く仕様に変更

従い、以下の3つのシートのみになります。通常は、グループ定義とグループ集合は、スケジュールナース上で操作することになると思いますので、その方が汎用性が高いと判断しました。




2025年7月15日火曜日

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

 5)ユーザの予定原案の赤をロックとして読み込めない問題の対策

下記で、ユーザの予定は、赤フォントで記述されている部分があります。


これをスケジュールナースの予定Excelシートにコピペしました。スケジュールナースの元々のデータ(先月部)は、ロックが掛かっているので赤フォントです。一方ユーザのフォントも赤です。しかし、ARGBで見ると違いがあり、ユーザフォント赤はロックが掛かりませんでした。
ARGBではなく、RGB(255,0,0)をロックと解釈するように変更しました。これにより、赤部は、ロックが掛かります。


2025年7月14日月曜日

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

 4)Excel取り込み出力設定の列数10Max→無制限に


多数の列があった場合、描画の段階で10に制限しておりましたが、この制限を撤廃しました。
これにより、多数のブランク設定があったとしても、問題なく動作するようになりました。





2025年7月13日日曜日

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

 3)Excel ExportファイルオープンモードをCreateからOpenに変更しました。


今まで、常に新しいファイルとして処理していたので、既存の別なシートが失われていましたが、DefaultをOpenに変更したので、別なシートが存在する場合には、消すことなく追加となります。


上は、ユーザフォーマット解の書き込みを行ったファイルに、

■スタッフプロパティの書き出しと、

■予定の書き出しを行ったシート群になります。

2025年7月11日金曜日

Q.男性3人、女性3人配置したいため、列制約で制約タイプを最大―最小スタッフ数とし最大3最小3としたが4人以上配置されてしまう。

 Q.

下図のように女性が3人のところ”入り”に4人配置されてしまっているのは何故?


Ans.
プロジェクトおよび意図および現象の説明、ありがとうございます。


当該制約部分に移動します。
当該制約部分で集合をマウスホイールボタンを押して確認すると、”女性”集合にはなっておらず、別な集合名で記述されているようです。

スタッフプロパティシートを確認すると、次のようになっていました。

意図としては、女性集合で3名にしたいと思いますが、その部分集合で制約していることが分かります。

実際、解で確認すると、制約通りに動いていることが分かります。

従って、

■仕様:女性3人と

いう仕様に対して、制約は、 

■制約:生活介護 休日可女性 3人

になっています。他に”女性”で制約している記述が見当たりません。これが原因と思われます。


Note:

部分集合に対して制約して、全体集合で制約していないことによる問題は、よく遭遇します。(私もよくやらかしてしまいます。)

対策としては、

■スケジュールナースは制約通りに動く

■制約していないところはフリー(何が割り当てられるかは誰も分からない)

ということを常に頭に置くこと。

■制約をしている箇所で、マウスホイールボタンにより、集合(Day集合、グループ集合、シフト集合)をよく確認する。

ということに尽きるかと思います。


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

 2)スタッフプロパティをExcelに書き出し 追加


スタッフプロパティ関係の4つの表をExcelにExportします。



2025年7月10日木曜日

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

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


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

=スタッフ定義!B3 

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

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



<注意>

順番が暗黙に合っていることを想定しています。スタッフの順番を入れ替える場合は、スタッフ毎のシフトとタスクも同時にメンテナンスが必要となります。スケジュールナース上で入れ替えて、スタッフプロパティをExportする方法で行うようにすれば、気を使う必要はありません。

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月 和論文化