1

「if (...) then...」などの AMPL 条件文で使用することはできますか? 私がやろうとしたように以下に示します。

subject to c1a {k in K, o in O, n in N: n!=t[k,o]}:
sum{e in E}
   (a[n,e]*x[e,k,o]) -
sum{e in E}
   (b[n,e]*x[e,k,o]) =
            (if (r[n,k]==1 and f[n,o]==1) 
                then d[k,o]*(1-f[k,o])
                else 0);

次のように私にバグを返す私のampl:

CPLEX 11.2.0: Constraint _scon[1] is not convex quadratic since it is an equality constraint.

この問題を解決する方法はありますか?

4

2 に答える 2

1

if-then-else条件 ( と の間の式) に変数が含まれていない場合は、CPLEX で式ifthen使用できます。CPLEX は、含意演算子 ( )を使用する、いわゆる「指標制約」 (詳細については、こちらを参照) もサポートしています。==>if-then-else

あなたの例に関して、どの名前が変数に対応し、どの名前が制約に対応するかは明確ではありませんが、エラーは、問題が によるものif-then-elseではなく、CPLEX でサポートされていない形式の二次制約があるためであることを示唆しています (セクション二次制約を参照してください受け入れられるフォームについては、ILOG AMPL CPLEX System User's Guide の33 ページを参照してください)。

于 2013-05-11T14:24:55.580 に答える
1

ソルバーの cplex は、凸および 2 次の制約のみを処理するように変更できます。これはデフォルトで Ampl 解像度で使用されるため、mod ファイルと dat ファイルを再ロードしてから、次のように別のソルバーを選択できます。

ampl: option solver " ipopt";
ampl: solve;

また

ampl: option solver " couenne";
ampl: solve;
于 2015-03-09T11:54:19.727 に答える