我是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$$
答案 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。