AMPL:错误处理参数:无效的下标被丢弃

问题描述

因此,我正在尝试使用 AMPL 解决非线性问题,并在尝试运行时出现此错误。 正如您在下面的代码中看到的,我有多个目标,准确地说是 32,因为我的测试参数是在一组 32 个元素 (I) 中编入索引的。我不知道 sintax 是否正确,但此时我正在考虑使用 for 循环或其他东西,因此我的参数是一维的。我很感激任何答案,谢谢。

修改

#Funciones comunes
function gsl_cdf_ugaussian_P;
function gsl_cdf_ugaussian_Pinv;
function gsl_ran_ugaussian_pdf;

#Conjunto
set I;

#Parametros
param alphaL{I};
param h{I};
param S;
param mu{I};
param sigmasq{I};
param L;

#Variables
var Q{I};
var r{I};
var x1{i in I} = (r[i]-mu[i]*L)/(sqrt(sigmasq[i]*L));
var x2{i in I} = (r[i]-mu[i]*L+Q[i])/(sqrt(sigmasq[i]*L));
var H1{i in I} = 1/2*((x1[i]**2+1)*(1-gsl_cdf_ugaussian_P(x1[i]))-x1[i]*gsl_ran_ugaussian_pdf(x1[i]));
var H2{i in I} = 1/2*((x2[i]**2+1)*(1-gsl_cdf_ugaussian_P(x2[i]))-x2[i]*gsl_ran_ugaussian_pdf(x2[i]));
var B{i in I} = (sigmasq[i]*L/Q[i])*(H1[i]-H2[i]);

#Funcion objetivo
minimize Z_alpha{i in I}: S*(mu[i]/Q[i])+h[i]*(Q[i]/2+r[i]-mu[i]*L+B[i]);

#Restricciones
subject to R{i in I}: r[i] >= mu[i]*L+gsl_cdf_ugaussian_Pinv(alphaL[i])*sqrt(sigmasq[i]*L);
subject to Q_EOC{i in I}: Q[i] >= sqrt((2*mu[i]*S)/h[i]);

数据:

set I:= 1..32;
param alphaL:=
    1   0.99
    2   0.99
    3   0.99
    4   0.99
    5   0.95
    6   0.95
    7   0.95
    8   0.95
    9   0.99
    10  0.99
    11  0.99
    12  0.99
    13  0.95
    14  0.95
    15  0.95
    16  0.95
    17  0.99
    18  0.99
    19  0.99
    20  0.99
    21  0.95
    22  0.95
    23  0.95
    24  0.95
    25  0.99
    26  0.99
    27  0.99
    28  0.99
    29  0.95
    30  0.95
    31  0.95
    32  0.95;
param h:=
    1   1.25
    2   1.25
    3   1
    4   1
    5   1.25
    6   1.25
    7   1
    8   1
    9   0.6
    10  0.6
    11  0.1
    12  0.1
    13  0.6
    14  0.6
    15  0.1
    16  0.1
    17  1.25
    18  1.25
    19  1
    20  1
    21  1.25
    22  1.25
    23  1
    24  1
    25  0.6
    26  0.6
    27  0.1
    28  0.1
    29  0.6
    30  0.6
    31  0.1
    32  0.1;
param S:= 250;
param mu:=
    1   200
    2   150
    3   200
    4   150
    5   200
    6   150
    7   200
    8   150
    9   200
    10  150
    11  200
    12  150
    13  200
    14  150
    15  200
    16  150
    17  50
    18  10
    19  50
    20  10
    21  50
    22  10
    23  50
    24  10
    25  50
    26  10
    27  50
    28  10
    29  50
    30  10
    31  50
    32  10;
param sigmasq:=
    1   6400
    2   3600
    3   6400
    4   3600
    5   6400
    6   3600
    7   6400
    8   3600
    9   6400
    10  3600
    11  6400
    12  3600
    13  6400
    14  3600
    15  6400
    16  3600
    17  400
    18  16
    19  400
    20  16
    21  400
    22  16
    23  400
    24  16
    25  400
    26  16
    27  400
    28  16
    29  400
    30  16
    31  400
    32  16;
param L:=2;

解决方法

我可能会这样处理:

#Funcion objetivo
minimize Z_alpha: sum{i in I} w[i]*(S*(mu[i]/Q[i])+h[i]*(Q[i]/2+r[i]-mu[i]*L+B[i]));

现在您可以填充参数 w[i] 以选择单个目标或加权总和目标。