赞
踩
遗传算法(GA)求解VRPTW问题(附MATLAB代码)这篇推文中的链接失效,请各位小伙伴点击左下方阅读原文,提取代码( 提取码:2996)。
今天小编为大家继续讲解一下遗传算法(GA)求解VRPTW问题(附MATLAB代码)这篇推文中的MATLAB代码,这份代码一共包含35个函数,昨天讲解了前18个函数,今天咱们继续讲解。
19 | Fitness函数计算适应度值
因为目标函数越小越好,而在选择操作时需要将适应度值大的个体选择出来,所以这里我们将适应度函数设为惩罚函数的倒数。
%% @作者:随心390% @微信公众号:优化算法交流地%%% 适配值函数 %输入:%个体的长度%输出:%个体的适应度值function FitnV=Fitness(len)FitnV=1./len;
20 | Select函数选择操作
选择操作我们就采用轮盘赌选择,按照适应度值的大小选择若干个适应度值大的个体进行后续的交叉、变异以及局部搜索操作。
%% @作者:随心390% @微信公众号:优化算法交流地%%% 选择操作%输入%Chrom 种群%FitnV 适应度值%GGAP:选择概率%输出%SelCh 被选择的个体function SelCh=Select(Chrom,FitnV,GGAP)NIND=size(Chrom,1);NSel=max(floor(NIND*GGAP+.5),2);ChrIx=Sus(FitnV,NSel);SelCh=Chrom(ChrIx,:);
21 | Sus函数确认被选择个体的索引号
%% @作者:随心390% @微信公众号:优化算法交流地%% 输入:%FitnV 个体的适应度值%Nsel 被选择个体的数目% 输出:%NewChrIx 被选择个体的索引号function NewChrIx = Sus(FitnV,Nsel)% Identify the population size (Nind)[Nind,ans] = size(FitnV);% Perform stochastic universal samplingcumfit = cumsum(FitnV);trials = cumfit(Nind) / Nsel * (rand + (0:Nsel-1)');Mf = cumfit(:, ones(1, Nsel));Mt = trials(:, ones(1, Nind))';[NewChrIx, ans] = find(Mt < Mf & [ zeros(1, Nsel); Mf(1:Nind-1, :) ] <= Mt);% Shuffle new population[ans, shuf] = sort(rand(Nsel, 1));NewChrIx = NewChrIx(shuf);
2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。