1

我正在使用 Opti Toolbox,这是一个用于 Matlab 的免费优化工具箱。我正在求解一个混合整数非线性程序,一个 MINLP。在 Opti Toolbox 中,使用的 MINLP 求解器是 SCIP。

我将自己的目标定义为一个单独的函数( Opti 中的fun参数),并且该函数需要调用其他采用双参数的 matlab 函数。

问题是,每当 Opti 调用我的函数来评估目标时,它首先使用“ scipvar ”对象的向量调用它,然后使用“ double ”对象的向量再次调用它。我的 obj 函数不适用于 scipvar 对象,它会返回错误。

我尝试(仅用于测试)在类型为“ scipvar ”时将函数的输出设置为固定的东西,而当类型为“ double ”时设置为实际的东西,这不起作用,实际上更改了固定值改变最终的最优值。

我基本上需要将 scipvar 对象转换为 double,这可能吗?或者还有其他选择吗?

谢谢你。

4

1 回答 1

1

好的,所以经过Opti工具箱开发者J. Currie的启发,我明白了上面问题的原因。

使用 scipvar 变量向量对目标的第一次调用实际上是一个解析器扫描目标函数,以查看它是否可以正确映射到 SCIP 可以处理的东西。我重新实现了目标函数以仅使用 scip 允许的方法 - 通过在 matlab 中键入 methods(scipvar) 获得:

abs dot log minus mrdivide norm power rdivide sqrt times
display exp log10 mpower mtimes plus prod scipvar sum uminus

一旦可以通过 scip 解析目标,我的问题就可以正常工作。

于 2014-12-03T15:38:15.457 回答