以集合+方程的形式初始化GAMS中的决策变量会产生错误

时间:2016-05-23 15:51:54

标签: optimization gams-math

我正在尝试使用GAMS建模问题。我有两个问题:

1)如何初始化decesion值P?它应该采用以下形式

P(I)/

i1 25

i2 33 /

2)我正在尝试计算SINR,如

SINR(I)= e = hh(I)* P(I)/ sqr(sigma)+ sum(I,H(J,I)* P(I));

然而,我总是犯了一个错误,要么该集合已经是控制器或域名。我该如何解决这个问题?

部分代码

  

     

我的用户数量/ i1,i2 /

     

J用户干扰/ j1,j2 /

     

迭代迭代次数/ 1 /;

     

参数

CP(I) circuit power per user  /

i1  10

i2  10 /
hh(I)  channel quality  /    i1  48    i2  106 /
Sigma    Noise              /0.0057/
tol      tolerence value    /0.01/
minRate  minimum rate /0.1/

maxiter max number of iterations /3/   ;
Table H(J,I) interference value

>        i1          i2
>
>  j1    0         18.8030
> 
>  j2    8.9555         0 

>

  

变量

P(I)

F

lambda

SINR(I)

b(I)

a(I)
     

方程式Objectivefun,SINRFUN,lambdaFUN,RateFUN,afun,bfun,   nonlconfun;

     

SINRFUN(I).. SINR(I)= e = hh(I)* P(I)/   SQR(SIGMA)+ SUM(I,H(J,I)* P(I));

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

声明

SINRFUN(I).. SINR(I) =e= hh(I)*P(I) / sqr(sigma)+sum(I,H(J,I)*P(I));

有一个问题,我们有i的隐式循环,然后在同一个i的总和内。这在数学上没有很好地定义。所以你可以这样做:

alias(i,ii);
SINRFUN(I).. SINR(I) =e= hh(I)*P(I) / sqr(sigma)+sum(ii,H(J,ii)*P(ii));

您可以使用赋值语句初始化P(i)

parameter initp(i) /i1 25, i2 33/;
p.L(i) = initp(i);

.L表示我们分配了变量的级别值(其他可能性包括.lo.up.m:有关详细信息,请参阅文档 - - 阅读一些文档可能在任何情况下都是有益的)。