在 GAMS 中将参数值插入 $evalGlobal
Insert parameter value into $evalGlobal in GAMS
考虑以下 $SetGlobal:
$setglobal Path MyPath
我使用下面的代码来查找 'MyPath' 中的字符数:
set Length /%Path%/;
Parameter report(Length,*);
report(Length,'length') = Length.len ;
此后,我想将此值(在本例中为 6)插入 $evalGlobal,因此我有以下 $evalGlobal:
$evalGlobal ModelLength 6
应该是这样的:
$evalGlobal ModelLength %Report("MyPath","length")%
但这不起作用。如何将参数“report”的长度插入 $evalGlobal ModelLength?
问题是,report(Length,'length') = Length.len ;
是在执行时完成的,而您尝试在编译时访问它的结果已经在 $evalGlobal ModelLength ...
中(参见 https://www.gams.com/latest/docs/UG_GamsCall.html#UG_GamsCall_TwoPass)。
你想要的可以使用嵌入式代码实现:
$setglobal Path MyPath
scalar l;
$onEmbeddedCode Python:
s = r'%Path%'
gams.set('l', [len(s)])
$offEmbeddedCode l
$evalGlobal ModelLength l
$log %ModelLength%
这可能不是直截了当的,但它确实有效...
考虑以下 $SetGlobal:
$setglobal Path MyPath
我使用下面的代码来查找 'MyPath' 中的字符数:
set Length /%Path%/;
Parameter report(Length,*);
report(Length,'length') = Length.len ;
此后,我想将此值(在本例中为 6)插入 $evalGlobal,因此我有以下 $evalGlobal:
$evalGlobal ModelLength 6
应该是这样的:
$evalGlobal ModelLength %Report("MyPath","length")%
但这不起作用。如何将参数“report”的长度插入 $evalGlobal ModelLength?
问题是,report(Length,'length') = Length.len ;
是在执行时完成的,而您尝试在编译时访问它的结果已经在 $evalGlobal ModelLength ...
中(参见 https://www.gams.com/latest/docs/UG_GamsCall.html#UG_GamsCall_TwoPass)。
你想要的可以使用嵌入式代码实现:
$setglobal Path MyPath
scalar l;
$onEmbeddedCode Python:
s = r'%Path%'
gams.set('l', [len(s)])
$offEmbeddedCode l
$evalGlobal ModelLength l
$log %ModelLength%
这可能不是直截了当的,但它确实有效...