機能プロトタイプシリーズ:アルゴリズムエンジニアリング

概要

機能的試作シリーズは、試作プロセスについて詳しく解説する技術資料集です。キーとなる概念やプロトタイピングのメリット、製品の選び方、その他の技術資料について紹介します。

内容

アルゴリズムエンジニアリング

アルゴリズムエンジニアリングは、「応用されたアルゴリズム設計」を意味する造語です。​紙​に​鉛筆​で​描​い​た​アルゴリズム​の​素案​を、​信頼​性​が​高​く、​十分に検証された、​使い勝手​に​優れた​実装​に​落とし込む​プロセス​を​指し​ます。​アルゴリズム​を​プロトタイプ​に​実装​し​て​所要​の​機能​を​実現​する​この​作業​は、​製品​開発​サイクル​全体​の​中​で​最も​難しい​仕事​に​なる​かも​し​れ​ま​せん。​しかし、​​大きな​見返り​が​得​られる​作業​でも​あり​ます。実​環境​と​インタフェース​する​I/​O​ハードウェア​を​使​え​ば、​アルゴリズム​が​実際​に​機能​を​果たす​様子​を​自分​の​目​で​確認​する​こと​が​でき​ます。 

本稿​では、​アルゴリズム​設計​時に​陥​り​やすい​問題​点​について​説明​する​とともに、​そうした​課題​を​グラフィカル​システム​設計​を​活用​し​て解決する​方法​を​紹介​し​ます。

アルゴリズムエンジニアリング課題 

アルゴリズム​を機能的プロトタイプ​に​実装​する​の​は​簡単​な​作業​では​ありま​せん。​以下​に​挙げる​よう​な、さまざまな​要因​が​ある​から​です。

プログラミング限界。

たとえば​FPGA (Field Programmable Gate Array) ​など、​高い​I/​O​性能​を​特長​と​する​制御​システム​や​プロセッサ​では​通常、​1​人​の​開発​者​が​対応​できる​プログラミング​に​限界​が​あり​ます。​複数​の​異なる​プラットフォーム​で​プログラミング​を​こなせる​知識​を​備え、​十分​な​経験​を​有する​システム​レベル​設計​者​は、​実際​に​は​ごく​わずか​しか​いま​せん。

基本アルゴリズム実装

基本​的​な​機能​で​あっ​て​も、​それ​を​実現​する​低位​の​アルゴリズム​を​実装​する​作業​は​それなり​に​時間​が​かかり​ます。ところが​プロトタイピング​では​スピード​が​最​優先​さ​れる​ため、​一般に​良く​知​ら​れ​た​アルゴリズム​について​は、​手元​に​既存​の​コード​が​無い​から​とい​って​ゼ​ロ​から​時間​を​かけ​て​新規​に​作成​する​余裕​は​ありま​せん。

複数​プラットフォーム​それぞれ​へ​の​実装​で​アルゴリズム​を​手直し

機能​プロトタイピング​では、​工程​が​進む​の​に​伴​って​アルゴリズム​を​実装​する​プラットフォーム​が​変​わ​って​いく​ので、​その​たび​に​アルゴリズム​を​別​の​プラットフォーム​に​移植​する​必要​が​生​じ​ます。​プラットフォーム​間​で​ラン​タイム​環境​が​異なる​と​移植​元​の​コード​は​機能​しま​せん。​この​ため、​ある​アプリケーション​を​開発​する​際​に、試作から​最終​製品​へ​の​実装​まで​の​工程​を通して​段階​的​に​その​アプリケーション​を​拡張​することは困難です。

テスト検証。

システム​が​機能​的​な​要件​を​満たせる​か​どうか​を​プロトタイピング​の​段階​で​見極める​の​は​困難​です。​しかし、​後で結果が悪かったからといってもう一度やり直すとなれば、​コスト​が​かさ​み​ます。​​たとえば、​採用​予定​の​プロセッサ​では​所要​の​並列​タスク​を​十分​な​速度​で​実行​でき​ない​と​判明​する​かも​し​れ​ま​せん。​これ​では、​適切​な​サイクル​時間​を​達成​でき​ない​恐れ​が​あり​ます。​また、​プロセッサ​の​負荷​が​高い​解析​について​は、​リアルタイム​で​処理​でき​ない​可能性​も​あり​ます。

アルゴリズム​エンジニアリング​における​グラフィカル​システム​設計​の​利点

グラフィカルシステム設計を採用すれば、​機能的​プロトタイプ​作成​時​の​アルゴリズム​エンジニアリング​に​潜む​数多く​の​落とし穴​を​回避​した​り、​その​影響​を​軽減​した​り​する​こと​が​でき​ます。​グラフィカルシステム設計と​は、​グラフィカル​で​直感​的​な​プログラミング​手法​と、​柔軟性​が​高​く​市販​品​ (COTS:Commercial Off-​The-​Shelf) として​入手​可能​な​ハードウェア​製品​を​組み合わせる​こと​で、​設計​上の​課題​を​解決​する​手法​です。この手法を導入すれば、​設計​の​全​工程​を通して1つ​の​開発​環境​を使用​する​こと​ができます。​以下​では、​上記​で​挙​げた​課題​を​この​手法​によって​どの​よう​に​解決​できる​の​か、​詳​しく​説明​し​ます。

演算モデル

グラフィカル​システム​設計​の​メリット​の​1​つ​として、​どの​よう​な​演算​モデル (MoC:Model of Computation) で​実装​し​てい​て​も、​プログラマ​が​アルゴリズム​を​作成​できる​という​点​が​挙​げ​ら​れ​ます。​​アルゴリズム​を​実現​する​コード​は​複雑​化​の​一途​を​た​ど​って​おり、​プログラマ​は​コーディング​能力​を​高める​ため​に​さまざま​な​演算​モデル​を​習得​する​必要​に​迫​ら​れ​てい​ます。以下​に​挙げる​の​は、​グラフィカル​システム​設計​で​使用​可能​な​演算​モデル​の​ごく​一例​です。

データフロー

データ​フロー​は、​グラフィカル​プログラミング​環境​で​ある​NI LabVIEW​で​最も​よく​使​われ​て​いる​演算​モデル​です。データ​フロー​では、​開発​者​は​演算​を​実行​する​前​に​すべて​の​入力​に​データ​を​供給​し​て​おく​必要​が​あり​ます。​データ​フロー​はその​直感​的​な​コーディング​構造によって、​並列​処理​など​の​アプリケーション​を​容易​に​実装​でき​ます。

テキスト数式処理

複雑​な​関数​を​簡単​に​記述​できる​ツール​として​は、​この​ほかに​も​テキスト​型​数式​処理​が​あり​ます。テキスト​​数式​演算​を使用する​と、​複雑​な​アルゴリズム​を​スクリプト​形式​で​容易​に​記述​でき、​高い​可読性​も​実現​する​こと​が​でき​ます。​テキスト​数式​演算の例としては、フォーミュラノードやMATLABスクリプトノードがあります。LabVIEW​を使用して、​アルゴリズム​を​開発​する、​信号​処理​の​考え方​を​検討​する、​結果​を​分析​する​など、​アルゴリズム​開発​の​各​段階​それぞれ​において​最も​効果​的​な構文​を​利用​でき​ます。

Cコード

場合​によって​は、​もともと​は​C/​C​+​+言語​で​記述​さ​れ​てい​た​アルゴリズム​を​使う​こと​も​ある​で​しょう。その​際​は、​C/​C​+​+記述​の​既存​コード​を​再​利用​する​こと​が​可能​です。​インラインCノードまたはライブラリ関数呼び出しノードを使用することで、LabVIEW内で前のコードを直接呼び出すことができます。​既存​コード​を​用いる​場合、​あるいは​値​の​小さい​数値​や​配列​アルゴリズム​を​実装​する​場合​に​は、​インライン​C​ノード​を使用します。​DLL​や​共有​ライブラリ​内​の​C​コード​に​アクセス​する​場合​は、​ライブラリ​関数​呼び出し​ノード​を​使用します。

LabVIEWでのPython、MathWorks® MATLAB ®ソフトウェア、およびC/C++の使用の詳細

オープンソフトウェアアーキテクチャ

LabVIEW​プラットフォーム​は​長年​にわたって、​さまざま​な​設計​分野​で​広​く​導入​さ​れ​てい​ます。​そのため、​異なる​設計​ツール​や​シミュレーション​ツール​と​のデータ​の​互換性​を​確保​する​必要性​が​高まり​ま​した。LabVIEW​は​それに​応え​て、​多く​の​統合​ツール​や、​ライブラリ、​ファイル​形式​と​の​相互​運用​性​を​確立​し​てい​ます。​さらに​LabVIEW​は、​以下​を​はじめ​と​する​業界​標準​の​ソフトウェア​ツール​や​計測​リソース​に​対応​し、​非常​に​広範​な​統合​を​実現​し​てい​ます。

  • DLL、共有ライブラリ
  • ActiveX、COM、.NET (Microsoft)
  • DDE、TCP/IP、UDP、Ethernet、Bluetooth
  • CAN、DeviceNet、Modbus、OPC
  • USB、IEEE 1394、RS232/485、GPIB
  • データベース (ADO、SQLなど)

これらの​ツール​を​活用​する​こと​で、​ほぼ​すべて​の​計測​器​や​制御​器​から​の​出力​データ​を​統合​する​こと​が​可能​に​なり​ます。LabVIEW​を汎用のハードウェア通信インタフェースの標準規格と組み合わせることで、​開発​者​は​将来​にわたって​互換性​や​拡張​性​を​確保​でき​ます。

LabVIEW使用した設計手法

LabVIEW​は、​数式​処理​や​信号​処理、​確率、​制御​など​さまざま​な​分野​の​基本​的​な​アルゴリズム​に​対応​した​関数​を​何​百​も​備え​てい​ます。これらは、あらゆるカスタムアルゴリズムにとって不可欠な構成要素です。これらの関数を利用すれば、​開発​者​は​低位​の​コード​を​記述​せ​ず​に済むので、エンジニアは​「ソリューション​の​実装​方法」​では​なく​「ソリューション​そのもの」​に​注力​できる​よう​に​なり​ます。

LabVIEW​を​利用​すると、​実​環境​の​データ​を​とても​簡単​に​集録​でき​ます。​そのため、​実​環境​の​データ​を​使​って​アルゴリズム​を​テスト​し、​アルゴリズム​を​最適​化​する​という​作業​を​繰り返し​行う​際​に​LabVIEW​は​非常​に​有用​です。この​反復​的​な​テスト​手法​では、​異なる​関数​を​試し​て​期待​通り​の​結果​が​得​られる​か​どうか​を​確認​でき​ます。たとえば、フィルタ​を​用​い​て​信号​を​処理​する​場合、ソリューション​を​幅広い​選択肢​の​中​から​選​んで、​実際​に​必要​な​信号​を​集録​し、​その​結果​を​グラフ​や​ファイル​で​確認​する​こと​が​可能​です。​その​アプリケーション​に​適​した​結果​が​得​ら​れ​なか​っ​た​場合​は、​別​の​フィルタ​を​選択​す​れ​ば​よい​の​です。一般的に​は、​アルゴリズム​に​供給​する​実​信号​を​集録​し​て​から、​ソフトウェア​上​で​シミュレーション​する​方​が​簡単​です。

 

COTSハードウェア製品

市販​品​ (COTS) として​入手​可能​な​ハードウェア​製品​を​用いる​と、​コスト​を​抑え​つつ、​迅速​に​試作​に​着手​する​こと​ができます。さらに、​グラフィカルシステム設計と組み合わせれば、​I/​O​を​内蔵​する​さまざま​な​ターゲット​に​ネイティブ​アルゴリズム​を​実装​する​こと​が​可能​です。NI CompactRIO​やPXI​プラットフォーム​に​搭載​さ​れ​て​いる​リアルタイム​プロセッサ​を​利用​すると、​I/​O​の​制御​を​確定​的​に​実行​でき、​信頼​性​を​高める​こと​が​でき​ます。​この​よう​な​I/​O​の​確定​性​は、​制御​アルゴリズム​の​制御​対象​と​なる​環境​を​動的​に​シミュレーション​する​ため​に​ハードウェア​と​ソフトウェア​を​緊密​に​統合​する​必要​が​ある、HIL (Hardware-In-the-Loop) ​アプリケーション​など​で​不可欠​となり​ます。

アプリケーション​を​LabVIEW​で​開発​し​て​お​け​ば、​FPGA​を​備え​た​リアルタイム​プロセッサ​を​利用​できる​ほか、​ある​COTS​ハードウェア​から​別​の​COTS​ハードウェア​へ​と​コード​を​簡単​に​移植​する​こと​も​でき​ます。たとえば、​実​環境​の​I/​O​信号​を​解析​する​デスク​トップ​PC (パソコン) ​用​コード​を、​大幅​に​書き換える​こと​なく​PXI​モジュールや​組​込​プロセッサ​など​フォーム​ファクタ​の​異なる​ハードウェア​に​移植​する​こと​が​可能​です。​実際​の​ところ、​プロトタイプ​の​設計​や​検証​を​まず​デスク​トップ​PC​上​で​行​って​から、​組​込​システム​を​製品​化​する​際​に​内蔵​の​32​ビット​プロセッサ​へ​と​移植​する​という​方法​を​用いる​と、​開発​期間​を​大幅​に​短縮​できる​上​に、​設計​制約​を​満​た​せ​なか​っ​た​場合​に​発生​する​手​戻り​作業​の​コスト​を​削減​でき​ます。

シミュレーション制御設計向けツール群

LabVIEWはオープンプラットフォームであるため、計測データをシミュレーション結果にマッピングすることができます。動作モデリングのために、シミュレーションデータと実測データを入れ替えることもできます。さらに、​シミュレーション​の​出力​を​物理​テスト​の​入力​信号​として​利用​し、​堅牢​な​テスト​環境​を​実現​でき​ます。

LabVIEW​を​用​い​た​シミュレーション​を​使う​と、​設計​の​性能​を​設計​指標​に​照​ら​し​合わせ​て​検証​した​り​予測​した​り​する​こと​が​でき​ます。早期​の​段階​では、​複数​の​異なる​シミュレーション​ツール​を​使​って、​それぞれに​設計​を​読み​込​んで​評価​する​こと​も​可能​です。次​の​段階​では、​構築​した​プロセス​を​自動化​する​ため​に、​レイアウト​もしくは​モデル​形成​の​自動化​や​ツーリング​が​必要​に​なり​ます。システム​の​状態​に関する​情報​と、​もし​可能​で​あれ​ば​出力​信号​も​保存​し​て​おく​と、​アプリケーション​を​デバッグ​した​り、​アプリケーション​の​性能​を​仕様​化​した​り​する​際​に​役​立ち​ます。

線形/​非線形/​離散/​連続​型​の​制御​システム​を​設計​する​際​に​は、LabVIEW Control Design and Simulation Moduleに​用意​さ​れ​た​制御​ブロック​ダイヤグラム​を​活用​し​て​くだ​さい。これ​は​抽象​化​を​用​い​た​プログラミング​手法​で​あり、​制御​系​の​一般​的​な​構成​要素​で​ある​伝達​関数​ブロック​や​積分​器、​微分​器、​フィードバック​ループ​など​を​使​って​プログラム​を​記述​でき​ます。この​よう​な​抽象​度​の​高い​ブロック​ダイヤグラム​を​利用​する​こと​で、​開発​者​は​システム​に関する​経験​や​知識​を​生​かし​ながら、​ソリューション​を​概念​レベル​から​開発​できる​よう​に​なり​ます。

図1.制御​系​設計/​シミュレーションモジュールを使った​PID​制御

 次ステップ

プロトタイプ​に​求め​られる​機能​を​実現​する​ため​のアルゴリズム​エンジニアリング​は、​プロトタイピング​の​中でも​難しい​工程​です。​グラフィカル​システム​設計​と​は、​直感​的​な​グラフィカル​ソフトウェア​と​COTS​ハードウェア​を​緊密​に​統合​する​こと​で​得​られる​メリット​を​生​か​した​手法​です。​この手法を用いれば、​アルゴリズム​エンジニアリング​の​課題​を克服し、​高速​に​動作​する​プロトタイプ​を​低​コスト​で​完成​させる​こと​が​可能​に​なり​ます。

紙面上の設計からソフトウェア設計への移行における技術的情報については、以下の関連資料をご覧ください。

ステップ