文章目录

  • 写在前面
  • 具体过程
    • 主函数
    • 初始化鸟群
    • 对鸟群进行迭代
    • 替换领飞鸟
    • 对鸟群进行排序
    • 输出结果
    • 画图
    • 其他
  • 总结

写在前面

上一篇1 中实现了候鸟算法的matlab版本,之后我将候鸟算法应用于了数据中心的云端和雾端的负载均衡问题中,写这篇文章的目的在于介绍候鸟算法可应用于不同的问题中,而不仅仅是原论文2的应用问题——QAP问题,在我寻找相关论文时发现绝大多数的应用还是集中在QAP问题的领域,所以现在分享出来,希望对大家将MBO应用于其他问题时有所帮助。
因为此文主要目的为介绍将MBO应用于其他问题时如何修改源代码,所以对我实验的目标问题不做过多的描述。

具体过程

在我的代码3中,首先是设置自己的目标函数,我的目标函数在fogFuction\fogFuction.m中。

注:目标函数应为求最小值函数,若为最大值应该加负号转化为求最小值。例如我在本问题中的求解目标是最大化数据中心的利润,但要加上负号变成最小化问题,求解之后再转化为正常数值进行展示或画图。

主函数

下一步需要在MBOAlgorithm中,设置我的目标问题——fog-cloud的相关超参数,因为实验有画图的需求,所以还有一些画图所需的参数和函数。在最外层加的循环是因为需要计算多个timeslot。

初始化鸟群

创建鸟群的部分(createInitialFlock)不需要修改。

在本文中,仅需要修改函数的传递的参数而不需要修改函数内部逻辑的视为不需要进行修改。

之后需要修改的是创建新的鸟/解决方案(newSoultion),这部分需要根据具体的问题进行定义 鸟 的属性(如随机生成的参数),最重要的是定义cost,即目标函数的值,这关系到算法如何对不同的解决方案进行取舍/判断不同鸟的优劣。

在本文之后的部分 鸟 和 解决方案 代表同一种意思,都是鸟群中进行迭代的基本单位。

对鸟群进行迭代

对鸟群进行迭代的部分(flyFlock)不需要修改。
创建每只鸟的领域数组部分(createNeighborSet)不需要修改。
探索鸟的领域的方法(neighbour) 需要根据目标函数修改,修改的内容和newSoultion部分基本相同,需要区别的是需要定义如何根据现有的解决方案产生一个与它相近的解决方案。(例如以当前鸟的参数为中心向周围随机产生一个新的参数)
对领域数组中的不同解决方案进行排序(sortNeighbours)不需要修改。
获取领域数组中最好的解决方案(getBestNeighbour)不需要修改。
向之后的鸟传递解决方案(addNeighbour)不需要修改。

替换领飞鸟

替换领飞鸟(replaceLeader)不需要修改。
用领飞鸟之后的鸟(编号为2和3的鸟)替换(replaceLeaderWithSuccessor)不需要修改。
用目前鸟群中表现最好的鸟进行替换(replaceLeaderWithBest)都不需要修改。

对鸟群进行排序

对鸟群进行排序(sortTheSuccessors)不需要修改。

输出结果

输出结果(writeResults)可根据自己的需要进行修改,我需要在实验中每个timeslot计算结束后输出它的cost和运行时间,所以进行的相关修改。

画图

画图(drawpic)和输出结果一样也因人而异,可根据自己的需求画对应的图。

其他

在figure和jpg文件夹的就是最后的运行结果和画图的结果了,如果真的闲得无聊的话可以看看

候鸟算法在其他问题中应用时需要修改的代码相关推荐

  1. moviepy中视频时长修改

    在拼接视频的时候,可能需要指定视频的时长 修改视频clip的时长 修改时长基于duration属性进行修改,示例代码如下: from moviepy.editor import *if __name_ ...

  2. 简单有效!在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?...

    圈圈 1. relu:用极简的方式实现非线性激活,还缓解了梯度消失 x = max(x, 0) 2. normalization:提高网络训练稳定性 x = (x - x.mean()) / x.st ...

  3. 怎么修改计算机密码界面的背景,操作方法:在Win10中输入密码时如何修改登录界面的背景图片(两种方法)...

    Win10系统的登录背景默认为"英雄"墙纸.我相信许多朋友对此感到厌倦. Win10没有提供自由更改的选项,但是我们可以通过某些方法或工具来更改登录背景. 方法1:手动修改 Win ...

  4. 在CV/NLP/DL领域中,有哪些修改一行代码或者几行代码提升性能的算法?

    链接:https://www.zhihu.com/question/427088601 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:年年的铲屎官 https://www.zhihu.c ...

  5. 在小程序中使用阿里巴巴矢量图标库-代码版

    阿里巴巴-iconfont 首先请自行注册-这个是必须要的 1.找到自己想要的图标,鼠标移动到图标上,点击添加到库 2.选择完之后,点击右上角的购物车图标 3然后在右侧点击添加至项目 4.在 资源管理 ...

  6. 常见算法在实际项目中的应用

    近日Emanuele Viola在Stackexchange上提了这样的一个问题,他希望有人能够列举一些目前软件.硬件中正在使用的算法的实际案例来证明算法的重要性,对于大家可能给到的回答,他还提出了几 ...

  7. 深度学习核心技术精讲100篇(三)-层次自适应的多臂老虎机决策算法 ( HATCH )在滴滴中的应用

    前言 需要源码的小伙伴参见: Contextual Bandits 算法在推荐场景中的应用源码 https://download.csdn.net/download/wenyusuran/155784 ...

  8. 智能推荐算法在直播场景中的应用

    本文概览: 1. 推荐系统是什么? 推荐系统是帮助用户发现内容,克服信息过载的重要工具: 它通过分析用户行为,对用户兴趣建模.从而预测用户的兴趣并给用户做推荐: 信息过载: 信息过载是信息时代信息过于 ...

  9. [react] react中遍历时为什么不用索引作为唯一的key值?

    [react] react中遍历时为什么不用索引作为唯一的key值? key值的目的在Diff DOM的时候根据render前后的唯一key值快速的对树进行比较,保证key值得唯一性,如在进行中间插入 ...

  10. 操作系统hpf算法事例_操作系统中常见算法汇总

    一.常见作业调度(高级调度)算法 1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业.这种调度算法的优点是实现简单,公平.其缺点是没有考虑到系统中各种资源的综合使用情况, ...

最新文章

  1. c语言中delay找不到标识符,51单片机的c语言,请问哪里错了?延时没有效果,但是编译又不报错。delay应该怎么写,怎么引用啊?...
  2. 【零基础学习iOS开发】【02-C语言】10-函数
  3. 【期望】期望分数(金牌导航 期望-4)
  4. [渝粤教育] 苏州工艺美术职业技术学院 PPT美化设计 参考 资料
  5. leetcode63 不同路径II
  6. 南工院linux考试题库,操作系统复习题..doc
  7. 对windows更多的理解
  8. js获取request中的值_基于node.js的开发框架 — Koa
  9. 荣耀鸿蒙系统内测,官宣!荣耀 Magic UI 4.0 与 EMUI 11 同步内测:后续支持升级为鸿蒙操作系统...
  10. 为什么php都用mysql,PHP MySQL为什么?
  11. Spring IOC学习心得之Bean对IOC容器的感知
  12. php 上传加水印,PHP 图片上传加水印实例
  13. iOS开发之控制器创建与加载(生命周期)
  14. 用java代码怎样做pos结算_Java Tile.Pos方法代码示例
  15. linux命令kp使用方法,Linux 命令 使用
  16. 安德鲁1.2Ku使用感受
  17. andriod studio页面跳转
  18. Laya发布魅族小游戏,调试前步骤
  19. 京东云,走进产业数字化深处
  20. python 单词库_如何快速获取语料库中的单词集合(使用nltk)?

热门文章

  1. MATLAB基础语法之蒙特卡罗模拟_1(布丰投针)
  2. 搭建和配置支撑2000人同时观看的流媒体服务器系统(Linux步骤详解)
  3. 屏幕录像软件Community Clips Recorder简介及其使用技巧(郝宪玮)
  4. 纯粹数学的雪崩效应:庞加莱猜想何以造福了精准医疗?
  5. 启用launch文件
  6. java 帕斯卡_Java编程实现帕斯卡三角形代码示例
  7. linux主机独立显卡切换,Linux Deepin 2013 设置双显卡之关闭独显
  8. 无法上网的N种解决方法
  9. java 大二学期总结报告_大二学生自我鉴定范文3篇
  10. 个人网站如何申请支付接口?(教程)