如何通过Pyomo指定GAMS求解器特定的选项?

时间:2019-09-17 00:31:26

标签: pyomo gams-math

我正在尝试使用ANTIGONE求解器(GAMS许可)解决MINLP问题,并且难以更改求解器的高级设置。

首先,我按如下方式从Pyomo调用求解器。

solver = pe.SolverFactory('gams')
solver.options['mtype']= "minlp"
solution = solver.solve(model, solver = 'antigone')

这部分可以正常工作,但是ANTIGONE无法弥合最佳性差距,因此我想更改此处loaddata所提供的一些更高级的选项。

所以我首先尝试的是将求解器调用更改为下一行。

solution = solver.solve(model, solver='antigone', add_options=['option number_of_partitions 2;'])

但是,看来add_options仅适用于内置GAMS选项,而不适用于特定于求解器的选项。

请注意,在GAMS中使用这些高级求解器选项时,标准过程是创建一个选项文件(即antigone.opt),我们在其中指定所需的选项。

number_of_partitions 2

antigone.opt保存在同一目录下,并且.gms文件用GAMS_MODEL.optfile;行调用此文件。

回到我的问题,从Pyomo修改此选项时,我尝试了

solution = solver.solve(model, solver='antigone', add_options=['GAMS_MODEL.optfile;'])

但是问题是Pyomo创建了一个临时文件来解决该问题,因此我无法在开始解决之前添加文件antigone.opt

因此,我可以看到两个选择:(i)我可以找到一种在求解器开始求解之前通过Pyomo在临时文件中创建antigone.opt文件的方法(不太理想,但它应该可以工作) ,或(ii)我应该直接从Pyomo(首选)更改该选项。

任何帮助将不胜感激,并感谢您的宝贵时间!

1 个答案:

答案 0 :(得分:1)

也许这个答案对您来说有点晚了,但是我认为这可能会对其他人有所帮助。

我遇到了同样的问题。经过长时间的讨论,并通过将许多Stack Overflow帖子放在一起,我终于使它只能使用Pyomo来工作。

行,

solution = solver.solve(model, solver='antigone', add_options = ['GAMS_MODEL.optfile;'])

应替换为

solution = solver.solve(model, solver='antigone', add_options = ['GAMS_MODEL.optfile = 1;','$onecho > antigone.opt', 'number_of_partitions 2', '$offecho'])

因此,第一个选项指定使用antigone.opt文件,其余各行告诉GAMS创建并写入antigone.opt文件。