一、求解库官方网站
gposlver求解库:https://cmp.felk.cvut.cz/gposolver/
SDPA求解库:https://sourceforge.net/projects/sdpa/
二、求解库简述
SDPA是开源的C++用于求解正定/半正定规划相关的求解库,类似的还有CSDP、SBmethod等,这些求解库特点是里面只能实现具体对应的算法,而用户想要的求解库是封装了这些算法求解库并提供输入输出接口库。比如在matlab环境中比较典型的CVX工具箱,里面就封装了SDPT3和SeDuMi求解器,并提供了很好用的接口。
而在C++环境中,似乎找不到有类似于CVX的正定规划库,相应的,我找到了gposolver,其封装了SDPA求解库。使用过程需与matlab结合使用,即在matlab先进行规划模型的建模,在matlab可使用SeDuMi进行求解,再使用相应的api接口生成对应的C++类,在C++环境中可使用SDPA进行求解。
三、实例
SDPA求解库可求解的实例如下
如:
即可以求解目标函数的最大/最小化,同时可进行约束,如正定/半正定,但在约束中需要对约束矩阵作线性矩阵不等式求解(LMI),对于大型的矩阵求解,这是手动无法计算的,并且似乎无法对某个具体变量作约束如y1>0。
这时gposolver的作用来了,gposolver是用于全局多项式优化工具库,它将多项式问题及约束按照线性矩阵不等式(LMI)进行转换,得到适用于SDPA等求解库的形式,并封装SDPA库进行求解。