我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang
以下运用MATLAB实现遗传算法:
 
clc
clear
 
%参数
a = 0 ;
b = 4 ;
eps = 0.01 ;
lenchrom = ceil(log2((b - a)/eps + 1)) ;
sizepop = 50 ;
maxgen = 500 ;
pcross = 0.9 ;
pm = 0.05 ;
 
fitness = ones(1,sizepop) ;
chrom = zeros(sizepop,lenchrom) ;
nx = zeros(sizepop,lenchrom) ;
 
 
%初始化
%随机产生一个种群
for i = 1 : sizepop
    for j = 1 : lenchrom
        chrom(i,j) = round(rand) ;
    end
        x = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , chrom(i,:)) ) / ( 2 ^ lenchrom - 1) ;
        fitness(i) = fun(x); 
end
 
[bestfitness , bestindex] = max(fitness); 
bestchrom = chrom(bestindex,:) ;
 
for i = 1 : maxgen
    %select
    sumfitness = sum(fitness) ;
    fit = fitness ./ sumfitness ;
    tfit = zeros(sizepop) ;
    tfit(1) = fit(1) ;
    for j = 2 : sizepop
        tfit(j) = tfit(j - 1) + fit(j) ;
    end
    for k =  1 : sizepop
        pick = rand ;
        if pick < fit(1)
            father = 1 ;
        else
           for l = 1 : (sizepop - 1 )
              if pick > tfit(l) && pick < tfit(l + 1)
                father = l + 1 ;
              end
           end
        end
        mother = ceil(rand * sizepop) ;            
        %cross
        pick = rand ;         
        if pcross > pick
            poscross = randperm(lenchrom,1) ;
            nx(k,1:poscross) = chrom(father,1:poscross) ;
            nx(k,(poscross + 1):lenchrom) = chrom(mother,(poscross + 1):lenchrom) ;
        else
            nx(k,:) = chrom(father,:) ;
        end
       %mutation
       index = randperm(sizepop,1) ; 
       pick = rand ;
       if pick < pm
           posm = randperm(lenchrom,1) ;
           chrom(index,posm) = ~chrom(index,posm) ;
       end
    end
    
    chrom = nx ;
    
    for j = 1 : sizepop
        x = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , chrom(j,:)) ) / ( 2 ^ lenchrom - 1) ;
        fitness(j) = fun(x) ;
    end
    
    [newbestfitness , newbestindex] = max(fitness) ;
    if newbestfitness > bestfitness
        bestfitness = newbestfitness ;
        bestindex = newbestindex ;
        bestchorm = chrom(bestindex,:) ;
    end
end
 
bestx = a + (b - a) * (dot( 2 .^ ((lenchrom - 1) : -1 : 0 ) , bestchrom) ) / ( 2 ^ lenchrom - 1)
bestf = bestx * sin(bestx)

遗传算法matlab实现的更多相关文章

  1. 遗传算法MATLAB工具包简介

    下面介绍的函数都是Sheriffed大学遗传算法工具包内的常用函数 复制矩阵 B=rep(A,RepN) 1 A表示要被复制的矩阵,RepN包含每个方向的复制次数,RepN(1)代表纵向复制次数,Re ...

  2. 遗传算法MATLAB实现(2):一元函数优化举例

    遗传算法提供了一种求解非线性.多模型.多目标等复杂系统优化问题的通用框架. 先从例子开始,慢慢再总结理论... [例]利用遗传算法计算函数f(x)=x*cos(5*pi*x)+3.5在区间[-1,2. ...

  3. 遗传算法MATLAB实现(3):多元函数优化举例

    多峰的Shubert为: 求f(x,y)在[-10,10]x[-10,10]上的最大值. MATLAB代码: fun_mutv函数为: function my=fun_mutv(x,y) t1=zer ...

  4. 遗传算法MATLAB实现(1):工具箱下载及安装

    到官网下载谢菲尔德大学的GA工具箱:http://codem.group.shef.ac.uk/index.php/ga-toolbox(其实蛮不懂为什么有人把这个传到某个网上还需要积分才能下载,人家 ...

  5. 遗传算法Matlab源程序

    参考自: http://blog.163.com/zhaoshuyu_thomas/blog/static/461929072009103034816716/ 大家内容上可以参考上述文章,但其代码有很 ...

  6. matlab算法

    流水线型车间作业调度问题遗传算法Matlab源码流水线型车间作业调度问题可以描述如下:n个任务在流水线上进行m个阶段的加工,每一阶段至少有一台机器且至少有一个阶段存在多台机器,并且同一阶段上各机器的处 ...

  7. [Evolutionary Algorithm] 进化算法简介

    进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算法,而是一个“算法簇”.进化算法的产生的灵感借鉴了大自然中生物的进化操作,它一般包括基因编 ...

  8. MATLAB中如何使用遗传算法

    matlab有遗传算法工具箱. 核心函数:   (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成 ...

  9. matlab遗传算法

    function [xv,fv] = myGA(fitness, a, b, NP, NG, Pc, Pm, eps) % 用遗传算法求解一维无约束优化问题 % % 待优化的目标函数 fitness ...

随机推荐

  1. cf D. Broken Monitor

    http://codeforces.com/contest/370/problem/D 题意:输入一张图,上面只有两个字符'w'和‘.’ ,如果可以用一个正方形把所有的‘w’围起来,所有的‘w’都在正 ...

  2. 10 001st prime number

    这真是一个耗CPU的运算,怪不得现在因式分解和素数查找现在都用于加密运算. By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13 ...

  3. Xamarin.Forms DataGrid

    控件出处 https://components.xamarin.com/ https://components.xamarin.com/gettingstarted/ZumeroDataGrid/tr ...

  4. Sum

    Problem Description XXX is puzzled with the question below: 1, 2, 3, ..., n (1<=n<=400000) are ...

  5. Java---设计模块(值对象)

    ★ 场景和问题 在Java开发时,需要来回交换大量的数据,比如要为方法传入参数,也要获取方法的返回值,该如何能更好的进行数据的交互? ★ 基本的编写步骤 ◎第1步:写一个类,实现可序列化(如果以后数据 ...

  6. Ubuntu 下配置Samba 实现Linux和windows之间文件共享

    一 Samba 的安装: sudo apt-get insall sambasudo apt-get install smbfs 二 在Ubuntu中创建共享目录: mkdir  /home/shar ...

  7. Cache-control

    网页的缓存是由HTTP消息头中的“Cache-control”来控制的,常见的取值有private.no-cache.max-age.must-revalidate等,默认为private.其作用根据 ...

  8. ORACLE CASE WHEN 及 SELECT CASE WHEN的使用方法

    CASE 语句 CASE selector   WHEN value1 THEN action1;   WHEN value2 THEN action2;   WHEN value3 THEN act ...

  9. JSTL配合正则表达式在JSP中的应用

    <%@ page language="java" import="java.util.*,cn.com.Person" pageEncoding=&quo ...

  10. Java基础知识强化64:基本类型包装类的引入

    1. 基本类型包装类概述 (1)将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据. (2)常用的操作的之一:用于基本数据类型与字符串之间的转换. (3)基本类型和包装类的对应 ...