EXCEL VBA中规划求解器Solver出现 运行错误‘1004’应用程序定义或对象定义错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL VBA中规划求解器Solver出现 运行错误‘1004’应用程序定义或对象定义错误相关的知识,希望对你有一定的参考价值。
大家好,我有一个EXCEL VBA文件,里面用到规划求解器Solver, 但运行后出现错误如下截图所示。但点击调试后,跳到代码区显示SolverSolve为黄色,如图所示,请问这个是什么问题,该怎样解决呢,谢谢。
没有勾选solver Add-in:
参考技术A sub里的代码第一行加上SolverReset如何通过 Pyomo 指定 GAMS 求解器特定的选项?
【中文标题】如何通过 Pyomo 指定 GAMS 求解器特定的选项?【英文标题】:How to specify GAMS solver-specific options through Pyomo? 【发布时间】:2020-01-17 19:47:47 【问题描述】:我正在尝试使用 ANTIGONE 求解器(在 GAMS 中获得许可)解决 MINLP 问题,但在更改求解器的高级设置时遇到了困难。
首先,我从 Pyomo 调用求解器,如下所示。
solver = pe.SolverFactory('gams')
solver.options['mtype']= "minlp"
solution = solver.solve(model, solver = 'antigone')
这部分可以正常工作,但是 ANTIGONE 无法缩小最优性差距,所以我想更改这里提供的一些更高级的选项https://www.gams.com/latest/docs/S_ANTIGONE.html。
所以我首先尝试的是将求解器调用更改为以下行。
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 更改选项(首选)。
任何帮助将不胜感激,并提前感谢您的宝贵时间!
【问题讨论】:
如果您在这里没有得到答案,您可能想尝试在 Operations Research 上提问。 【参考方案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 文件。
【讨论】:
【参考方案2】:我在使用 pyomo->gams->knitro 时遇到了类似的问题。下面的代码对我有用。我的代码在 /Users/myDir/ 中,我在那里创建了目录“tmp”。然后我指示 pyomo 使用它,并将文件 knitro.opt 放在那里。
opt = SolverFactory('gams')
opts =
opts["solver"] = "knitro"
with open("tmp/knitro.opt", "w") as f:
f.write("algorithm 2\n")
addOp = ['GAMS_MODEL.optfile=1;']
opt.solve(instance, io_options=opts, load_solutions=True, tee=True,
add_options=addOp, tmpdir='/Users/myDir/tmp')
【讨论】:
以上是关于EXCEL VBA中规划求解器Solver出现 运行错误‘1004’应用程序定义或对象定义错误的主要内容,如果未能解决你的问题,请参考以下文章
Excel Solver规划求解最优值--《深入浅出数据分析》最优值案例