AMPL では、添字に変数を使用することはまだ許可されていません。ただし、それらをエミュレートする方法があります。たとえば、M1[a] >= 10
次のようにエミュレートできます。
s.t. c: exists{i in A} (M1[i] >= 10 and i = a);
これはあまり効率的ではありませんが、小さな問題では問題なく機能するはずです。上記の制約 (または追加された添字内の変数) を含む問題を解決するには、ilogcpやgecodeなどの制約プログラミング ソルバーが必要であることに注意してください。詳細については、ロジックおよび制約プログラミングの拡張機能を参照してください。
AMPL 用の ilogcp ドライバーの新しいバージョンでは、次のelement
ような制約がサポートされています。
include cp.ampl;
var x{i in 0..2} >= i integer;
var y in 0..2 integer;
minimize o: element({i in 0..2} x[i], y);
option solver ilogcp;
solve;
whereelement({i in 0..2} x[i], y)
は と同等であり、制約x[y]
に変換されます。IloElement