混合蛙跳算法实现步骤与例子
算法背景
混合蛙跳算法的运行原理从仿生上来说可以这么认为:
在一个池塘,有若干块石头,青蛙可以落在石头上,每块石头上可以获取到的食物数量是不同的,在池塘中有很多只青蛙,也有很多块石头,青蛙间可以交流,这样所有青蛙就都会往自己所在蛙群中所知道的最多食物的方向跳,或往全部青蛙中食物最多的方向跳,最终在池塘中找到最多食物的石头。
算法原理
不作赘述。(主要懒得写,而且功力不够写不好~)
实现步骤
- 初始化参数
- 随机生成青蛙
- 划分蛙群
- 蛙群内进行局部搜索
- 重新排序(按适应度排序)后回到步骤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()
可以看出蛙群很快就收敛到最优解了(横轴是全局搜索次数,纵轴是计划所需时间)
混合蛙跳算法实现步骤与例子相关推荐
- 【车间调度】基于matlab混合蛙跳算法 (SFLA) 求解简单调度问题【含Matlab源码 2247期】
⛄一.车间调度简介 在传统的SFLA中,每一个青蛙的位置代表一个解,若干个青蛙组成的种群代表一个解的集合,种群被划分为不同的组,即模因组,对每个模因组执行搜索过程,当达到终止条件后,重新将模因组合并成 ...
- 基于混合蛙跳算法优化SVM的滚动轴承故障诊断python实现
1.混合蛙跳算法(SFLA)原理 混合蛙跳算法(SFLA)是一种受自然生物模仿启示而产生的基于群体的协同搜索方法,由局部搜索和全局信息交换两部分组成. 混合蛙跳算法中,每个青蛙的位置代表了一个可行解. ...
- 【优化求解】基于混合蛙跳算法实现最优求解matlab源码
1 简介 2 部分代码 clc;clear all; close all m=50; %种群分组数 n=35; %t每组青蛙包含的个数 Ne=25; %组内迭代数 smax = 100; %最大步长 ...
- 【车间调度】基于改进蛙跳算法求解车间调度问题
作业车间调度问题描述 作业车间调度问题(Job Shop Scheduling, JSP)是最经典的几个NP-hard问题之一.其应用领域极其广泛,涉及航母调度,机场飞机调度,港口码头货船调度,汽车加 ...
- 【BP回归预测】基于matlab随机蛙跳算法SFLA优化神经网络数据回归预测【含Matlab源码 2272期】
⛄一.蛙跳算法 1 改进的免疫蛙跳算法 免疫蛙跳算法具有混合蛙跳算法的全局优化与局部细致搜索优点, 可以优化连续问题和离散问题, 具有较强的鲁棒性;同时, 群体具有的免疫机制对群体进行控制和调节, 把 ...
- 【BP回归预测】随机蛙跳算法SFLA优化神经网络数据回归预测【含Matlab源码 2272期】
⛄一.蛙跳算法 1 改进的免疫蛙跳算法 免疫蛙跳算法具有混合蛙跳算法的全局优化与局部细致搜索优点, 可以优化连续问题和离散问题, 具有较强的鲁棒性;同时, 群体具有的免疫机制对群体进行控制和调节, 把 ...
- 关于蛙跳算法的计算机文献,文化蛙跳算法性能分析研究.PDF
文化蛙跳算法性能分析研究.PDF 第24卷摇 第11期 计 算机 技 术 与发 展 Vol.24摇 No.11 2014年11月 摇 摇 摇 摇 摇 摇 摇 摇 摇 摇 COMPUTERTECHNOL ...
- 进化算法——蛙跳算法Python代码
进蛙跳算法Python代码 蛙跳算法原理 Python代码 参考文献 蛙跳算法原理 假设种群个数为 c h r o m n u m chromnum chromnum , 分组个数为 g r o u ...
- matlab与水库调度,蛙跳算法优化水库调度,全局迭代中最优解未更新
本人尝试利用蛙跳算法求解水库单目标调度,目标函数是极大值函数,在运算中适应值最大的解在全局迭代中一直未更新,调试算法 发现子群内更新时按适用度降序排列第一个最优解也未更新,不知道问题出在哪里,求大神指 ...
最新文章
- Oracle数据库备份与恢复的三种方法
- 百款APP嵌入 KeyMob移动广告聚合平台发布十周
- Linux中su命令详解
- EcStore中的App是什么东西?
- 【转】VS技巧—任务列表Task List(ToDoList)
- python sys.path.append()添加路径_Python调用CST进行天线建模仿真:环境搭建指南
- linux建立ftp用户
- Oracle 10g中UNDO数据的作用及UNDO表空间的操作详解
- php模拟登陆,PHP模拟登陆手记
- python统计word页码_使用Python(win32com)在MS Word表中插入带页码的字段
- php100视频教程下载(全集),下载地址链接(整理后包涵解压密码)
- web应用系统性能测试的种类
- 【ArcGIS风暴】ArcGIS10.6栅格计算器(Raster Calculator)用法详解
- /proc/self/目录的意义
- Mac电脑为什么适合编程?
- app上线指南(中文版)
- java葱_Java程序设计_网课答案
- 纳米孔Nanopore-16S数据分析学习笔记
- halconc#软件收费吗_没事别想不开做Halcon机器视觉工程师
- JAVA构造器、静态上下文的执行时机与代码执行顺序详解
热门文章
- Linux永久修改主机名和IP
- SMETA验厂咨询,由于两种模式所需的审核天数不同,总的费用存在差异
- C语言入门篇之练气化龙(八)(数组下卷)
- 数字图像处理——第十章(图像分割)
- Python实现微信消息连续发送
- 正则表达式与自动机基础 NFA 驱动程序 手写 NFA 自动机
- Centos7运行Docker1.13.1报错Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor pres
- 延伸未来世界 看元宇宙风华
- 深度学习backbone是什么意思_股票强势是什么意思,股票强势特征和如何分析_股票学习...
- MySQL获取 查询上周的周一 查询上周的周日(星期日)查询本周的周一(星期一) 查询本周的周日(星期日)