最適化セミナーのご案内

2.3 Numerical Optimizerの処理の流れ

 2.2で取り上げた通りNumerical Optimizerには二種類の利用方法がありますが,GUIを用いる方法に関しましては「Nuoriumユーザガイド」をご覧ください.以下ではコマンドラインでの処理の流れを説明します.

  1. SIMPLEで数理計画問題(モデル)を記述
  2. 1で記述されたモデルを実行形式に変換する(コンパイル)
  3. 実行形式を(必要ならばデータファイルを引数として与えて)起動させる

 数理計画問題(モデル)の記述はテキストエディタをご利用ください.

 windowsではmknuopt.batにより実行形式[モデルファイル名].exeを作成します.一方,UNIX/Linuxではmknuoptにより実行形式[モデルファイル名]を作成します.また,実行形式を起動させる際にUNIX/Linuxでは./[モデルファイル名]と指定します.なお,モデルファイル名に使える文字は,半角英数字および半角アンダースコア(_)のみです.

 以下はwindows版での手順です.なお,並列処理を伴う分枝限定法・制約充足問題ソルバwcspを実行したい場合は「10.5分枝限定法・制約充足問題ソルバwcspの並列化」を参考にしてください.

prompt% mknuopt.bat [モデルファイル名].smp
prompt% [モデルファイル名].exe [データファイル]

 以下はUNIX/Linux版における手順です.

prompt% mknuopt [モデルファイル名].smp
prompt% ./[モデルファイル名] [文字コード指定オプション] [データファイル]

 同じ数理計画問題に対してデータだけ異なる問題を解く場合には,再度2の手順を踏む必要は無く3だけの手順で事足ります.

 Numerical Optimizer V16以前のUNIX/Linux版では,ufunという名前のvoid型関数を含んだ.ccファイルをモデルファイルとしていましたが,Numerical Optimizer V17からはwindows版と同一のモデルファイル(.smpファイル)が利用可能になりました.

 .cc形式のモデルファイルも引き続き利用可能です..cc形式のモデルファイルを利用する場合の実行方法は,以下のとおりです.

prompt% mknuopt [モデルファイル名].cc
prompt% ./[モデルファイル名] [文字コード指定オプション] [データファイル]

 ただし,.cc形式のモデルファイルを利用する際は,下記の点に注意する必要があります.

  • name 引数の自動設定は行われません
    モデルファイルとして.smpファイルを利用したときには,name引数が省略されている場合,モデルファイル内で定義された名前であるとみなされます.
    一方,モデルファイルとして.ccファイルを利用したときには,このような自動設定はなされません.name引数が省略されたParameter等に対しては,データファイルから値を設定することができなくなります.
    詳しくは,5.4節をご覧ください.
  • ヘッダファイルsimple.hのインクルードが必要です
    .cc形式のモデルファイルは,次のように記述する必要があります.
    #include "simple.h"
    void ufun(){
     ... // ここに数理計画モデルを記述
    }
    たとえば,次の数理計画問題を.smp 形式と.cc形式で記述した場合,以下のような違いがあります.

    \[\begin{array}{@{}ll@{}} \mbox{最小化} & x + y \\ \mbox{条\hskip1zw 件} & x + 2y = 2 \\ & x >= 0, y >= 0 \end{array}\]


    .smp形式

    Variable x;
    Variable y;
    Objective f(type=minimize);
    f = x + y;
    x + 2*y == 2;
    x >= 0;
    y >= 0;
    .cc形式
    #include "simple.h"
    void ufun(){
     Variable x;
     Variable y;
     Objective f(type=minimize);
     f = x + y;
     x + 2*y == 2;
     x >= 0;
     y >= 0;
    }
    なお,.cc形式でSIMPLEのモデル記述において対称行列SymmetricMatrix/行列Matrix/ベクトルVectorなどのSIMPLEのクラスオブジェクトを使用する場合には,
    #include "simple.h"
    #include "simpleMatrix.h"
    void ufun(){
     ... // ここに数理計画モデルを記述
    }
    もしくは,
    #include "simple.h"
    using namespace SimpleMatrix;
    void ufun(){
     ... // ここに数理計画モデルを記述
    }
    とする必要があります.

 

 

上に戻る