タスク集合では、既に禁止していましが、行制約・フェーズパターンでも禁止としました。
これは、タスクのNOTは、シフトほど単純な構造でなく解釈のトラブルを生じ易いためです。
次の4つの実装を予定しています。
1) タスクカウント
2) リフレッシュ
3) Group集合名にスタッフプロパティのシフトとタスクを追加
4) スタッフプロパティのシフトとタスク 先月部の矛盾する予定をソフト制約化
これらは、全て4)に起因して実装するものです。
結果が出ました。毎年楽しみにしているのですが、今年は、プリプロセッサのイノベーションがあったようです。
にしても、KissatよりCadicalの方が良い理由が分かりませんでした。いずれにせよ、来年以降ポートフォリオソルバで採用されていくのは、間違いないと思います。
時間割作成問題作成中に知ったのですが、Pulpでは、pandasで簡単にネット上のCSVファイルが読めます。
lesson_df = pd.read_csv("https://raw.githubusercontent.com/ryosuke0010/opt_test/master/composition.csv")
スケジュールナース上のPythonは、pandas等の大きなライブラリは搭載していないので、上記ソースでネット上のCSVファイルを読むことは出来ません。 そこで、pandasなしに次のようにして読んでいます。
def get_list_of_rows():
url="https://raw.githubusercontent.com/ryosuke0010/opt_test/master/composition.csv"
response = urllib.request.urlopen(url)
lines = [l.decode('utf-8') for l in response.readlines()]
#print(lines)
reader=csv.reader(lines)
list_of_rows=list(reader)
return list_of_rows
ふとQiita記事が目に留まったので、スケジュールナースで記述できるかやってみました。
時間割作成問題 (nurse-scheduling-software.com)
スケジュールナースは、数独、塾勤務表、時間割作成問題のように単にシフト問題に留まらずに、組み合わせ最適化問題を解くプラットフォームとしてもお使い頂けます。
Updated project files format, using task schedule table as follows. Also,newly found UB values are updated.