最適化セミナーのご案内

5.2.4 初期設定とmain関数(UNIX)

 前項のようにSIMPLEのクラスをユーザプログラムから利用するには初期設定をおこなっておく必要があります.

 次がsimpleControlを呼び出しているuseClass.ccのメイン部分です.

#include "simple.h" // 必要な初期設定
void simpleControl();

//
//  メイン関数サンプル
//
//
int main(int argc,char** argv)
{
  // SIMPLE内部の初期化(これはいつでも必須)
  SimpleInitialize(); 

  //
  // SIMPLE形式で記述されたデータを読む
  //     (ファイル名が引数から与えられるものとする)
  //
  int i;
  for (i = 1 ; i  < argc; i++) {
    char *file = argv[i];
    FILE* fp;
    if (strcmp(file, "stdin") == 0) fp = stdin;
    else fp = fopen(file, "r");
    if (!fp) {
      fprintf(stderr, "can not open %s\n", file);
      exit(1);
    }
    readData(fp, file);
  }
  simpleControl(); // モデルの求解など

  // SIMPLEが利用するスタティックバッファのクリア
  SimpleClearBuffer();

  return 0;
}

 このプログラムはデモ用に最低限の機能を果たすサンプルです.ユーザはこの内容にこだわることなく,自由に記述することができますが,以下に述べる注意を守る必要があります.

 まず,メイン手続きで(すべてのNumerical Optimizer関連の処理を行う前に)

SimpleInitialize();

を必ず一度だけ呼ぶ必要があります.これを呼ぶためには,

#include "simple.h"

というヘッダファイルのインクルードが必要です.なお,文字列操作のためにstring.hのインクルードを行なう場合,#include <string.h>#include "simple.h"より前に記述する必要があります.

 

 実行形式を作成するには

使用するモデルファイルから生成されたクラスの実装(QP.ccに相当するもの)

Numerical Optimizerのライブラリ

をユーザプログラムにリンクする必要があります.

 最後のSimpleClearBuffer()はSIMPLEが保持しているスタティックバッファのクリアを行う命令です.このコールを行った後は,コールを行う前に定義したいかなるSIMPLEオブジェクトの内容も参照することはできなくなる代わりに,プロセスの占有メモリ領域を減らすことができます.

 次はメイクファイルの内容(一部)です.ライブラリはこのメイクファイルで“LIB”という変数に定義されています.

 UseClass.ccでは,QP.smpの他,knapsack.smpというモデルを使用しているので,これらをまず,genClassに入力,生成されたQP.ccknapsack.ccuseClass.ccとリンクしています.

QP.cc : QP.smp # *.smpからソースを生成する規則
     genClass $*.smp

  knapsack.cc : knapsack.smp
     genClass $*.smp

  useClass : QP.o knapsack.o useClass.o # 実行形式作成
     link -out:$@ QP.o knapsack.o useClass.o $(LIBS)

 

 

上に戻る