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順を変えることが出来ます。