对表数据使用“循环”或“ for”来提取每一行数据,并将所提取的数据用于gams中的两个参数

时间:2019-05-06 13:34:12

标签: gams-math

我是GAMS的新手,我有一个表数据,该数据具有3行和6列。我想拉每行并将其数据用于两个参数(拉每行具有6个元素,并使用前三个元素作为一个参数,另外三个元素用于第二个参数)使用循环或语句。我试图同时使用它们,但对于循环,我收到的参数值为零,这是不正确的;对于for语句,我收到了一些错误。     这是我的第一行代码,同时使用了“ loop”和“ for”(我每次都分别使用它们,但是为了显示我的代码,我只是一起写了它们)。 请帮我。 谢谢

DELIMITER $$ 

CREATE DEFINER=root@localhost FUNCTION fnGetDropDownValue(
    itemValue varchar(300), 
    DropDownId int, 
    CId int
) RETURNS int(11)
BEGIN
    DECLARE _listId int;
    SELECT ListID into _listId FROM DropDownListValues WHERE LOWER(ListValue) = LOWER(itemValue) 
        AND DropDownListID = DropDownId AND (ClientId = 0 OR ClientId = CId);
    RETURN _listId;
END$$

1 个答案:

答案 0 :(得分:2)

GAMS的核心功能之一是它如何处理集合结构和索引。我建议您查看出色的文档,例如关于集合定义https://www.gams.com/latest/docs/UG_SetDefinition.html的文档,以真正体会到如何从中获得最大的收益。

根据您的情况,您可以按照以下步骤进行操作。 p是一组。创建p_b_的某些子集,语法为subset_name(set_name)

sets    p_(p) / p1, p2, p3 /,
        b_(p) / b1, b2, b3 /;

在适当的尺寸(即完整尺寸)上创建参数,并在您感兴趣的子集中定义它们:

parameters       bid_red(o,p),pmax_red(o,p);

bid_red(o,b_)  = sup(o,b_);
pmax_red(o,p_) = sup(o,p_);

然后display bid_red, pmax_red;给出:

----     21 PARAMETER bid_red  

               b1          b2          b3

red        12.000      15.000      20.000
green      16.000      17.000
blue       13.000      18.000


----     21 PARAMETER pmax_red  

               p1          p2          p3

red       200.000      50.000      50.000
green     150.000      50.000
blue      100.000      50.000

如果您要选择单个行,则可以使用例如您的代码中的pmax_red('red',p_)。本质上,这只是子集的一种特殊情况,其中子集的大小为1。