e小白

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 124|回复: 0

数学建模--智能优化算法--大洪水算法的简单应用

[复制链接]

3

主题

3

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2021-5-3 22:43:22 | 显示全部楼层 |阅读模式
本帖最后由 上帝果冻 于 2021-5-3 22:46 编辑

1 算法原理
当面对突发的洪水时,人本能地会逃向高处。假设某座山上突然降雨,山下水平面不断升高。某个人正在爬山,此时他可以向任意方向移动,但随水面升高,他必须找到更高处,最终他会到某个山峰上。如果我们将最大值优化问题的全局最优解看作山峰,那么搜索过程就和逃生类似了。
可以看出大洪水算法(great deluge algorithm,GDA)是可以接受比当前解要差的解的,这有利于算法扩大搜索范围,提高全局优化能力。
2 算法模型
STEP1 :设置初始值,适应度函数,初始水位。
STEP2 :设置降水函数
STEP3 :内循环,根据当前解产生下一个解,判断高度是否低于水位,如果是则继续循环,
否则结束循环。
STEP 4 :外循环,判断是否终止循环,如果是则结束循环,否则升高水位继续循环。
3 算法应用
在区间[0,5]最大值
  1. import numpy as np

  2. # 适应度函数
  3. def fun(x):
  4.     y = x[0]**5-34*x**4+10*x[0]**3-13*x[0]**2+17*x[0]-15
  5.     return y

  6. # 设置变量个数,初始值,初始水位
  7. ndim = 1
  8. x0 = np.random.uniform(0,5,ndim)
  9. level = -100
  10. # 降雨函数
  11. def rain(level,x0):
  12.     new = level + 0.5*(fun(x0)-level)
  13.     return new
  14. # 设置外循环次数
  15. n = 100
  16. limit = 0
  17. for i in range(n):
  18.     while 1:
  19.         x1 = x0+np.random.uniform(-1,1,ndim)
  20.         if fun(x1)>level:
  21.             x0 = x1
  22.             limit = 0
  23.             break
  24.         else:
  25.             limit +=1
  26.         
  27.         if limit > 20:
  28.             limit= 0
  29.             break
  30.     level = rain(level,x0)
  31. print(x0,fun(x0))
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|e小白

GMT+8, 2021-6-24 04:48 , Processed in 0.046909 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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