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

Numerical Optimizer FAQ

外部接続

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

大きく分けて、以下の二つの方法があります。

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

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

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

C:\Program Files\NUOPT

の場合、

C:\Program Files\NUOPT\SAMPLES\app 

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

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

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

 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 次元の配列を入力するようにしてください。

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

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

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

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

...

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

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

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

例えば、

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

と表示された場合は、リンカーの設定で Numerical 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 を追加することにより解決される場合があります。

設定の詳細は「Numerical Optimizer/SIMPLE 外部接続マニュアル」を参照してください。Numerical Optimizer のマニュアルはこちらからダウンロードできます。

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

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