如何在AMPL中对参数向量进行按元素运算

问题描述

在MATLAB中,如果我有两个向量a=[a_1,..,a_n],b=[b_1,b_n],则可以通过c = [a_1/b_1,a_n/b_n]获得另一个向量a./b。如何在AMPL中实现这一目标?

解决方法

您可以使用类似这样的内容:

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

或替代:

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

但是,您执行此操作的能力可能会受到求解器支持的约束的限制,例如如果您在使用非线性求解器时定义了暗示非线性约束的关系。