遗传算法matlab详解
时间: 2025-01-12 11:46:33 浏览: 56
### 遗传算法 MATLAB 实现与应用详解
#### 一、遗传算法简介
遗传算法是一种基于自然选择和遗传机制的优化搜索方法。该算法模拟生物进化过程中的适者生存原则,在计算机上实现对问题空间的有效探索。
#### 二、MATLAB 中的遗传算法工具箱
MATLAB 提供了一个强大的全局优化工具箱,其中包含了用于解决各种复杂最优化问题的功能函数。对于初学者来说,可以直接调用 `ga` 函数来快速构建简单的遗传算法模型[^1]。
```matlab
% 定义目标函数
fitnessfcn = @(x) 100 * (x(2) - x(1)^2)^2 + (1 - x(1))^2;
% 设置变量范围和其他参数
lb = [-5,-5];
ub = [5,5];
% 调用 ga 函数执行遗传算法寻优
[x,fval] = ga(fitnessfcn,2,[],[],[],[],lb,ub);
disp(['最优解为:', num2str(x)]);
disp(['最小值为:', num2str(fval)]);
```
此段代码展示了如何利用内置的 `ga()` 来寻找给定二维 Rosenbrock 函数的极小点位置以及对应的函数值大小。
#### 三、自定义遗传算子
为了更好地适应特定应用场景下的需求,可以自行编写适合自己的交叉、变异操作符。下面是一个简单的一维数组形式个体间单点交叉的例子:
```matlab
function offspring = singlePointCrossover(parents)
% 获取父代长度并随机选取切分点
n = length(parents{1});
cutpoint = randi([1,n-1]);
% 执行实际交换得到新后代
offspring = cell(size(parents));
for i=1:length(offspring)/2
offspring{i} = horzcat(parents{2*i-1}(1:cutpoint), parents{2*i}(cutpoint+1:end));
offspring{i+(length(offspring)/2)} = horzcat(parents{2*i}(1:cutpoint), parents{2*i-1}(cutpoint+1:end));
end
end
```
这段程序实现了两个亲本之间按照指定概率发生一次基因片段互换的过程,从而创造出可能更优秀的下一代成员。
#### 四、案例分析——旅行商问题(TSP)
TSP 是组合优化领域内非常经典的难题之一,这里将以它为例进一步展示完整的 GA 流程设计思路及其具体编码方式[^2]。
```matlab
cities = load('cityCoordinates.mat'); % 导入城市坐标数据集
distMatrix = pdist(cities.Coordinates,'euclidean');
D = squareform(distMatrix);
nCities = size(D,1);
popSize = 50;
numGenerations = 100;
mutationRate = 0.01;
population = arrayfun(@(x)randperm(nCities)', ones(popSize,1));
for gen=1:numGenerations
fitnesses = zeros(popSize,1);
for k=1:popSize
tour = population(k,:);
distSum = sum(D(tour(mod((1:nCities)-1,nCities)+1),tour));
fitnesses(k)=1/distSum;
end
[~,sortedIdx]=sort(-fitnesses);
eliteTour = population(sortedIdx(1), :);
newPopulation = [];
while numel(newPopulation)<popSize
parentIndices = randsample(numel(population),2,true,fitnesses./sum(fitnesses));
child = singlePointCrossover({population(parentIndices)});
if rand<mutationRate
idxToMutate=randi([1,numel(child)],ceil(mutationRate*numel(child)),1);
child(idxToMutate)=mod(child(idxToMutate)+floor(rand(length(idxToMutate),1)*nCities),nCities)+1;
end
newPopulation=[newPopulation ;child'];
end
population=newPopulation(1:min(end,popSize),:);
end
bestRoute = eliteTour';
plot(cities.X(bestRoute), cities.Y(bestRoute),'r-o')
title(sprintf('Best Route Found by Genetic Algorithm\nTotal Distance=%.4f', ...
D(sub2ind([nCities nCities], bestRoute(mod((1:nCities)-1,nCities)+1), bestRoute))))
xlabel('X Coordinate'), ylabel('Y Coordinate')
```
上述脚本完成了 TSP 的建模求解全过程,包括初始化种群、计算适应度评分、筛选精英保留策略、繁殖交配产生新一代直至达到预设迭代次数为止,并最终绘制出最佳路径图形表示结果。
阅读全文
相关推荐


















