优化算法matlab
A. 用matlab遗传算法解决函数优化问题
在使用MATLAB中的遗传算法解决函数优化问题时,我们需要运用GA函数,这是遗传算法的具体实现。GA函数的调用格式是:X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub,NONLCON,options)。其中,FITNESSFCN代表待优化的函数,NVARS表示变量的数量,lb和ub分别是变量的下界和上界。对于特定问题,你需要提供这四个参数的值,而其他参数可以暂时用[]代替。
需要注意的是,MATLAB的GA函数默认是寻找函数的最小值。如果你的目标是找到函数的最大值,则需要将待优化的函数取负数,即编写如下函数:
function y=myfun(x)
y=-x.*sin(10*pi.*x)-2;
将这个函数保存为myfun.m文件,然后在MATLAB命令行中输入以下代码:x=ga(@myfun,1,[],[],[],[],[1],[2])。执行后,可能会看到这样的输出结果:Optimization terminated: average change in the fitness value less than options.TolFun. x = 1.8506
这是因为遗传算法实际上是在指定的取值范围内随机选取初始值,然后通过遗传操作来寻找最优解。因此,每次运行的结果可能会有所不同。例如,再次运行相同的代码,你可能会得到类似的结果:Optimization terminated: average change in the fitness value less than options.TolFun. x = 1.6507
具体原因可以参考遗传算法的相关资料,了解其背后的原理和机制。
B. MATLAB如何使用ga遗传算法工具箱进行优化
1、首先,打开MATLAB软件。
2、设置一个m文件,用于计算个体的适应度函数输出值一个适应度,输入是我们要优化的参数;例如:要优化的参数(x ,y ,z)则适应度函数的基本结构应是v=function(x, y, z)。
3、输入“gatool”指令打开工具箱,如图所示。
4、如图所示,打开的ga工具箱界面。
5、输入我们的适应度函数,和要优化的个数,和一些其它设置,要根据我们的任务决定;例如:适应度函数为:v=function(x, y, z)时要配置适应度函数项为@function。
6、要优化的参数个数为3。左后单击“start”开始,等待一段时间就会出现我们要优化的参数。
C. matlab全局优化与局部优化
在实际的工作和生活过程中,优化问题无处不在,比如资源如何分配效益最高,拟合问题,最小最大值问题等等。优化问题一般分为尺核局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。
matlab中的提供的传统优化工具箱(Optimization Tool),能实现局部最优,但要得全局最优,则要用全局最优化算法(Global Optimization Tool),主要包括:
GlobalSearch 全局搜索和 MultiStart 多起点方法产生若干起始点,然后它们用局部求解器去找到起始点吸引盆处的最优点。
ga 遗传算法用一组起始点(称为种群),通过迭代从种群中产生更好的点,只要初始种群覆盖几个盆,GA就能检查几个盆。
simulannealbnd 模拟退火完成一个随机搜索,通常,模拟退火算法接受一个点,只要这个点比前面那个好,它也偶而接受一个比较糟的点,目的是转向不同的盆。
patternsearch 模式搜索算法在接受一个点之前要看看其附近的一组点。假如附近的某些点属于不同的盆,模式搜索算法本质上时同时搜索若干个盆。
下面我就一些具体例子,来说明各种优化方法:
可以看出,初值x0不同,得到的结果侍孙截然不同,这说明这种求解器,能寻找局部最优,但不一定是全局最优,在起点为8时,取得全局最优。
我们换一种求解器:fminbound,这种求解器不需要给点初值。
因此全局最优的方法能够获取全局最优。
结果:最小二乘拟合结果误差较大
可以陵谈掘看出全局优化结果较好,误差较小。
这种算法的运行时间:Elapsed time is 6.139324 seconds.
使用并行计算的方式解决
结果:14 out of 100 local solver runs converged with a positive local solver exit flag.
Elapsed time is 4.358762 seconds.Sending a stop signal to all the labs ... stopped.可以看出,运行时间减少,提高了效率。
这种方法只能寻找局部最优。
现在用全局优化算法: