matlab线连接不上,这个图象不能连接成一条线,而是点,请问怎么解决他啊

该博客主要展示了MATLAB中使用遗传算法解决优化问题的过程。作者通过定义全局变量和输入参数,实现了一个简单的遗传算法流程,包括初始化种群、计算适应度值、选择、交叉和变异操作,并在每次迭代一定周期后绘制当前最优解对应的图像,最终输出最优解的X和Y值。

function main()

clear;

clc;

global A;

global B;

global x;

A=input('A=');

B=input('B=');

D=input('迭代次数=');

E=input('迭代显示周期=');

F=input('范围=');

popsize=input('种群大小=');      %种群大小

chromlength=10;   %二进制编码长度

pc = input('交叉概率=');         %交叉概率

pm = input('变异概率=');       %变异概率

pop = initpop(popsize,chromlength); %初始种群

for i = 1:D       %迭代次数

objvalue = cal_objvalue(pop);    %计算适应度值(函数值)

fitvalue = objvalue;

newpop = selection(pop,fitvalue);    %选择操作

newpop = crossover(newpop,pc);       %交叉操作

newpop = mutation(newpop,pm);        %变异操作

pop = newpop;                        %更新种群

[bestindividual,bestfit] = best(pop,fitvalue);     %寻找最优解

x2 = binary2decimal(bestindividual);

x1 = binary2decimal(newpop);

y1 = cal_objvalue(newpop);

if mod(i,E) == 0    %代数间隔

figure;

fplot(A*sin(5*x)+B*cos(5*x)+10,[0 F]);

hold on;

plot(x1,y1,'*');

title(['迭代次数为n=' num2str(i)]);

%plot(x1,y1,'*');

end

end

fprintf('The best X is --->>%5.2f\n',x2);

fprintf('The best Y is --->>%5.2f\n',bestfit);

function pop=initpop(popsize,chromlength)

%初始化种群大小

%输入变量:

%popsize:种群大小

%chromlength:染色体长度-->>转化的二进制长度

%输出变量:

%pop:种群

pop = round(rand(popsize,chromlength));

function pop2 = binary2decimal(pop)

%rand(3,4)生成3行4列的0-1之间的随机数

% rand(3,4)

%

% ans =

%

%     0.8147    0.9134    0.2785    0.9649

%     0.9058    0.6324    0.5469    0.1576

%     0.1270    0.0975    0.9575    0.9706

%round就是四舍五入

% round(rand(3,4))=

% 1 1 0 1

% 1 1 1 0

% 0 0 1 1

%所以返回的种群就是每行是一个个体,列数是染色体长度

[px,py]=size(pop);

%二进制转化成十进制函数

%输入变量:

%二进制种群

%输出变量

%十进制数值

for i = 1:py

pop1(:,i) = 2.^(py-i).*pop(:,i);

end

%sum(.,2)对行求和,得到列向量

temp = sum(pop1,2);

pop2 = temp*10/1023;

function [objvalue] = cal_objvalue(pop)

global A;

global B;

x = binary2decimal(pop);

%转化二进制数为x变量的变化域范围的数值

objvalue=A*sin(5*x)+B*cos(5*x)+10;

function [newpop] = selection(pop,fitvalue)

%如何选择新的个体

%输入变量:pop二进制种群,fitvalue:适应度值

%输出变量:newpop选择以后的二进制种群

%构造轮盘

[px,py] = size(pop);

totalfit = sum(fitvalue);

p_fitvalue = fitvalue/totalfit;

p_fitvalue = cumsum(p_fitvalue);%概率求和排序

ms = sort(rand(px,1));%从小到大排列

fitin = 1;

newin = 1;

while newin<=px

if(ms(newin))

newpop(newin,:)=pop(fitin,:);

newin = newin+1;

else

fitin=fitin+1;

end

end

function [newpop] = crossover(pop,pc)

%交叉变换

%输入变量:pop:二进制的父代种群数,pc:交叉的概率

%输出变量:newpop:交叉后的种群数

[px,py] = size(pop);

newpop = ones(size(pop));

for i = 1:2:px-1

if(rand

cpoint = round(rand*py);

newpop(i,:) = [pop(i,1:cpoint),pop(i+1,cpoint+1:py)];

newpop(i+1,:) = [pop(i+1,1:cpoint),pop(i,cpoint+1:py)];

else

newpop(i,:) = pop(i,:);

newpop(i+1,:) = pop(i+1,:);

end

end

function [newpop] = mutation(pop,pm)

%关于编译

%函数说明

%输入变量:pop:二进制种群,pm:变异概率

%输出变量:newpop变异以后的种群

[px,py] = size(pop);

newpop = ones(size(pop));

for i = 1:px

if(rand

mpoint = round(rand*py);

if mpoint <= 0

mpoint = 1;

end

newpop(i,:) = pop(i,:);

if newpop(i,mpoint) == 0

newpop(i,mpoint) = 1;

else

newpop(i,mpoint) == 1

newpop(i,mpoint) = 0;

end

else

newpop(i,:) = pop(i,:);

end

end

function [bestindividual,bestfit] = best(pop,fitvalue)

%求最优适应度函数

%输入变量:pop:种群,fitvalue:种群适应度

%输出变量:bestindividual:最佳个体,bestfit:最佳适应度值

opengl software;

[px,py] = size(pop);

bestindividual = pop(1,:);

bestfit = fitvalue(1);

for i = 2:px

if fitvalue(i)>bestfit

bestindividual = pop(i,:);

bestfit = fitvalue(i);

end

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值