matlab遗传算法优化问题,Matlab遗传算法优化问题求解的示例代码

代码如下:

function m_main()

clear

clc

Max_gen = 100;% 运行代数

pop_size = 100;%种群大小

chromsome = 10;%染色体的长度

pc = 0.9;%交叉概率

pm = 0.25;%变异概率

gen = 0;%统计代数

%初始化

init = 40*rand(pop_size, chromsome)-20;

pop = init;

fit = obj_fitness(pop);

[max_fit, index_max] = max(fit);

maxfit = max_fit;

[min_fit, index_min] = min(fit);

best_indiv = pop(index_max, :);

%迭代操作

while gen

gen = gen+1;

bt(gen) = max_fit;

if  maxfit

maxfit = max_fit;

pop(index_min, :) = pop(index_max, :);

best_indiv = pop(index_max, :);

end

best_indiv_tmp(gen) = pop(index_max);

newpop = ga(pop, pc, pm, chromsome, fit);

fit = obj_fitness(newpop);

[max_fit, index_max] = max(fit);

[min_fit, index_min] = min(fit);

pop = newpop;

trace(1, gen) = max_fit;

trace(2, gen) = sum(fit)./length(fit);

end

%运行结果

[f_max gen_ct] = max(bt)%求的最大值以及代数

maxfit

best_indiv

%画图

% bt

hold on

plot(trace(1, :), '.g:');

plot( trace(2, :), '.r-');

title('实验结果图')

xlabel('迭代次数/代'), ylabel('最佳适应度(最大值)');%坐标标注

plot(gen_ct-1, 0:0.1:f_max+1, 'c-');%画出最大值

text(gen_ct, f_max+1,   '最大值')

hold off

function  [fitness] = obj_fitness(pop)

%适应度计算函数

[r c] = size(pop);

x = pop;

fitness = zeros(r, 1);

for i = 1:r

for j = 1:c

fitness(i, 1) = fitness(i, 1)+sin(sqrt(abs(40*x(i))))+1-abs(x(i))/20.0;

end

end

end

function newpop = ga(pop, pc, pm, chromsome, fit)

pop_size = size(pop, 1);

%轮盘赌选择

ps = fit/sum(fit);

pscum = cumsum(ps);%size(pscum)

r = rand(1, pop_size);

qw = pscum*ones(1, pop_size);

selected = sum(pscum*ones(1, pop_size)

newpop = pop(selected, :);

%交叉

if pop_size/2 ~= 0

pop_size = pop_size-1;

end

for i = 1:2:pop_size-1

while pc>rand

c_pt = round(8*rand+1);

pop_tp1 = newpop(i, :);pop_tp2 = newpop(i+1, :);

newpop(i+1, 1:c_pt) = pop_tp1(1, 1:c_pt);

newpop(i, c_pt+1:chromsome) = pop_tp2(1, c_pt+1:chromsome);

end

end

% 变异

for i = 1:pop_size

if pm>rand

m_pt = 1+round(9*rand);

newpop(i, m_pt) = 40*rand-20;

end

end

end

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法是一种优化算法,可以用于求解TSP问题。在MATLAB中,可以使用遗传算法工具箱来实现遗传算法求解TSP问题。 下面是一个基本的MATLAB代码实现遗传算法求解TSP问题示例: ```matlab % TSP问题输入数据 N = 10; % 城市数量 x = rand(N,1); y = rand(N,1); % 计算城市之间的距离矩阵 dist = zeros(N,N); for i = 1:N for j = 1:N dist(i,j) = sqrt((x(i)-x(j))^2 + (y(i)-y(j))^2); end end % 遗传算法参数设置 options = gaoptimset('PopulationSize', 100, 'EliteCount', 10, 'Generations', 500, 'StallGenLimit', 100); % 定义目标函数 fitnessfcn = @(x) tspfun(x,dist); % 运行遗传算法 [xopt, fval] = ga(fitnessfcn, N, [], [], [], [], 1:N, 1:N, [], options); disp(xopt); disp(fval); % 目标函数 function [f] = tspfun(x,dist) f = 0; for i = 1:length(x)-1 f = f + dist(x(i),x(i+1)); end f = f + dist(x(end),x(1)); end ``` 在上面的代码中,首先定义了TSP问题的输入数据,包括城市数量和城市坐标。然后计算了城市之间的距离矩阵。 接着使用遗传算法工具箱中的`gaoptimset`函数设置遗传算法的参数。这里设置了种群大小为100,精英数量为10,迭代次数为500,最大停滞代数为100。 然后定义了目标函数`tspfun`,它计算给定路径的总长度。最后使用`ga`函数运行遗传算法,得到最优解和最优值。 需要注意的是,这个示例只是一个基本的框架,需要根据实际问题进行适当的修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值