如何在GAMS中编写while循环

时间:2015-11-01 21:01:05

标签: gams-math

请有人帮我解决这个问题。我想逐一添加到i并在每一步中将x(i)的数量等于1,所以我写了如下但是它不起作用

loop(i,
    x('0')=1;
    t('0')=1;
while(t>m,
      ord(i)=ord(i)+1;
      display i;
      x(i)=1;
      display x;
      t(i)=t(i-1) +1;
   );
 );

顺便说一句,m是一个在此之前计算的变量,在一个等式中。

2 个答案:

答案 0 :(得分:0)

请查看此page,以便更好地了解如何在GAMS中制作 while循环。另请查看此代码,因为它可能会对您有所帮助:

root=minroot;
*find a sign switch
while(signswitch=0 and root le maxroot,
   root=root+inc;
   function_value2= a-b*root+c*sqr(root);
   if((sign(function_value1) ne sign(function_value2)
      and abs(function_value1) gt 0
      and abs(function_value2) gt tolerance),
         maxroot=root;
         signswitch=1
   else
      if(abs(function_value2) gt tolerance,
         function_value1=function_value2;
         minroot=root;);
      );
*  display 'inside',minroot,maxroot,function_value1,function_value2;
);

答案 1 :(得分:0)

如果m是之前解决的模型中的变量,则应使用.l属性检查其级别:

...
while(t>m.l,
...