Skip to content

kzk-program/scheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 は、元の入力データからタイスケへの並べ替えの順番が書かれたファイル。主に、完成したタイスケを再出力したい場合に使用。

環境構築

1. Visual Studio Code (VSCode) をダウンロードする

2. ディレクトリ (フォルダ) を作成し、VSCodeで開く

3. VSCode内でターミナルを開く

 ターミナルのディレクトリ位置は、2で作ったディレクトリになっているはずです。

4. python3をダウンロードする

正しくダウンロード出来れば、ターミナルで

python3 --version

と入れると、

Python 3.12.3

などと出るはずです。

5. このコードをクローンする

ターミナル内で以下を実行する

git clone https://github.com/kzk-program/scheduler.git

中にschedulerという名前のディレクトリが現れたはずです。

cd scheduler

と入れる。

6. venvを作る

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)という名前がつくはずです。

7. 必要なパッケージを入れる

pip install -r requirements.txt

とする

使い方

0. Googleフォームで得たスプシから、自動スケジューリングソフトに流せるCSVファイルに変換する

ゴールとなるCSVの形式は「入力データのフォーマット」の通り。

0-1. Googleフォームの回答のスプシを、CSVでダウンロードする

0-2. ダウンロードしたファイルをraw_dataディレクトリに入れ、適切な名前に変更する

0-3. csv_formatter.ipynbを開き、CSV_FILE_NAMEを1-2でつけた名前にする

0-4. ipynbファイルを実行していく。ただし、何をやっているか理解しながら実行し、必要に応じてファイルを変更してください。(特にSCHEDULE_PER_TIMEの値など)

1. dataディレクトリの中に、入力データ (CSV)を入れる

0を実行していれば、自動で入っているはずです。

2. 設定を入力する

configディレクトリの中にyamlファイルを作る (例はconfig/sample.yaml)。

3. 実行する

ターミナルのディレクトリがschedulerになっていること、頭に(,venv)がついていることを確認し、

python3 test_solver.py --cfg config/xxx_YOUR_YAML_FILE_xxx.yaml

と入力する。xxx_YOUR_YAML_FILE_xxxの部分は2で作ったyamlファイル名を入力する。 大量のログが出てき、時間はかかるが、最大実行時間以内に終了します。 最後に1と書いてある場合は成功、-1と書いている場合は失敗しています。 失敗する原因としては、制約条件を満たす解が無い・yamlファイルで指定した列番号が間違っている・コードにバグがある などが考えられます。

4. 出力を確認する

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されているか見ること)

TODO

  • 目的関数や拘束条件を増やす
  • バンドがある行数を指定できるようにする
  • 全体会などのバンド組みの方も作る

About

タイスケ組み自動化プログラム

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors