LaVoceのタイスケ組み自動化プログラムです。
csvファイルでバンドの情報と出演可能時間を指定し、満たすべき条件 (制約条件) や、出来るだけ満たしたい条件 (目的関数) を指定すると、タイムスケジュールが出力されます。 今のところ、バンドの演奏時間に合わせた柔軟な設定はできず、スケジュール枠 (1つだけバンドが入ることのできる時間帯の枠) を固定することになります。
例はdata/sample.csvにあります。
- csvファイル (Google SpreadSheetであれば「ファイル」->「ダウンロード」からcsvにエクスポートできる)
- 1行あたり1つのバンド (ただし1行目は、各列の説明(キー)が書いてある行)
- 列ごとに情報が入ってる
yamlファイルでどの列にどの情報が入っているかや、どう最適化するかなどを記載します。例はconfig/sample.yamlにあります。
例はresult/sampleにあります。
- schedule.csv は、完成したタイムスケジュール
- members.csv は、各メンバーの出番が〇で書かれたファイル。最後の出番は◎になっている
- sort.csv は、元の入力データからタイスケへの並べ替えの順番が書かれたファイル。主に、完成したタイスケを再出力したい場合に使用。
ターミナルのディレクトリ位置は、2で作ったディレクトリになっているはずです。
正しくダウンロード出来れば、ターミナルで
python3 --version
と入れると、
Python 3.12.3
などと出るはずです。
ターミナル内で以下を実行する
git clone https://github.com/kzk-program/scheduler.git
中にschedulerという名前のディレクトリが現れたはずです。
cd scheduler
と入れる。
sudo apt install python3.12-venv
と入力する。(pythonのバージョンは4で出たものを使う)
次に
python3 -m venv .venv
と入力する。schedulerの中に.venvという名前のディレクトリが出来たはずです。
次に Mac, Linuxの場合は
source ./.venv/bin/activate
を、Windowsの場合は
.\.venv\Scripts\activate
とします。するとターミナルで頭に(.venv)という名前がつくはずです。
pip install -r requirements.txt
とする
ゴールとなるCSVの形式は「入力データのフォーマット」の通り。
0を実行していれば、自動で入っているはずです。
configディレクトリの中にyamlファイルを作る (例はconfig/sample.yaml)。
ターミナルのディレクトリがschedulerになっていること、頭に(,venv)がついていることを確認し、
python3 test_solver.py --cfg config/xxx_YOUR_YAML_FILE_xxx.yaml
と入力する。xxx_YOUR_YAML_FILE_xxxの部分は2で作ったyamlファイル名を入力する。
大量のログが出てき、時間はかかるが、最大実行時間以内に終了します。
最後に1と書いてある場合は成功、-1と書いている場合は失敗しています。
失敗する原因としては、制約条件を満たす解が無い・yamlファイルで指定した列番号が間違っている・コードにバグがある などが考えられます。
2で指定した出力ディレクトリの中に、member.csv, schedule.csv. sort.csvがあることを確認する。member.csvとschedule.csvをダウンロードしてGoogleスプレッドシートで開いて、結果を確認しましょう。
pulpという線形最適化問題ソルバーを使っています。pulpは自動でマルチスレッド処理をするので、Ctrl+Cをしても止まらなくなります。 マルチコアのCPUを使うと速く解けます。 (Google Colabでやるとめっちゃ遅いです)
使い方に関する質問、バグ報告、新機能希望、プルリク相談などあれば、27期 たかし まで! GitHubでIssue立ててもらっても良いです。
masterにコミットする場合は事前に一言もらえると嬉しいです
.gitignoreに最大限の注意を払い、絶対に個人情報 (メールアドレス等) の載ったcsvファイルを公開しないこと!! (必ずcommitする前にどのファイルがcommitされているか見ること)
- 目的関数や拘束条件を増やす
- バンドがある行数を指定できるようにする
- 全体会などのバンド組みの方も作る