算法背景

混合蛙跳算法的运行原理从仿生上来说可以这么认为:

在一个池塘,有若干块石头,青蛙可以落在石头上,每块石头上可以获取到的食物数量是不同的,在池塘中有很多只青蛙,也有很多块石头,青蛙间可以交流,这样所有青蛙就都会往自己所在蛙群中所知道的最多食物的方向跳,或往全部青蛙中食物最多的方向跳,最终在池塘中找到最多食物的石头。

算法原理

不作赘述。(主要懒得写,而且功力不够写不好~)

实现步骤

  1. 初始化参数
  2. 随机生成青蛙
  3. 划分蛙群
  4. 蛙群内进行局部搜索
  5. 重新排序(按适应度排序)后回到步骤3,直到达到条件输出

可以看出,第5步和第三步就是全局搜索,将蛙群里的信息通过排序后重新划分来实现蛙群间的信息共享

解决负载均衡调度问题

问题:现在有若干个任务,并有若干台处理任务的机器,每台机器处理任务的速度不同,找出最好的安排方案

比如任务有长度为1,2,3的三个任务,而机器也有每单位时间可以处理的任务长度为1,2,3的三台机器,那么最优方案是显而易见的,时间也只需要1个单位时间。

代码需改进的地方很多,但思路可供参考

import matplotlib.pyplot as plt
import numpy as np
import random
import operator# 适应度函数
def F(plan):sum = []for i in range(d):sum.append(0)for i in range(d):if(plan[i]<0|plan[i]>nodes.__len__()):return 100sum[plan[i]] += round(tasks[i]/nodes[plan[i]],3)sum.sort(reverse=True)return sum[0]# 初始化
tasks = [1, 2, 3, 4, 5,6,7,8,9]  # 任务长度
nodes = [1, 2, 3]  # 节点
# SFLA参数
N = 100
n = 10
d = tasks.__len__()
m = N//n
L = 5
G = 100
D_max = 10
P = []# step1 生成蛙群
for i in range(N):t = [[], 0]for j in range(d):t[0].append(random.randint(0, 2))t[0] = np.array(t[0])t[1] = F(t[0])P.append(t)
# sorted(P,key=lambda P:P[1])
P.sort(key=operator.itemgetter(1))
Xg = P[0]for k in range(G):#step2 划分子群M=[]for i in range(m):M.append([])for i in range(N):M[i%m].append(P[i])Xb=[]Xw=[]for i in range(m):Xb.append(M[i][0])Xw.append(M[i][M[i].__len__()-1])#step3 局部搜索for i in range(m):for j in range(L):D = random.randint(0,1)*(Xb[i][0]-Xw[i][0])temp = Xw[i][0]+Dif(F(temp) < F(Xw[i][0])):f = 0Xw[i][0] = tempXw[i][1] = F(temp)M[i][M[i].__len__()-1]=Xw[i]else:Xb[i] = Xgf=2if(f==2):t = [[], 0]for j in range(d):t[0].append(random.randint(0, 2))t[0] = np.array(t[0])t[1] = F(t[0])Xw[i] = tP = []for i in range(m):for j in range(n):P.append(M[i][j])# sorted(P,key=lambda P:P[1])P.sort(key=operator.itemgetter(1))Xg = P[0]x=[]y=[]for i in range(P.__len__()):x.append(k)y.append(P[i][1])plt.scatter(x,y,s=5)print(P[0])
plt.show()

可以看出蛙群很快就收敛到最优解了(横轴是全局搜索次数,纵轴是计划所需时间)

混合蛙跳算法实现步骤与例子相关推荐

  1. 【车间调度】基于matlab混合蛙跳算法 (SFLA) 求解简单调度问题【含Matlab源码 2247期】

    ⛄一.车间调度简介 在传统的SFLA中,每一个青蛙的位置代表一个解,若干个青蛙组成的种群代表一个解的集合,种群被划分为不同的组,即模因组,对每个模因组执行搜索过程,当达到终止条件后,重新将模因组合并成 ...

  2. 基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现

    1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成. 混合蛙跳算法中,每个青蛙的位置代表了一个可行解. ...

  3. 【优化求解】基于混合蛙跳算法实现最优求解matlab源码

    1 简介 2 部分代码 clc;clear all; close all m=50; %种群分组数 n=35; %t每组青蛙包含的个数 Ne=25; %组内迭代数 smax = 100; %最大步长 ...

  4. 【车间调度】基于改进蛙跳算法求解车间调度问题

    作业车间调度问题描述 作业车间调度问题(Job Shop Scheduling, JSP)是最经典的几个NP-hard问题之一.其应用领域极其广泛,涉及航母调度,机场飞机调度,港口码头货船调度,汽车加 ...

  5. 【BP回归预测】基于matlab随机蛙跳算法SFLA优化神经网络数据回归预测【含Matlab源码 2272期】

    ⛄一.蛙跳算法 1 改进的免疫蛙跳算法 免疫蛙跳算法具有混合蛙跳算法的全局优化与局部细致搜索优点, 可以优化连续问题和离散问题, 具有较强的鲁棒性;同时, 群体具有的免疫机制对群体进行控制和调节, 把 ...

  6. 【BP回归预测】随机蛙跳算法SFLA优化神经网络数据回归预测【含Matlab源码 2272期】

    ⛄一.蛙跳算法 1 改进的免疫蛙跳算法 免疫蛙跳算法具有混合蛙跳算法的全局优化与局部细致搜索优点, 可以优化连续问题和离散问题, 具有较强的鲁棒性;同时, 群体具有的免疫机制对群体进行控制和调节, 把 ...

  7. 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF

    文化蛙跳算法性能分析研究.PDF 第24卷摇 第11期 计 算机 技 术 与发 展 Vol.24摇 No.11 2014年11月 摇 摇 摇 摇 摇 摇 摇 摇 摇 摇 COMPUTERTECHNOL ...

  8. 进化算法——蛙跳算法Python代码

    进蛙跳算法Python代码 蛙跳算法原理 Python代码 参考文献 蛙跳算法原理 假设种群个数为 c h r o m n u m chromnum chromnum , 分组个数为 g r o u ...

  9. matlab与水库调度,蛙跳算法优化水库调度,全局迭代中最优解未更新

    本人尝试利用蛙跳算法求解水库单目标调度,目标函数是极大值函数,在运算中适应值最大的解在全局迭代中一直未更新,调试算法 发现子群内更新时按适用度降序排列第一个最优解也未更新,不知道问题出在哪里,求大神指 ...

最新文章

  1. Oracle数据库备份与恢复的三种方法
  2. 百款APP嵌入 KeyMob移动广告聚合平台发布十周
  3. Linux中su命令详解
  4. EcStore中的App是什么东西?
  5. 【转】VS技巧—任务列表Task List(ToDoList)
  6. python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
  7. linux建立ftp用户
  8. Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解
  9. php模拟登陆,PHP模拟登陆手记
  10. python统计word页码_使用Python(win32com)在MS Word表中插入带页码的字段
  11. php100视频教程下载(全集),下载地址链接(整理后包涵解压密码)
  12. web应用系统性能测试的种类
  13. 【ArcGIS风暴】ArcGIS10.6栅格计算器(Raster Calculator)用法详解
  14. /proc/self/目录的意义
  15. Mac电脑为什么适合编程?
  16. app上线指南(中文版)
  17. java葱_Java程序设计_网课答案
  18. 纳米孔Nanopore-16S数据分析学习笔记
  19. halconc#软件收费吗_没事别想不开做Halcon机器视觉工程师
  20. JAVA构造器、静态上下文的执行时机与代码执行顺序详解

热门文章

  1. Linux永久修改主机名和IP
  2. SMETA验厂咨询,由于两种模式所需的审核天数不同,总的费用存在差异
  3. C语言入门篇之练气化龙(八)(数组下卷)
  4. 数字图像处理——第十章(图像分割)
  5. Python实现微信消息连续发送
  6. 正则表达式与自动机基础 NFA 驱动程序 手写 NFA 自动机
  7. Centos7运行Docker1.13.1报错Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pres
  8. 延伸未来世界 看元宇宙风华
  9. 深度学习backbone是什么意思_股票强势是什么意思,股票强势特征和如何分析_股票学习...
  10. MySQL获取 查询上周的周一 查询上周的周日(星期日)查询本周的周一(星期一) 查询本周的周日(星期日)