最適化計算をしてみてパソコンを検討してみた
Global Optimazation Toolboxを使った最適化計算を試す
ソルバーと呼ばれる、 最適化問題を解くためのツールとして、 MATLABのGlobal Optimazation Toolboxが使われることがよくあります。
私たちが開発しているソフトウェアでも この「最適化」を行う工程が含まれていまして、 MATLABを今後使っていけるかどうかを評価するために、 ちょっと試してみました。
実際には私は数学苦手なので、同僚に試してもらいました・・・。 最適化難しい…。
具体的には、 今、C++で組まれている最適化をするプログラムを、 MATLABで組みなおしてもらって、 今後MATLABが私たちの開発で使えるかどうかを試してもらいました。
MATLAB購入前の検討段階だったので、 評価版を使って、Global Optimazation Toolboxを評価させてもらいました。
ちなみに、使ったパソコンのスペックはこんな感じです。
CPU:Corei5 1.6GHz
メモリ:8GB
グラフィックス:Intel UHD Graphics620
ストレージ:SSD 500GB
どんなプログラムか?
えーっと、詳しく書いちゃうと 身バレしちゃうので、 概要だけにさせてください。ごめんなさい。
概要としては、 力のつり合い式を最適化して解くプログラムを作りました。
下の図は、ロボットの関節だと思ってください。
ロボットの関節にかかっているトルクがわかっているとします。
実際には、 その関節をまたいでいる、無数の繊維が力を発したり受けたりしてトルクが生じます。
この繊維の力は、最小の力でトルクを生じさせています。
「関節のトルク = n本の繊維が発するトルク」
このn本の繊維の力を最小にするような 最適化問題を解いていきます。
この力っていうのは、 マイナスにならない、破断するほどの力を受けないという 制約条件があります。
これをMATLABの二次計画法で最適化していきます。 (色々省いて一気に飛んですみません。)
繊維の数は約300本くらいなので、 300個の連立方程式を解いていく感じです。
静止状態だったらいいのですが、 これを時系列で動かしていくので、 1秒に100サンプルくらいで10秒計算すると・・・1000回計算するわけです。
つまり、300個の連立方程式を1000回解くわけです。 いろんな制約条件を考慮して。
ごめんなさい、 実際のプログラムは、ここには書けませんが…。
パソコンは問題なく動いたか?
MATLAB速っ!
私たちのプログラムでは、5分くらいかかったのですが、 3分強くらいで解けました。
ちなみに、最適化については、ここを参考にしました。
MATLABでは、 二次計画法といっても色々な方法が実装されています。
現状のC++での実装とは、 ちょっと違う方法を試したから速くなったのかもしれません。
MATLABはコード量が少なくて 色々試せるので、ソフトの改良を効率的にできるかもしれません。
GPUは必要か?
Global Optimazation Toolboxでは、 GPUを使った並列計算はサポートしていません。(2021年1月現在)
なので、NVIDIAのグラフィックボードが載っている必要はなく、 どちらかというと、CPUのクロック数を上げてやるのが 速度を上げる要因になるかと思います。
まとめ
Global Optimazation Toolboxは、 MATLABが一般的に動くようなパソコンでも 十分に速く計算できます。
計算はCPUを使うので、 CPUのクロック数が速いパソコンほど計算速度が上がります。
関連記事
MATLABでディープラーニングのサンプルを動かしてパソコンを検討した
MATLABで動画ファイルから顔検出するサンプルを動かしてパソコンを検討した