Как я могу выполнить поэлементную операцию с векторами параметров в AMPL

#ampl

#ampl

Вопрос:

В MATLAB, если у меня есть два вектора a=[a_1,..,a_n], b=[b_1,..,b_n] , я могу получить другой вектор c = [a_1/b_1,..,a_n/b_n] с помощью a./b . Как я могу добиться этого в AMPL?

Ответ №1:

Вы можете использовать что-то вроде этого:

 set S := {1,2,3};
param p{S};
var x{S};
var y{i in S} = x[i]*p[i];
  

или поочередно:

 set S := {1,2,3};
param p{S};
var x{S};
var y{S};
s.t. c1{i in S}: y[i] = x[i]*p[i];
  

Однако ваша способность делать это может быть ограничена ограничениями, поддерживаемыми вашим решателем, например, если вы определяете отношение, которое подразумевает нелинейное ограничение при использовании нелинейного решателя.