Fortran Coder

查看: 3428|回复: 0
打印 上一主题 下一主题

遗传算法(面向对象)

[复制链接]

147

帖子

42

主题

1

精华

宗师

F 币
1295 元
贡献
630 点
跳转到指定楼层
楼主
发表于 2019-4-16 23:40:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 weixing1531 于 2019-4-21 18:45 编辑

本程序在网友chichuyun程序基础上修改而得
原代码地址:https://github.com/chichuyun/Fortran-Tutorial/blob/master/16.%20%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95.md

本人作了如下修改:
1.二进制编码方式由整数数组编码改为整数位编码,节约了内存
2.由仅支持单变量改为支持多变量
3.增加求最小值计算
4.增加格雷码

ga4vGray.f90 (15.5 KB, 下载次数: 24)

[Fortran] 纯文本查看 复制代码
program main
  use GA
  implicit none

  integer(kind=IB)::x=6,y
  type(genetic),allocatable :: process
  ALLOCATE(process)
  process%func => Fitness_func      ! 适应度函数 vector
  process%seed = 623456             ! 随机数种子
  process%iter_num = 200            ! 迭代次数
  process%population = 200          ! 种群大小
  process%numerical = 7             ! 有效数字
  process%retain_rate = 0.35_RP     ! 存活率
  process%random_rate = 0.35_RP     ! 随机率
  process%mutation_rate = 0.005_RP  ! 变异率
  process%x_num = 2                 ! 自变量个数
  !process%IsGray = .true.          ! .true.代表格雷编码
  !process%IsMin = .true.           ! .true.代表求最小值

  process%upperb = (/12.1_RP,5.8_RP/) ! 自变量上限
  process%lowerb = (/-3.0_RP,4.1_RP/) ! 自变量下限

  call process%Evolve()         ! 演化
  call process%Output()         ! 输出
  !以下验证编码转换函数
  call process%binary2gray(x,y) !二进制编码转换为格雷码
  write(*,*)y
  call process%gray2binary(x,y) !格雷码转换为二进制编码
  write(*,*)y
  DEALLOCATE(process)
  stop
contains
  !----------------------------------------------------------------------------!
  real(kind=RP) function Fitness_func(x) ! sufficiency function 适应度函数
    implicit none
    !process%x_num明确了自变量个数
    real(kind=RP), parameter :: PI=3.141592653589793_RP
    real(kind=RP), intent(in) :: x(:)

    !算例 -3.0<x(1)<12.1 4.1<x(2)<5.8  在(11.6255,5.7250)处有一个全局最大值38.8503
    Fitness_func = 21.5_RP + x(1) * Sin(4.0_RP * PI * x(1)) + x(2) * Sin(20.0_RP * PI * x(2))
  end function Fitness_func
  !----------------------------------------------------------------------------!
end program main

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-25 17:23

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表