第6讲MATLAB优化模型求解方法(下)全局优化.PDF
第6 讲 MATLAB 优化模型求解方法(下) :全局优化
作者:卓金武,MathWorks 中国
离散型问题是建模竞赛中的主流题型,如果判断所研究的问题是组合优化问
题, 那么就大概率需要全局优化算法了。历年赛题中, 比较经典的这类问题有
灾情巡视、公交车调度、彩票问题、露天矿卡车调度、交巡警服务平台、太阳影
子定位等等。可见全局优化问题的求解算法在数学建模中的重要性,这一讲重要
就介绍MATLAB 全局优化技术及相关实例。
1 MATLAB 全局优化概况
MATLAB 中有个全局优化工具箱(Global Optimization Toolbox),该工具箱
集成了几个主流的全局优化算法,包含全局搜索、多初始点、模式搜索、遗传算
法、多目标遗传算法、模拟退火求解器和粒子群求解器, 如图 1 所示。对于目
标函数或约束函数连续、不连续、随机、导数不存在以及包含仿真或黑箱函数的
优化问题,都可使用这些求解器来求解。
图1 MATLAB 全局优化工具箱包含的求解器
另外,还可通过设置选项和自定义创建、更新函数来改进求解器效率。可以
使用自定义数据类型,配合遗传算法和模拟退火求解器,来描绘采用标准数据类
型不容易表达的问题。利用混合函数选项,可在第一个求解器之后应用第二个求
解器来改进解算。
2 遗传算法
遗传算法可以说是典型的通过变化解的结构以得到更优解的算法,适应能力
比较强,现已经典的旅行商问题(TSP)为例, 来看看如何使用MATLAB 来实现
遗传算法。
旅行商问题的数据
load('usborder.mat','x','y','xx','yy');
plot(x,y,'Color','red'); hold on;
cities = 40;
locations = zeros(cities,2);
n = 1;
while (n <= cities)
xp = rand*1.5;
yp = rand;
if inpolygon(xp,yp,xx,yy)
locations(n,1) = xp;
locations(n,2) = yp;
n = n+1;
end
end
plot(locations(:,1),locations(:,2),'bo');
计算城市间的距离
distances = zeros(cities);
for count1=1:cities
for count2=1:count1
x1 = locations(count1,1);
y1 = locations(count1,2);
x2 = locations(count2,1);
y2 = locations(count2,2);
distances(count1,count2)=sqrt((x1-x2)^2+(y1-y2)^2);
distances(count2,count1)=distances(count1,count2);
end
end
定义目标函数
FitnessFcn = @(x) traveling_salesman_fitness(x,distances);
my_plot = @(options,state,flag) traveling_salesman_plot(options, ...
state,flag,locations);
设置优化属性并执行遗传算法求解
options = optimoptions(@ga, 'PopulationType', 'custom','InitialPopulationRange', ...
[1;cities]);
options = optimoptions(options,'CreationFcn',@create_permutations, ...
'CrossoverFcn',@crossover_permutation, ...
'MutationFcn',@mutate_permutation, ...
'PlotFcn