2

私はIBMCPLEXを使用して、C++APIを使用して制約プログラムをモデル化しています。

私はboolvar配列を次のように宣言しました:

IloEnv env;
IloBoolVarArray bVars(env);

次に、3つの変数を配列に追加し、次のように名前を割り当てます。

bVars.add(IloBoolVar(env,"a"));
bVars.add(IloBoolVar(env,"b"));
bVars.add(IloBoolVar(env,"c"));

私の質問は:

式で変数を参照/使用するには、この配列の変数(0、1、または2)のインデックスを知る必要がありますか?

割り当てられた名前「a」、「b」、または「c」を使用して変数を参照する方法が見つからないようです。

4

2 に答える 2

2

コンストラクター内の変数の「名前」は、.lp ファイルに対して「exportModel」を実行するときに使用されます。インタラクティブなデバッグには役立ちますが、コード内でのアクセスには役立ちませんし、まったく必要ありません。式で配列の要素を使用する場合は、インデックスを知る必要があります。連想配列ではありません。ただし、他にもかなりの数のオプションがあります。それらを c++ 変数に割り当てることができます。

IloBoolVar a(env, "a");
IloBoolVar b(env, "b");
IloBoolVar c(env, "c");

タイプ IloBoolVar は実装へのハンドルであるため、必要に応じて値を配列に格納することもできます。

IloBoolVarArray bVars(env);
bvars.add(a);
bvars.add(b);
bvars.add(c);

その場合、bvars[0] とaは同じ変数を表します。名前によるランダム アクセスが必要な場合は、std::map またはハッシュ テーブルを使用して変数を格納することもできます。

于 2012-02-16T21:37:45.423 に答える
0

このような配列を定義することもできます

IloBoolVarArray bvars( env , 3 );

3つのブール変数の配列が自動的にインスタンス化され、[]演算子で任意の配列としてアクセスできます。

プログラムに多くの変数が含まれている場合は、名前の代わりに整数インデックスを使用する方が適切で簡単です。

于 2012-02-16T21:43:27.530 に答える