开源启发式非线性求解器库

开源启发式非线性求解器库

1. 背景

很多工程问题, 最终都会变成对非线性模型的建模, 进而求解。

对非线性模型的求解, 在凸优化里已经有非常成熟的理论支撑且也有对应算法实现。而在非凸理论里, 目前并没有一个对绝大部分非线性问题有效的求解理论支撑。

基于种群思想的启发式求解非线性寻优算法, 因为其喜人的求解结果, 为求解非线性问题开辟了一个路径。

网上有很多基于种群的随机非线性寻优算法, 绝大部分是基于Matlab实现, 有少部分是Python, 而使用C++实现的比较少。由于C++本身的求解效率比较高, 加之自己研究多年的启发式随机优化求解算法,因此特将MathSword里的启发式求解算法以c++代码格式开源。这里也欢迎启发式非线性求解器研究者,将本仓库实现的求解器作为对比求解器研究。

开源代码参见: https://gitee.com/shikang999/heuristic-solver

2. 说明

(1) 开源仓库里的代码会不定期更新,且里面的求解器会按自己的标准,筛选结果较好的求解器放在里边。目前里面有自研LG求解器、SWO求解器[1]

(2) 开源仓库里的代码除了直接提供求解器外,后续会提供统计测试函数版本,方便做非线性启发式求解器研究的人员进行算法研究跑测试对比。

(3) 代码使用c++编写, 且编译器需要支持 c++17语法.

(4) 自己单独实现求解器时, 需要重载 BaseSolver 类, 对 solveByIter、init 函数进行重载. solveByIter函数主要实现每个迭代步种群变量的 vecVariable_ 更新, init主要进行求解器开始前的初始化。

(5) 优化目标函数, 需要重载 BaseFun 类, 对 calcFun 函数进行重载. calcFun函数主要实现最小化目标函数.  具体可以参考 HardFun5_1 类的实现.

(6) 函数在求解时, 单独新建线程进行求解。因此求解器在调用 solve 求解后, 需要调用 waitExit 函数进行等待。如果要同时测试对个求解器, 可以单独开启对个线程分别求解。

(7) 仓库里有求解如下问题的例子: ①求解非线性方程组, 参照 example/exampleSolveEqu.cpp;② 非线性表达式拟合, 参照 example/exampleSolveFit.cpp.

 

3 参考

[1] Abdel-Basset M, Mohamed R, Jameel M, et al. Spider wasp optimizer: A novel meta-heuristic optimization algorithm[J]. Artificial Intelligence Review, 2023: 1-64

 

2 Replies to “开源启发式非线性求解器库”

    1. 1. LG求解器里面主要是各种策略的组合,并没有整理成文章。
      2. SWO的出处,已经更新到文章。

发表回复

您的电子邮箱地址不会被公开。

蜀ICP备17029856号-1