1 回答

TA貢獻1798條經驗 獲得超7個贊
您可以使用腳本在 AMPL 中執行此操作。例如:
reset;
option solver gurobi;
param n_x := 3;
var x{1..n_x};
param bignum := 1e4;
param layer;
set layers := 1..n_x;
s.t. sum_constraint: x[1] + x[2] + x[3] = layer;
s.t. c1a: x[1] >= (if layer = 1 then 10 else 10-bignum);
s.t. c1b: x[1] <= (if layer = 1 then 10 else 10+bignum);
# on layer 1, constrain x[1] = 10, otherwise leave it effectively unconstrained
s.t. c2a: x[2] >= (if layer = 2 then 20 else 20-bignum);
s.t. c2b: x[2] <= (if layer = 2 then 20 else 20+bignum);
s.t. c3a: x[3] >= (if layer = 3 then 30 else 30-bignum);
s.t. c3b: x[3] <= (if layer = 3 then 30 else 30+bignum);
minimize of: x[1]^2+x[2]^2+x[3]^2;
for {i in layers}{
let layer := i;
printf "\nLayer = %1.0f\n", layer;
solve;
display x;
}
您還可以使用 和 語句來打開和關閉約束,具體取決于您希望自動執行約束的程度。droprestore
添加回答
舉報