问题描述
因此,我正在尝试使用 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]
以选择单个目标或加权总和目标。