2022年7月29日金曜日

Invalid character エラー

Invalid characterは、Python言語での不正な文字コードがあるというエラーです。「'9'が、不正な文字コードである」と言っています。

赤丸をダブルクリックするとPython言語に飛びます。

数字を良く見ると、確かに、全角9と半角9があります。数字の入力は全て半角にする必要があります。全角9を半角9に修正してください。


2022年7月20日水曜日

Excel(CSV)ファイルが出力されない。

Q. 新しいパソコンに最新版のスケジュールナースをインストールしたところ、

今まで求解と共に作成されていた当院の表に貼り付けるための

エクセルファイルが出力されないようになりました。

これは新しいスケジュールナースの仕様でしょうか?

Ans.

申し訳ございません。157Aで仕様変更しております。

python post処理は求解処理とは分離したプロセスになっており、以下のように pythonポスト処理にチェックを入れて求解してください。






2022年7月19日火曜日

CSVファイル名変更

 現行  名前.csv

変更後task   名前_task.csv

変更後shift    名前_shift.csv

に変更します。理由は、下記ユーザリクエストによります。

これは

 ・タスクとシフトの両方のファイルを出力すると、

  ファイル名を変え忘れると上書きされてしまう

 ・出力されたCSVファイルをエクセルで読み出すときに

 タスクとシフトが同じファイル名で開くことができない

 ・「Excelへ出力」のファイル名とも同じにしてしまい

  エクセルで開く操作を介して、上書きされてしまったこともあった

という操作の問題点を回避したいのです。

2022年7月17日日曜日

塾勤務表(塾の時間割問題)の更新 All Exports

 Github上のプロジェクトを更新しました。

このプロジェクト上で、All Exportsの説明をします。

適当に名前をつけてプロジェクトを保存してください。

その後、Exportします。

で、ExportしたExcelシートを覗いてみます。
最初のシートは、期間の設定で、これを同名のスケジュールナース表をExportしたシートになっています。このプロジェクトの場合、表示開始日と制約開始日が同じです。注意するべきは、全てのDay基準は表示開始日になっている、ということです。

ですので、例えば、次週の勤務表を作るには、表示開始日を11月8日にして、同じ日に制約開始日を設定してやればよい訳です。

しかし、そのように設定したとしても、予定基数制約のシートの日付は同じです。
Exportは、単なる文字列として出力しているからです。

仮にこの状態でインポートしても、問題なく、ロードされます。ヘッダ部分は読んでいないからです。あくまで中身は、11月8日からのデータとしてロードされます。
それでは、気分が悪いという方は、ご自分でヘッダフォーマットを変えてください。
予定に関しては、行列順番が変わらなければ、どのように変えても問題ありません。(読み込まれないので。予定関係以外の一部制約表については、読み込んでいる場合もあります。)

例としてGithub同じフォルダ上に、今週の勤務表.xlsx をアップしてあります。スケジュールナースでは、読み込むことが出来ないので、直接Githubに行ってダウンロードしてください。

さて今週の勤務表は、次のような4シートだけから成るファイルです。

担当科目希望予定(タスク)


各日、各限の課目講師必要人数表



シフト希望表

制約開始日のセルを変えるだけで、全体シートの日付も変わるようにしています。
(これで、気分が良くなりました。)

試しに、シフトとタスクについて、予定をソフトレベル1-7とハード制約で入れてあります。(試しに、基数制約0のところにハード制約予定、例えば国語を予定としてみると、すぐにハードエラーとなり、エラー箇所の指摘が出るので、やってみてください。)

で、このファイルをインポートします。

インポートすると、
ソフト化した予定もしっかり読み込まれているのが分かります。日付も11月15からスタートになっています。

予定をソフト化して、新しいソフトレベルが発生している部分は、適用がブランクになっているので、任意の重みを設定、チェックして求解してください。

適当に重みをつけて求解しました。黄色部分がソフトエラーの部分です。
各重みとエラー個数の和がUB(Upper Bound)と一致していることをご確認ください。(黄色部+予定ソフトのエラーの重みを加算してください。)

以上で説明終了です。

Excel上で、操作したのは、
■制約開始日の設定
■シフト予定
■タスク予定
■各日、各限における各科目の必要人員Max-Min
だけです。

一方、スケジュールナースで操作したのは、
■Excelインポート
■新たなソフトレベルがある場合の重み設定
■求解ボタン

だけです。新しいソフトレベルがなければ、スケジュールナースの方は、インポートボタンと求解ボタンだけです。

制約がFixしているなら、毎月の運用は、上記のような形態で行うことが出来ます。

勿論トレードオフ点を探る場合は、スケジュールナースで重みや予定を変えて数回試行することになりますが、それも慣れてしまえば、ルーチンワークなので、管理者ならば、誰でも出来るようになります。

All Export機能追加

 スケジュールナースGUIは、約20種からなる表で制約系を作っています。制約系がFixし、毎月の運用の場面の話です。

毎月の変更部はExcelで作成している場合が多いと思います。そうなるとExcelからスケジュールナース表へのインポートがどこかで必要になり、それをインポートしたい要求も出てくると思います。

問題は、独自のユーザフォーマットとスケジュールナースの表フォーマット変換です。そこは割り切りユーザ側でVBA等を使い、スケジュールナース表に合わせるものとします。

次が手順です。

1)All Export機能により、制約系の表の全てをExcelに出力します。

2)VBAユーザは、必要なシートを残し1)Excelシートを削除します。

3)スケジュールナースの表フォーマットは2)で分かるので、必要な変更処理を毎月行います。

4)スケジュールナースは、毎月の変更Excelシート3)を一回Importします。

というものです。All Exportというのは、実は少し嘘があり、マクロと行制約はサポートしません。が、それ以外は、変更に必要な表シートだけをインポート出来るようになります。

例で見ます。

Import/Exportセクションで、下記のように 表-Excel入出力 というタブが追加されています。


表をExcelに出力をクリックし、ファイル名を決めて出力させます。

すると、全表名がExcelファイルに出力されます。シート名はインポート時、表名として必要となるので変えないでください。不必要なシートが一杯あると思いますので、CTRLを押しながら削除してください。


今月の予定という、シフト予定とタスク予定だけが入ったシートを作成しました。
今月分を編集します。ヘッダー部分(日付、名前等)は見ていません。なので、日付や名前の変更を行っても無効です。単に、制約表示日ー制約終了日間分かつスタッフ分のデータをスケジュールナースの表の項目順にインポートすることを想定しています。なので、毎月の日付等は、Formulaで見易くしてもよいです。(Formulaは、サポートしません。)


予定入力でソフト化したい場合は、ColorIndexで指定しますが、上記のように、ソフトレベル1-7を割り当てExportさせれば、当該色が分かります。

スケジュールナースのC#コードは、以下でコメントにExcelColorIndexを載せています。
public ExcelKnownColors get_back_level_color(int level)
        {
            switch (level)
            {

                case (0): return ExcelKnownColors.White;
                case (1): return ExcelKnownColors.Custom18;//Color Index 19
                case (2): return ExcelKnownColors.Custom33;//Color Index 34
                case (3): return ExcelKnownColors.Custom34;//Color Index 35;
                case (4): return ExcelKnownColors.Custom39;//Color Index 40 
                case (5): return ExcelKnownColors.Yellow;//Color Index 6
                case (6): return ExcelKnownColors.Cyan;//Color Index 8 ;
                case (7): return ExcelKnownColors.LightGreen;//Color Index 4
                default:
                    return ExcelKnownColors.White;

            }
        }
また、ラベルが重複している場合は、シフト名DOT(.)ラベル でExportされるので、その形式で指定すれば、Importも正しく行うことが出来ます。

シート編集が終わったら、今度はインポートします。




ファイル名を指定して、




インポート完了です。ソフトレベルも正しくインポートされます。


以上は、予定のインポートでしたが、次のような応用が可能です。

■工場でのスタッフ毎のタスクインポート

■スタッフプロパティのインポート

■予定基数制約のインポート

等、複数のシートのインポートを一回のインポートで行うことが出来ます。

2022年7月16日土曜日

お盆休みの設定

 私が作成したプロジェクトでは、ユーザ独自の祝日扱いの日を次のように定義していると思います。年間カレンダでユーザ独自休みを定義することが出来ます。

で、複数の日、13日、14日、15日を祝日扱いとしたい場合の例です。複数選択する場合は、

キーボードCTRLキーを押しながら

マウスを操作する

複数選択が出来ます。

設定したら設定ボタンを忘れずに。

同様に、予定入力の複数選択も

CTRLキーを押しながら

で、同じシフトを一気に描画することが出来るのでやってみてください。定型休みが決まっているパートさんの入力を速くすることが出来ます。



2022年7月15日金曜日

スタッフ名順番変更

 1)移動させたいスタッフをラインセレクトします。

2)再び、No.列上で、マウス左ボタンをクリックすると、そのNo下にアンダーバーが付きます。

3)そのままドラッグし移動させたい箇所まで持ってきます。

4)離すと移動します。
5)設定ボタンをクリックして完了です。

同じようにして、スタッフプロパティ中のItem順を変えることが出来ます。




2022年7月14日木曜日

Python ポスト処理のオプション化

 例えば、グループホームユニット毎の勤務表をExcelに整形して色付で出そうとすると時間がかかってしまいます。ポスト処理は、最終勤務表確定時だけ出力すればよいので、普段お使いのときは、駆動させないようにするオプションがあればよいです。

そのためのチェックボックスが下記です。以下の状態では、

def post_main():

がソースに記述されていても、post_main()処理は呼ばれません。



2022年7月13日水曜日

Pythonエディタ右クリック

 関数 早番を参照している箇所が二つあり、そのひとつに移動する例です。

関数 早番の定義に移動する例です。


2022年7月12日火曜日

制約表示日の更新

 6連勤務禁止のところが多いので、前月は5日見るようにしています。しかし7連勤務禁止の職場もあります。そうなると前月は6日見る必要があります。次月へ行くときに、1日を月始めとする職場では、6日見ている場合は、Defaultで6日見るようにしました。





2022年7月11日月曜日

グリッドセル エディットコントロール

 グリッドセル中の編集は、許していなかったのですが、コピー、カット等必要なところは、出来るようにしました。

エディット中のCtrl-Z Ctrl-Yも効くようになりました。


2022年7月10日日曜日

曜日タイプツールチップ

 曜日タイプにマウスを置くと曜日ツールチップが出現します。

出現場所と大きさは適宜変えてください。プロジェクト終了時にレジストリに保存していますが再インストールすると忘れてしまいます。また、今月自動は、出ません。

また、グループタイプもツールチップが出現します。こちらはセルをクリックして付近をマウスで動くと出現します。

ツールチップが煩わしい場合は、下記で消すことが出来ます。

また、曜日ツールチップの位置は、ウィンドウズ設定リセット、曜日タイプでリセットされます。


2022年7月8日金曜日

無料版・有償サポート版の廃止について

 永らく、無料版を提供してきましたが、912月一杯を目処に廃止することにしました。また、有償サポート10年も8月末日を持って廃止することにしました。コロナ過での経営上の理由によるものです。

プロジェクト作成については、案件毎の対応といたします。プロジェクト規模に関係なく一律税込み3万3千円を目安として、メールで10回までのサポートとします。(こちらからの送信10回までの対応とします。)

現ライセンスドユーザについては、継続サポート、継続バージョンアップを行います。開発にご協力いただいた方も同様です。メールでご案内します。

代替として、月額300-400500円程度のサブスク(Microsoft Store版)を用意する予定です。プロジェクトの互換性はございます。そちらをご利用ください。デジタル著名の期限を越えると、無料版は、継続使用できなくなります。


求解ツールチップ

 ソフト制約は、レベルというインデックスが付いていて、重みを求解ページで変えることが出来ます。重みを求解直前で変えることが出来、トレードオフの様子を数回の試行で把握できるようにすることを意図しています。

で、「このソフト制約って何だっけ?」と思うことがあると思います。

下図は、行制約:7付近で、マウスを置いたときの様子です。ツールチップが出ます。

で、制約名を知ることが出来ます。制約の内容を知りたい場合には、マウスをダブルクリックします。すると右ペインにツールチップで表示された制約がプリントされます。

付近をダブルクリックすると、下のように当該制約がハイライトされます。

ツールチップが煩わしい場合は、ウィンドウの設定をクリックして、下記設定を出し、
求解時のツールチップ表示のチェックを外せば、出ません。(設定によってはスケジュールナースの再起動が必要な場合もあります。)

また、解画面でも制約を見たくなるときがあります。
そのような場合は、解のラインを選択して、右クリック、移動で制約画面に移動できます。

行列共、ラインセレクトしないと正しく移動出来ないのでご注意ください。

なお、解画面での右クリック、全て挿入は、便利な機能で、表示されていない制約が全て表示されます。足りない制約は、最後に追加されます。



2022年7月7日木曜日

XX以外の夜勤ペアは禁止

 2021年度よりグループホームのユニット数は3以下に緩和されましたが、グループホームのユニット数は2のところが多いでしょう。

例えば、ユニット1での夜勤者とユニット2での夜勤者をペアと考えるしたときのペアの問題です。

XX以外の夜勤ペアは禁止は、AならばB 制約に等価ですので

A→B(XX) 

が使えます。




2022年7月6日水曜日

夜勤後休みの後は早番

 これもABCDパターンの応用です。

解は、下記のように見た範囲では、実現していますが、全体計測では、レベル7でのエラー(赤色)が一回発生していることが分かります。



2022年7月2日土曜日

仕様を言葉にする能力

 お客さまの仕様を頂いて、それを実装するのが私の仕事です。で、色々な方から仕様をお聞きし、実装しています。仕様FIXまで時間がかかる方は、最初に頂いた仕様書で、大体分かります。大体、仕様を頂いてから3ヶ月でFIXすることになります。仕様を頂いて、仕様の理解できないところ、曖昧なところを明確化する作業を行ったあと実装を行います。3ヶ月は、ソフト開発や実装の時間ではなく、実は殆どお客様の仕様整理の時間です。実装した後のプロジェクト解を見て、仕様が足りない部分を認識し、追加する作業ループを、大体数回行います。これは、お客さまなしではなしえない作業なので共同開発になります。ここまでくると、ドロップすることは決してありません。100%の実現度を達成しています。勿論、こちらの解釈の間違い、実装上の技術的なバグといった私Sideの課題も間々発生しますが、大半の時間は、お客さま側要因で発生するものです。平均的なお客さまが3ヶ月というものです。

一方で、分かりやすく、こちらからの質問が殆ど発生しない仕様書を頂くこともあります。複雑な仕様であっても、こちらの仕様FIXは、早いです。

この差は、一体何に起因するのだろう?と常々考えをめぐらせるのですが、一つ言えることは、PCの熟度は、無関係ということです。(実は、これまで一番素晴らしい仕様を送ってきたお客さまと電話サポートでお話しさせて頂いたことがあるのですが、その看護師長は、PC操作は不慣れ、とおっしゃっていました。)

一言で言うと、仕様を正確な言葉で表現する能力ということになると思います。言うなれば、「国語力」 ということになるでしょうか?

PCスキルや、プログラミング経験の有無は関係なく、言葉で他人に説明する能力の差、が結局は、私の仕事量の差になるのではないか?と思っています。

何度同じ質問しても、そのことに対する回答はなく、別な要求仕様を追加してくる、という方もおられます。国語能力以前に相手の話を聞いてそれに応えるというあたり前のことが出来ない方もおられます。そういう方は、実装途中であってもドロップさせていただいております。

学校教育でプログラミングの教育が始まる(始まっている?)ようですが、それよりも重要なのは、国語力である、と思っています。





2022年7月1日金曜日

COPT 5.0

既にEvaluation Licenseは切れたのですが、次のメールを受領しました。急速にMIP Solverの性能が向上しているようです。Mittelmannベンチマーク、がGurobiに対して2.34倍の遅さというのは、素晴らしいと思います。また、表によれば、HighsがほぼSCIPと同じ性能を示しており、こちらも急速に力をつけています。SCIPの行数、確か数十万行に対してHighsは、数万行に満たない思うのでこちらも健闘していると思います。

 

We are excited to announce that COPT 5.0 has been released on June 20, 2022, with the following highlights:

 

 - Improved COPT MIP solver performance by 50%  

 - Added COPT SDP solver, which outperforms all existing SDP solvers  

 - Added a FeasRelax utility



COPT 5.0 takes the leading position in several benchmark measurements, as shown in the summary below (based on results from [a:http://plato.asu.edu/bench.html]Benchmarks for Optimization Software maintained by Hans Mittelmann, date: June 26, 2022):



For more information, please refer to the link below:

https://copt-pub.blogspot.com/2022/06/copt-50-is-released.html



You can apply for a free trial from the official website of Cardinal Operations at [a:http://www.shanshu.ai/copt]www.shanshu.ai/copt. For existing users, please feel free to apply for a version upgrade. For academic users (using an academic email address), we provide a 365-day free trial; for non-academic users, we provide a 180-day free trial. We sincerely invite you to raise any problems encountered during your use, and we will do our best to create a better user experience.