はい、1 回の呼び出しで CPLEX 問題に複数の行 (制約) を追加できます。CPXaddcols.
CPXcreateprob
呼び出しの後、上記を呼び出す前CPXaddcols
に、適切な数の を呼び出してCPXnewrows
、これらの制約がゼロでないことを CPLEX に通知していることを確認してください。
CPLEXヘルプがここに述べているように
CPXaddcols cannot add coefficients in rows that do not already exist (that is, in rows with index greater than the number returned by CPXgetnumrows);
[...]
The routine CPXnewrows can be used to add empty rows before adding new columns via CPXaddcols.
また、変数を追加するときcolNum
に、新しい列に追加するゼロ以外の値の数を実際に参照していることを確認してください。
この例には、 を呼び出すたびCPXaddcols
に変数が 2 つの制約に追加されるインスタンスがあります。
具体的には、コードの次の部分をよく見てください。
/* Add flow variables */
for (j = 0; j < NUMEDGES; j++) {
ind[0] = orig[j]; /* Flow leaves origin */
val[0] = -1.0;
ind[1] = dest[j]; /* Flow arrives at destination */
val[1] = 1.0;
name[0] = buffer;
sprintf(buffer, "x%d%d", orig[j], dest[j]);
status = CPXaddcols (env, lp, 1, 2, &unitcost[j], &zero, ind, val,
NULL, NULL, name);
それが役立つことを願っています。