最近做优化方面的算例,发现cplex很难解决整型变量很多的整数规划问题,01变量少的时候还是可以轻松求解,随着01变量数增加求解时间开始指数级增长,在01变量达到100+时直接无法求解了(一直在求解中)...
为了解决这个问题,还是不得不求助智能算法,智能算法的优势在于,虽然给出的结果可能达到局部最优,但肯定会给一个结果。
确定这个方向后,在csdn及github上都搜索了PSO的相关代码,发现主流的有采用01变量及罚函数两种方法,但或者缺少详细原理说明或者采用的并非matlab语言(对于电气学子matlab真的很重要!!)。迫不得已参考了 博主南音小榭PSO算法求解整数规划问题举例的这篇博文,参考里面的代码,将其原本采用的C语言书写的求解代码改为了matlab语言,再次感谢!!!也在这里发出来给大家参考一下,如有不对欢迎指正~
求解的问题:
%% 整数规划0-1
% 目标函数
max z = 6x1 + 2x2 + 3x3 + 5x4
% 约束
4x1 + 2x2 + x3 + 3x4 <= 10
3x1 - 5x2 + x3 + 6x4 >= 4
2x1 + x2 + x3 - x4 <= 3
x1 + 2x2 + 4x3 + 5x4 <= 10
x[j] = 0 or 1
% 最优解
z=14,x=(1,0,1,1)
代码实现:
clc;clear;
%% 初始化
%% PSO参