CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
本は好きなのでよく本屋さんにへ立ち寄ります。最近、見つけた本がとても面白かったので冒頭で紹介します。「宇宙の終わりに何が起こるのか」という本で、著者は新進気鋭の宇宙論の研究者さん。現代物理学から導かれる宇宙の終わり方が5つ紹介されています。地球の終わりではなく、宇宙の終わりというところがいいですね。スケールの大きさが違う。日常の些細な出来事なんて、取るに足らない塵のようなものです。ゴチャゴチャした現実世界に飽き飽きしたら、ぜひ手に取ってみてください。
宇宙もいつかは終わるので、全部どーでもいいかなーと思ってしまうと話が進まないので、今日は私がこれから流行ると思う分野について書こうと思います。まだあまり注目されていない分野をここで紹介しておくことで、数年後ブームになったとき「ほら、このブーム予想していたんですよ」と自慢するための仕込みです。何も起きなかったら、全部まとめて忘れてしまえば良いだけですし。
次に来るのは何か?それはずばり「データ駆動型進化的最適化」です。これは、Data-Driven Evolutionary Optimizationを私が訳したものなので、日本語で検索してもほとんど何も出てきません。英語で検索すると、そのままがタイトルになった本が出てきます。ただ、まだそれほど注目されてはいないので、情報はそこまで豊富ではありません。ですので、もしこの後ブームになったら、すごいドヤ顔ができるなと思っています。ただ、ちょっと難しい話なので、数理最適化の簡単な説明から始めて、データ駆動型進化的最適化とは何なのかを解説します。
数理最適化は、現象をモデル化して数式に落とし込み、その数式を解くことで最適な解を求める方法です。たとえば、いくつかの工場といくつかの店舗がある状況での配送計画や、ナーススケジューリング問題と呼ばれる、勤務シフトを作る作業などに応用されています。といってもまったくこの分野を知らない方からは、何を言っているのかさっぱりだという声が聞こえてきそうですし、このコラムだけで数理最適化を説明するのは難しいので、ご興味のある方にはこちら、「Pythonではじめる数理最適化: ケーススタディでモデリングのスキルを身につけよう」がおすすめです。数理最適化のアルゴリズムは、機械学習を裏で支えていたりするので、最近ちょっと注目を集めている分野ではあります。
現象をモデル化し、最適化したいものを決めて、数式を作るというのが数理最適化のプロセスです。配送計画であれば、工場と店舗の距離や工場の生産能力、店舗の需要からモデルを作り、配送費用を最適化したいのであれば、それに応じた数式を書き下すことになります。数式ができたらあとはそれを解けばよいだけです。微分を使えばその数式が最小(最大)になる変数を決められます。これを解析的に解くと言ったりします。ただ、いつも問題が解析的に解けるとは限りません。現実の問題は複雑なので、出来上がった数式が簡単に解けないということが起こります。そんな状況で役に立つのが、発見的解法(専門的にはメタヒューリスティクスなどと呼ばれます)です。これは、数式の最適解を数学的には解きません。より良い解が見つかれば、方法は問わないという姿勢で解を探します。まさに手段は選ばん!という感じ。たとえば、発見的解法の代表例である遺伝的アルゴリズムは、より良い解が子孫を作り、優れたものが生き残っていくことでさらに良い解が生まれるという、生物の進化を模した方法になっています。最近では、粒子群最適化(PSO:Particle Swarm Optimization)といった方法論も提案されていて、こちらは鳥の群が空を飛ぶように、ある一定の大きさの群れ(解の候補)がそれぞれ最適解を探すという方法です。
変数が3つあって、それらの関係性を数式で表現し関数を作れば、3つの変数に対応した出力が得られます。いまは出力を1変数としましょう。この変数と出力の対応関係から、この関数を最小にする3つの変数の具体的な値を探すというのが数理最適化です。数式を解析的に解ければいいですが、解けない場合は発見的解法に頼ります。解析的に解く場合は数式がないと話が始まりませんが、発見的解法は実は数式を前提としていません。3つの変数と1つの出力の対応があれば良いだけです。つまり、モデルを数式で表現できなくても、十分なデータがあれば発見的解法で最適解を探すことができるわけです。通常、現実世界の問題からモデルを作り数式に落とし込むのは骨の折れる作業です。難しいので、古くから研究されている問題に類似の問題がないかを探したりします。しかし、発見的解法を使うのであれば、問題を数式で表現できなくても大丈夫です。データがあれば、入力に対する出力を計算できるので、これをそのまま最適化問題にすればよいだけなのです。発見的解法には、生物の進化を模した進化的アルゴリズムが使われることが多いので、まとめると「データ駆動型進化的最適化」となるわけです。
進化的アルゴリズムは、いろいろな手法が提案されていて、研究も進んでいるのですぐに使えるライブラリもすでにあります。たとえば、C++で実装されたPagmoには、pygmoというPythonラッパーまで用意されています。インストールがすこし面倒ですが、Pythonのコードだけで、進化的最適化のアルゴリズムが実行できます。つまり、最適化したい課題とデータがあれば、少しのコードを書くだけで、これまでの業務や研究課題を飛躍的に効率化できる可能性があるのです。
はじめに紹介したData-Driven Evolutionary Optimizationというタイトルの本の副題は、「Integrating Evolutionary Computation, Machine Learning and Data Science」となっています。データ駆動型進化的最適化は、機械学習とデータサイエンスの成果を取り込みつつ、進化的アルゴリズムを使って、データ駆動型に最適解を求める方法論です。これはかなり応用範囲が広く、数式に縛られないので、利用するときの障壁もかなり低いと思います。教師ありの機械学習には質の良い教師データが必要ですが、コストを下げたい、売上を最大化したい、人員配置を効率化したいなど、最適化したいものが決まっている場合はデータ駆動型進化的最適化で答えを見つけることが可能です。この柔軟性に気が付く人が増えれば、きっと流行るんじゃないかと思っています。今回は短いコラムだったので、詳細を伝えきれなかった面もありますので、もしご興味ありましたら、こちらまでご連絡ください。一緒に、データ駆動型進化的最適化の大ブームを巻き起こしましょう!
筆者書籍紹介 いちばんやさしいパイソンの本 Python スタートブック ――Pythonの基本をしっかりマスター まったくのゼロからでも大丈夫 辻真吾 著 B5変形判/352ページ 定価(本体2,500円+税) ISBN 978-4-7741-9643-5 詳しくはこちら(出版社WEBサイト) |
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes