我正在尝试在C中重建一些使用其fsolve函数的Matlab代码。从文档来看,它使用的是“信任区域反射”算法(我已经使用Levenberg-marquardt算法构建了它,并且它的收敛方式完全不同)。任何人都可以推荐一个库在C / C ++中进行这种类型的优化吗?
答案 0 :(得分:4)
不确定“信任区域”定义中添加了什么“反射”。但是,Knitro是一个功能强大的信任区域内点优化器,具有C / C ++接口。不幸的是, Knitro 仅限学生免费提供限量版;完整版需要商业许可证。
还有Ipopt,它是不信任区域,但它是一个功能强大的基于C / C ++的大规模非线性约束优化引擎,具有开源许可证。
答案 1 :(得分:3)
您是否尝试检查函数是否为凸函数,如果LM和其他凸优化算法收敛不同,则基函数很可能不是凸函数。还要检查成本函数是否至少为2阶。如果是这种情况,最小化成本函数的平方可能比单独最小化成本函数更好。
答案 2 :(得分:2)
有两种类型的通用算法,其中有一个全局收敛保证(在标准假设下,不要问:))。这些方法是行搜索和信任区域方法。如果您愿意,可以在Nocedal-Wright: Numerical Optimization一书中阅读有关此主题的更多信息。
我最近没有尝试过Knitro。
Ipopt是我尝试过的最强大的求解器,我强烈推荐它。它实现了行搜索方法,并用C ++编写。