トップ > ユーザーサポート > Nuorium Optimizer FAQ > 外部接続

Nuorium Optimizer FAQ

外部接続

Nuorium Optimizer を他のプログラムから呼びたい。

大きく分けて、以下の二つの方法があります。 - Nuorium Optimizer 部分を独立した .exe ファイルにして外部プログラムから別プロセスとして呼ぶ。データの受け渡しはファイルベースで行う。 - Nuorium Optimizer 部分を C++ のライブラリ(静的/動的)にして外部プログラムから関数コールする形で呼ぶ。

前者はデータのやり取りをファイルベースで行うために速度の点では不利ですが、プロセスが分かれており入出力データも見えるので扱いやすいというメリットがあります。 実は Nuorium や mknuopt.bat を使う場合はこちらの方法を利用していることになります。 特に速度を追い求める訳でなければ、こちらの方法をお勧めしてます。

後者は余分なオーバーヘッドがない分高速ですが、比較的高いプログラミングスキルが要求され、扱いが難しいというデメリットがあります。 詳細については「Nuorium Optimizer 外部接続マニュアル」をご参照ください。

なお、後者については外部接続のサンプルプログラムがパッケージと一緒に配布されてますのでご参照ください。Nuorium Optimizer のインストール先が

C:\Program Files\NUOPT

の場合、

C:\Program Files\NUOPT\SAMPLES\app

に外部接続のサンプルプログラムがあります。

C++ の配列データを Parameter に代入したい。

readD 関数を用います。例えば、以下の 6 つの要素を持つ配列 dParameter に代入することを考えます。

double d[] = {1,2,3,4,5,6};

1 次元の Parameter p1 に対しては、

p1.readD(6,d);

とすると

p1[1]=1
p1[2]=2
p1[3]=3
p1[4]=4
p1[5]=5
p1[6]=6

と設定されます。また、2 次元の Parameter p2 に対しては、

p2.readD(2,3,d);

とすると

p2[1,1]=1
p2[1,2]=2
p2[1,3]=3
p2[2,1]=4
p2[2,2]=5
p2[2,3]=6

と設定されます。

readD 関数は多次元の配列を受け付けません。上記のように必ず 1 次元の配列を入力するようにしてください。

詳細は「Nuorium Optimizer 外部接続マニュアル」の「C/C++の配列の内容の設定」をご覧ください。

Visual Studio 上で 自作の C++ プログラムと Nuorium Optimizer ライブラリをリンクしようとしましたが、失敗しました。

Debug モードのままリンクをしていないでしょうか。 Nuorium Optimizer ライブラリは Debug モードではリンクできません。 Visual Studio 2005 で Debug モードでリンクしようとすると、以下のようなエラーメッセージが出ます。

>libnuopt_MD_m.lib(AdopterImpl.obj) :
 error LNK2001: 外部シンボル "__imp__MessageBoxA@16" は未解決です。

...

>fatal error LNK1120: 外部参照 4 が未解決です。

ご自身の C++ プログラムと Nuorium Optimizer ライブラリを接続される場合は必ず Release モードで行ってください。

また、昔のバージョンで作成した Visual C++ プロジェクトをビルドしたり、コンパイラを変更した場合に 設定の違いでリンクエラーが発生することがあります。

例えば、

1>LINK : fatal error LNK1181:
 入力ファイル 'libnuopt_ML_m.lib' を開けません。

と表示された場合は、リンカーの設定で Nuorium Optimizer ライブラリの名前を libnuopt_MD_m.lib または libnuopt_MT_m.lib と 変更することにより解決される場合があります。

また、例えば、

1>libnuopt_MT_m.lib(nrset.obj) :
 error LNK2001: 外部シンボル "_GetProcessMemoryInfo@12" は未解決です。
1>C:\Program Files\NUOPT\SAMPLES\app\Release\useSolveQP.exe :
 fatal error LNK1120: 外部参照 1 が未解決です。

のように表示された場合はリンカーの依存ライブラリに psapi.lib を追加することにより解決される場合があります。

設定の詳細は「Nuorium Optimizer/SIMPLE 外部接続マニュアル」を参照してください。

「モジュールのコンピューターの種類 'x64' は対象コンピューターの種類 'X86' と競合しています」と出ます。

64bit コンパイラで外部接続を行う場合は、Visual Studio のプロジェクトを 64bit 構成に変更する必要があります。 設定の詳細については「Nuorium Optimizer/SIMPLE 外部接続マニュアル」をご参照ください。