数理最適化セミナーのご案内

6.3 C/C++の配列の内容の設定

 モデルを操作するルーチンが行う最初の操作はC/C++の配列として渡されたデータをSIMPLEのオブジェクトに設定するということです.スカラー値の場合には,doubleまたはintの値をそのまま

Parameter b;
b = barg; // bargはdoubleの入力引数

と代入できますが,添字付けられた大量のオブジェクトを配列から一気に読み込むにはreadDという手続きを使います.readDは一般にCの配列からSIMPLEのオブジェクトを設定するためのツールで,本章のようなアプリケーション接続の際によく利用されます.呼び出しの一般形は次の通りです.

void readD(int len1, int len2, .., int lenM, double* data) const
引数の型:    
  len1, len2, ..., lenM : 次元のサイズ
  data : 実際のデータ

 

 与えられる配列データ(data)を一般の多次元配列(添字は1から始まる整数値)に読みかえて解釈するので,行列など多次元の配列を定義することができます.次は実際の利用例です.

// 配列内容
  double cont[27] = {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7,
                     2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7,
                     3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7,
                     4.1, 4.2, 4.3, 4.4, 4.5, 4.6};
  Set a1(name = "a1");   Element i1(set = a1);
  Parameter p1(index = i1);    // 1次元配列データ
  p1.readD(5, cont);
  // 結果: p1: [1]=1.1,[2]=1.2,[3]=1.3,[4]=1.4,[5]=1.5

  Set a2(name = "a2", dim = 2); Element i2(set = a2);
  Parameter p2(index = i2);   // 2次元配列データ
  p2.readD(2, 3, cont);
  // 結果: p2: [1,1]=1.1,[1,2]=1.2,[1,3]=1.3
  //           [2,1]=1.4,[2,2]=1.5,[2,3]=1.6

  Set a3(name = "a3", dim = 3); Element i3(set = a3);
  Parameter p3(index = i3);  // 3次元配列データ
  p3.readD(2, 3, 2, cont);
  // 結果: p3: [1,1,1]=1.1,[1,1,2]=1.2,[1,2,1]=1.3,[1,2,2]=1.4
  //           [1,3,1]=1.5,[1,3,2]=1.6,[2,1,1]=1.7,[2,1,2]=2.1
  //           [2,2,1]=2.2,[2,2,2]=2.3,[2,3,1]=2.4,[2,3,2]=2.5

 

 

上に戻る