我正在使用Opti Toolbox,一个免费的Matlab优化工具箱。我正在解决一个混合整数非线性程序,一个MINLP。在Opti Toolbox中,使用的MINLP解算器是SCIP。
我将自己的目标定义为单独的函数(Opti中的 fun 参数),此函数需要调用其他带有双参数的matlab函数。
问题在于,每当Opti调用我的函数来评估目标时,它首先使用' scipvar '对象的向量调用它,然后使用'的向量再次调用它双重'对象。我的obj函数不能与scipvar对象一起使用,它会返回错误。
我尝试(仅用于测试)将函数的输出设置为类型为“ scipvar ”时固定的内容,以及类型为“ double <时的实际实际值/ strong>',这不起作用,更改固定值实际上会改变最终的最佳值。
我基本上需要将scipvar对象转换为double,这可能吗?还是有其他选择吗?
谢谢。
答案 0 :(得分:1)
好的,所以在Opti工具箱开发人员J. Currie的启发之后,我理解了上述问题的原因。
使用scipvar变量向量对目标的第一次调用实际上是一个扫描目标函数的解析器,以查看它是否可以正确映射到SCIP可以处理的内容。我重新实现了目标函数,只使用scip允许的方法 - 通过在matlab中输入方法(scipvar)获得:
abs dot log减去mrdivide norm power rdivide sqrt times
显示exp log10 mpower mtimes加prod scipvar sum uminus
一旦目标可以通过scip解析我的问题就可以了。