利用遗传算法计算函数最小值

本文通过遗传算法来寻找指定函数的最小值,采用二进制编码方式,经过30次和20次迭代,得出最优解为x=1.1491, y=-0.8699。" 42776377,978564,使用SDL_ttf在C++中显示图像和文字,"['图形界面', 'C++编程', 'SDL库', '图像处理', '文本渲染']
摘要由CSDN通过智能技术生成

利用遗传算法计算下列函数最小值

f(x)=\frac{sin10*pi*x}{x}

选择二进制编码,代码展示:
 

clc
clear all
close all
figure(1);
hold on;
lb=1;ub=2; %函数自变量范围
ezplot('sin(10*pi*X)/X',[lb,ub]); %画出函数曲线
xlabel('自变量/X')
ylabel('函数值/Y')

%%设置种群
NIND=50;%种群大小
MAXGEN=30;%最大遗传代数
PRECI=20;%个体长度
GGAP=0.95;%代沟
px=0.7;%交叉概率
pm=0.01;%变异概率
trace=zeros(2,MAXGEN);%寻优结果的初始值
FieldD=[PRECI;lb;ub;1;0;1;1];%创建任意离散随即种群
Chrom=crtbp(NIND,PRECI);%创建任意离散随机种群
%%优化
gen=0;
X=bs2rv(Chrom,FieldD);%初始种群二进制到十进制转换
ObjV=sin(10*pi*X)./X;%计算目标函数值
while gen<MAXGEN
    FitnV=ranking(ObjV);%分配适应度值
    SelCh=select('sus',Chrom,FitnV,GGAP);%选择
    SelCh=recombin('xovsp',SelCh,px);%重组
    SelCh=mut(SelCh,pm);%变异
    X=bs2rv(SelCh,FieldD);%子代个体的十进制转换
    ObjVSel=sin(10*pi*X)./X;%计算子代的目标函数值
    [Chrom,ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入子代到父代,得到新种群
    X=bs2rv(Chrom,FieldD);
    gen=gen+1;%代计数器增加
    %获取每代的最优解及其序号,Y为最优解,I为个体的序号
    [Y,I]=min(ObjV);
    trace(1,gen)=X(I);%记下每代的最优值
    trace(2,gen)=Y;%记下每代的最优值
end
plot(trace(1,:),trace(2,:),'bo');%画出每代的最优点
grid on;
plot(X,ObjV,'b*');%画出最后一代的种群hold off
%%画进化图
figure(2);
plot(1:MAXGEN,trace(2,:));
grid on
xlabel('遗传代数');
ylabel('解的变化');
title('进化过程');
bestY=trace(2,end);
bestX=trace(1,end);
fprintf(['最优解:\nX=',num2str(bestX),'\nY=',num2str(bestY),'\n'])

结果展示:
迭代次数=30时

 

 迭代次数=20时;

 

 最优解:x=1.1491;y=-0.8699;

 

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给你一些思路和步骤来解决这个问题。 首先,你需要确定你要优化的函数和它的最小值。假设这个函数是一个连续的函数,而且你已经知道了它的最小值。 接下来,你需要将函数的自变量编码成一个二进制串。你可以将自变量的取值范围离散化,并将每个离散点编码成二进制位。例如,如果你要将自变量的值编码成 10 个离散点,那么每个离散点可以用 4 个二进制位来表示。 然后,你需要确定遗传算法的参数和运算符。遗传算法的参数包括种群大小、交叉概率、变异概率等。交叉和变异是遗传算法的两个基本运算符,它们用于产生新的个体。在交叉过程中,你可以随机选择两个个体,并将它们的某些位进行交换;在变异过程中,你可以随机选择一个个体,并将它的某些位进行翻转。 最后,你可以实现遗传算法的主要流程。遗传算法的主要流程包括初始化种群、评估种群、选择个体、交叉和变异、更新种群等步骤。在每一代中,你需要对种群中的每个个体计算函数值,并根据函数值来选择一些优秀的个体进行交叉和变异。交叉和变异产生的新个体也需要计算函数值,并用它们来更新种群。 通过不断迭代上述流程,你可以逐渐优化函数,并找到它的最小值。当种群中的最优个体的函数值达到你预设的最小值时,你可以停止算法并返回最优个体的自变量作为函数最小值。 希望这些思路和步骤能够帮助你解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值