はじめに
Watsonで数独を解く! Decision Optimizerを使ってみた
Watsonで巡回セールスマン問題を解く
に引き続きWatsonの新サービスDecision Optimaizer紹介の第三弾です。
前2回は、Python APIを使うことでモデル定義を行いましたが、今回は新機能Model BuilderのModeling Assitantを使って、コーディングなしに簡単にモデル構築を行ってみます。
なお、これから紹介するシナリオは、Decision Optimizeチュートリアルを参考に、一部手順を修正したものとなります。
問題定義
家の建築プロジェクトを対象とします。このプロジェクトは下の表にあるような、計10のタスクから構成されます。それぞれの工程に必要な日数も表に記載があります。
また、次のような制約条件があります。
- 10個のタスクすべてを1回ずつ行う必要がある。
- 作業はJoe, Jim, Jackの3名で行う。
- 各タスクは1名の作業員でしか行えない。
- 作業員は同時に最大1つのタスクしか行えない。
- 該当タスクは、表の「前工程」が完了していないと着手できない。
タスク名 | (日本語訳) | 所要日数 | 前工程 |
---|---|---|---|
masonry | (基礎) | 35 | |
carpentry | (内装) | 15 | masonry |
plumbing | (配管) | 40 | masonry |
ceiling | (天井) | 15 | masonry |
roofing | (屋根) | 5 | carpentry |
painting | (塗装) | 10 | ceiling |
windows | (窓) | 5 | roofing |
facade | (外装) | 10 | roofing, plumbing |
garden | (庭) | 5 | roofing, plumbing |
moving | (引渡し) | 5 | windows,facade,garden,painting |
この制約条件を満たした上で、「最短日数で建築を行うにはどうしたらいいか」というのが、これから解く例題の問題設定となります。
事前準備
事前準備としてはWatson Studioの環境セットアップと、csVファイルのダウンロードが必要です。
前者については、下記リンク先に書いた手順をそのまま実施して下さい。オプション設定のうち、Watson Machine Learningとの関連づけも必要になるので、注意してください。
無料でなんでも試せる! Watson Studioセットアップガイド
後者については、以下の2つのCSVファイルをダウンロードして下さい。
https://github.com/makaishi2/sample-data/raw/master/data/build_activities.csv
https://github.com/makaishi2/sample-data/raw/master/data/build_members.csv
モデルの作成
それでは、実際のモデル作成を始めましょう。
最初に上のWatson Studioの管理画面から、画面上部の「Add to project」をクリックします。
上のようなメニューが出てくるので、一番下にある「Decision Optimization」を選択します。
「New Decision Optimization model」のパネルが表示されるので、「House Building」など適当な名前を入力して、画面右下の「Create」ボタンをクリックします。
下のようなModel Builderの初期画面が表示されるはずです。
データの準備(Prepare data)
事前にダウンロードした2つのCSVファイルを上の赤枠の領域にdrag and dropします。
build_actibities.csv
とbuild_members.csv
の2つのファイルにチェックをつけて、「Import」リンクをクリックします。
中央のプレビュー画面で取り込んだ2つのCSVファイルの内容を確認します。
build_members
には3名の作業者のリストが、build_activities
には、10個の作業タスクが、作業日数(Durations in days)と前提タスク(Proceeding activities)とともに入っていることがわかります。
これで、データ準備は完了です。次にモデル構築作業に入ります。
そのため、画面左側のメニューから「Run model」を選んで下さい。
上の画面になったら、真ん中の「Use modeling assistant」を選択します。
上記の画面になったら、「Scheduling」を選択して下さい。
上の画面では、入力とするCSVファイルを指定します。
上の「TASKS」はbuild_activities
を、下の「RESOURCES」はbuild_members
を指定して下さい。
上のダイアログが表示されたら、2箇所にチェックの付いた、デフォルトの状態で「Continue」とします。
上の画面が表示されたら、「Finish」をクリックして下さい。
この画面が解説用のものなので、閉じるアイコンをクリックして閉じます。
ルールの詳細定義
上のような画面が表示されるので、この画面でまた定義できていないルールの詳細を定義していきます。
まず、オレンジの線が出ている2箇所は、決めるべきことが未決定であることを示しているので、こちらを設定します。
上の「must be defined」のアンダーラインをクリックします。
このような画面が出てきます。それぞれのタスク遂行日数の情報をどこから取ってくるかを聞いているので「Duraion in days」を選択します。
次に「a date and time」のアンダーラインをクリックします。
ここで指定すべきことは、タスクの開始日です。例えば「2019/10/01」などと指定してEnterキーを押します。
この段階で、画面は上のようになったはずです。必須入力のオレンジのラインは全部解決しましたが、まだ追加で設定すべき項目が2つあるので、それぞれについて説明します。
①時間の単位の指定については「days」を設定して下さい。
②ここのプラスアイコンをクリックして、先行タスクとの依存関係の制約を追加します。
上の画面のように新しい制約が追加されるので、黄色のアンダーラインをクリックして、先行項目として「Preceding activities」を選択して下さい。
この段階で、モデルの制約は上の画面のようになっているはずです。
お疲れ様でした。これで必要な制約の設定はすべて完了したことになります。
モデルの実行
上記の制約設定がすべて完了したら、画面右上の「Run Model」のボタンをクリックします。
すると、上のような「Running Scenario 1」の画面に遷移します。
しばらく待っていると、上のように問題の解決結果(今回のケースでは90日)が表示されます。
また、詳細項目リストで、「誰がいつからどのタスクを実施するか」が規定されていることもわかります。
画面左下の「Visualization」、引き続いて「Gantt」をクリックすると、上の画面のようにガントチャートも表示可能です。
スキルレベルも考慮した最適化
引き続き、house_expertise.csv
も考慮した最適化計画を作ってみます。
(T.D.B) (後日追記予定)