【问题标题】:Insert parameter value into $evalGlobal in GAMS在 GAMS 中将参数值插入 $evalGlobal
【发布时间】:2021-03-03 14:25:34
【问题描述】:

考虑以下 $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?

【问题讨论】:

    标签: gams-math


    【解决方案1】:

    问题是,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%
    

    这可能不是直截了当,但它确实有效......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多