このとき、マッチング数の最大化は以下のように表現できる。満たす制約は、それぞれ以下のように表現できる。制約1:メンバーが選択(pick)したコーチの範囲でマッチングが発生する可能性がある(選択されていないコーチはマッチングが発生し得ない)制約2:1人のコーチは、2人までメンバーをコーチできる制約3:1人のメンバーには1人のコーチしかつかない■コーディングと求解いよいよ、定義した数式をコード化し、Pythonのpulpモジュールで実際に解いてみます。(コードを記載していきます。)まずは必要なモジュールをインポートします。PandasはPythonでデータを「データフレーム」という加工しやすい形に変えた上でさまざまな加工を行うことができるモジュール、pulpは数理最適化問題を解くためのモジュールとざっくり捉えてください。pulpの使い方は、詳しく解説するともう1本記事ができ上がる位の文面を割く必要がありそうなので、本ブログでの詳細な説明は省略させていただきますが、使い方が詳しく紹介されているページ*1がありますので、興味のある方はご参照ください。ppまず、テスト用のデータを作成します。)print(data)作成したデータは、以下のとおりです。「1」は、メンバーが「この人をコーチにしてほしい」と選択したことを表しており、「0」はメンバーがそのコーチを選択しなかったことを表しています。0ここから、最もマッチングの合計数が高くなる組み合わせを求めるためのコードを、記載します。「LpProblem」で問題の名前と、目的関数を最小化(LpMinimize)するか最大化(LpMaximize)するかを、選択します。今回はマッチング数の最大化なので、「LpMaximize」ですね。pp.LpMaximize)次に、最適化で使用する変数を作成します。変数は「LpVariable」内で変数名、変数の範囲、変数の種類(連続値・整数・2値変数)を定義し、作成します。今回は、定式化で定義した0-1のマッチング変数を作成するので、「LpBinary」と設定してます。cat=pp.LpBinary)次に、制約条件を作成します。先ほど定義した問題のオブジェクト(problem)に、「+=」の形で制約式を追加することで、制約を設定できます。制約式には、引数で名前をつけることができます。(m_num))最後に、最大化する関数を作成します。これも先ほどの制約の追加と似ていて、最大化する式を作成し問題オブジェクト(problem)に追加することで、設定することができます。objective全ての条件がそろったので、解を求めて結果を出してみましょう。定式化まで正しく行えていれば、中身の解き方まで人が考えなくともpulp内のアルゴリズムが解いてくれます。(ただし制約が厳しすぎる場合は解が無いこともあります。data.columns[c_num]))結果は、こんな感じで表示されます。全員がちゃんとマッチングしていますし、制約条件も守られていることが確認できると思います。人がマッチングされましたメンバー1さんとコーチ2さんがマッチング!メンバー2さんとコーチ1さんがマッチング!メンバー3さんとコーチ2さんがマッチング!メンバー4さんとコーチ3さんがマッチング!メンバー5さんとコーチ3さんがマッチング!メンバー6さんとコーチ1さんがマッチング!■社内で実際に使ってみた実際に社内でマッチングロジックを試してみたところ、ちゃんと制約を満たしながらメンバーが全員マッチングする組み合わせを、すぐに見つけてくれました。便利です!ただし、実際の利用シーンでは人の入れ替わりによってコーチ・メンバーを変更させたり、希望者は半年に1回程度新しい組み合わせを試してみたり、と完全に業務に適用するためにはもう少し改善が必要です。今回書いたコードで完結ではなく、これからも随時機能を追加することで、さまざまな状況に対応できるマッチングの仕組みを整えていく予定です!■他のビジネスへの応用は?今回の事例は1on1のマッチングしか利用できないことはなく、もう少し複雑な制約や、新しい変数を導入することで、多くのことに活用できると思います。今回の事例をさらに発展させる案として、1on1の満足度アンケートや各メンバー・コーチの得意分野も踏まえて、マッチングスコアを定義し、メンバー・コーチの満足度が最大化するマッチングを実現させることが、できるかもしれません。人事系の取り組み以外にも、さまざまなサービスに応用できると思います。法人営業において、成約数を最大化するためにどの営業の方がどの企業を担当するのかのマッチングや、結婚・お見合いなどのマッチングビジネスにも活用できるかもしれません。■まとめいかがだったでしょうか。今回は一風変わって、「自社の業務」を最適化した例をご紹介しました。私以外にも、例えば社員の顔写真を画像認識して似ている顔を分類してみるなど、社内のデータを活用した面白い取り組みの実施例は数多く挙げられます。お客様とのプロジェクトを進める時間以外は、このような形で自己研鑽ができ、またそのような研鑽が推奨される文化であることは、データサイエンティストとしてはとても有り難い環境だと感じています。...強化学習入門の第3弾。採用ページスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。