使用 gams-c++ api 访问多维变量的条目
Accessing entries of multidimensional variables using the gams-c++ api
我正在用我的 C++ 程序生成以下 gams 程序
variable x(*) /1.lo = -1,1.up = 1,2.lo = -1,2.up = 1/;
variable obj; equation eqobj; eqobj.. obj =e= x['1']+x['2'];
parameter ms, ss, lbd, ubd, cpu;
model mod /all/;
option decimals = 8;
solve mod minimizing obj using minlp;
lbd=mod.objest; ubd=obj.l;
ms=mod.modelstat; ss=mod.solvestat; cpu=mod.resusd;
并使用 gams-c++ api 让 gams 解决它。之后,我想用这种方法在c++中获取结果:
auto value = m_job.outDB().getVariable(var).findRecord().level();
是job
是我的GAMSJob
,用来解决上面的程序,var
是一个包含变量名的字符串,我想获取它的值。
这种方法非常适合一维变量,例如当我的变量如下所示时
variable x;
x.up = 1;
x.lo = 0;
我在上面的代码中将 "x"
作为 var 传递。
我现在尝试使用 "x['1']"
之类的字符串访问多维变量的条目,但总是返回 0。获取我想要的值的正确方法是什么,即多维变量的条目?
我猜你想遍历 x
的所有记录? tutorial 中实际上有一个二维变量的示例:
for (GAMSVariableRecord rec : m_job.outDB().getVariable("x"))
cout << "x(" << rec.key(0) << "," << rec.key(1) << "):" << " level=" << rec.level() << " marginal=" << rec.marginal() << endl;
我正在用我的 C++ 程序生成以下 gams 程序
variable x(*) /1.lo = -1,1.up = 1,2.lo = -1,2.up = 1/;
variable obj; equation eqobj; eqobj.. obj =e= x['1']+x['2'];
parameter ms, ss, lbd, ubd, cpu;
model mod /all/;
option decimals = 8;
solve mod minimizing obj using minlp;
lbd=mod.objest; ubd=obj.l;
ms=mod.modelstat; ss=mod.solvestat; cpu=mod.resusd;
并使用 gams-c++ api 让 gams 解决它。之后,我想用这种方法在c++中获取结果:
auto value = m_job.outDB().getVariable(var).findRecord().level();
是job
是我的GAMSJob
,用来解决上面的程序,var
是一个包含变量名的字符串,我想获取它的值。
这种方法非常适合一维变量,例如当我的变量如下所示时
variable x;
x.up = 1;
x.lo = 0;
我在上面的代码中将 "x"
作为 var 传递。
我现在尝试使用 "x['1']"
之类的字符串访问多维变量的条目,但总是返回 0。获取我想要的值的正确方法是什么,即多维变量的条目?
我猜你想遍历 x
的所有记录? tutorial 中实际上有一个二维变量的示例:
for (GAMSVariableRecord rec : m_job.outDB().getVariable("x"))
cout << "x(" << rec.key(0) << "," << rec.key(1) << "):" << " level=" << rec.level() << " marginal=" << rec.marginal() << endl;