function [bestpop,trace]=ga(D,termOps,num,pc,cxOps,pm,alpha)
% D:距离矩阵
% termOps:种群代数
% num:每代染色体的个数
% pc 交叉概率
% cxOps:交叉点,随机产生
% pm:变异概率
% alpha:评价函数 eval(Vi)=alpha*(1-alpha).^(i-1);
% bestpop:返回的最优种群
% trace:进化轨迹
%---------------------------------
citynum=size(D,2); % 城市数目
n=nargin;
if n<2
termOps=500;
num=50;
pc=0.25;
cxOps=3;
pm=0.30;
alpha=0.10;
end
if n<3
num=50;
pc=0.25;
cxOps=3;
pm=0.30;
alpha=0.1;
end
if n<4
pc=0.25;
cxOps=3;
pm=0.30;
alpha=0.10;
end
if n<5
cxOps=3;
pm=0.30;
alhpa=0.1;
end
if n<6
pm=0.30;
alpha=0.1;
end
if n<7
alpha=0.1;
end
if isempty(cxOps)
cxOps=3;
end
[T]=initializega(num,citynum);
for i=1:termOps
[L]=f(D,T);
[x,y]=find(L==max(L));
trace(i)=-L(y(1));
bestpop=T(y(1),:);
[T]=select(T,L,alpha);
[G]=grefenstette(T);
[G1]=crossover(G,pc,cxOps);
[G]=mutation(G1,pm); %均匀变异
[T]=congrefenstette(G);