【群智能算法】一种改进的北方苍鹰优化算法 改进北方苍鹰算法INGO[1]【Matlab代码#1】


获取资源请见文章第5节:资源获取】


1. 基础北方苍鹰优化算法

1.1 猎物识别阶段(勘探阶段)

在这里插入图片描述

1.2 追击和逃逸阶段(开发阶段)

在这里插入图片描述

2. 改进的北方苍鹰优化算法

2.1 立方混沌Cubic映射

在这里插入图片描述

2.2 透镜成像反向学习

基于透镜成像的反向学习策略根据缩放因子动态调节反向解的数量,从而优化种群数量并使算法避免局部最优。
透镜成像反向学习得到的反向解为:
在这里插入图片描述
其中,m为缩放因子,ad和bd分别为上下限,Xi为正向解或者叫原始解,Xi*为反向解。特殊地,当m=1时为一般的反向学习策略

2.3 最优最差反向学习策略

(1)对于最优个体,对其进行反向学习,避免算法早熟,从而提高算法的局部寻优能力。反向解如下:
在这里插入图片描述
(2)对于最差个体,对其进行随机反向学习,提高其全局搜索能力。随机反向解如下:
在这里插入图片描述

3. 部分代码展示

%%立方混沌初始化加反向折射机制的的种群初始化
X=initializationNew(SearchAgents,dimension,upperbound,lowerbound, fitness); 
for i =1:SearchAgents
     Flag4ub=X(i,:)>upperbound;
     Flag4lb=X(i,:)<lowerbound;
     X(i,:)=(X(i,:).*(~(Flag4ub+Flag4lb)))+upperbound.*Flag4ub+lowerbound.*Flag4lb;
     L=X(i,:);
     fit(i)=fitness(L);
end
%%
    %% 改进点:混合反向学习策略
    % 对最优位置,透镜成像反向学习策略
    n=1;
    Temp = (upperbound + lowerbound)./2 + (upperbound + lowerbound)./(2*n) - Xbest./n;
    % 边界越界处理
    Flag4ub=Temp>upperbound;
    Flag4lb=Temp<lowerbound;
    Temp=(Temp.*(~(Flag4ub+Flag4lb)))+upperbound.*Flag4ub+lowerbound.*Flag4lb; 
    fitTemp = fitness(Temp);%计算适应度值
    if(fitTemp<fbest)
        fbest = fitTemp;
        Xbest = Temp;
    end
     % 对最差位置,随机反向学习策略
     [fitWorst,indexWorst] = max(fit(i));
     WorstPosition = X(indexWorst);
     Temp = lowerbound + rand(1,dimension).*(upperbound - WorstPosition);
     Temp=(Temp.*(~(Flag4ub+Flag4lb)))+upperbound.*Flag4ub+lowerbound.*Flag4lb; 
    fitTemp = fitness(Temp);%计算适应度值
    if(fitTemp<fitWorst)
       fit(indexWorst) = fitTemp;
       X(indexWorst,:) = Temp;
    end

4. 结果展示

在这里插入图片描述

5. 资源获取

在F1、F2、F3上表现优异,可以获取完整代码资源。

6. 参考文献

付雪,朱良宽,黄建平,王璟瑀,Arystan Ryspayev.基于改进的北方苍鹰算法的多阈值图像分割[J/OL].计算机工程.

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
由于Linux操作系统是开源的,因此其进程调度算法代码可以在其代码库中找到。具体来说,Linux使用完全公平调度算法(CFS)作为其默认的进程调度算法,其代码实现可以在内核源代码中的sched目录中找到。以下是一些示例代码: 1. CFS调度器代码: /* * Completely Fair Scheduler * * This file contains the code for the Completely Fair Scheduler, a * process scheduler based on a red-black tree. It implements a * proportional-share scheduling algorithm with low latency for * interactive tasks and high throughput for compute-bound tasks. * * Copyright (C) 2002-2007 Ingo Molnar <mingo@elte.hu> * Copyright (C) 2007-2011 Con Kolivas <kernel@kolivas.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ 2. 调度策略代码: /* Define a scheduling class */ static const struct sched_class fair_sched_class = { .next = &idle_sched_class, .enqueue_task = enqueue_task_fair, .dequeue_task = dequeue_task_fair, .yield_task = yield_task_fair, .check_preempt_curr = check_preempt_wakeup, .pick_next_task = pick_next_task_fair, .put_prev_task = put_prev_task_fair, #ifdef CONFIG_SMP .select_task_rq = select_task_rq_fair, .migrate_task_rq = migrate_task_rq_fair, .task_waking = task_waking_fair, .task_woken = task_woken_fair, #endif .set_curr_task = set_curr_task_fair, .task_tick = task_tick_fair, .task_fork = task_fork_fair, .task_dead = task_dead_fair, #ifdef CONFIG_FAIR_GROUP_SCHED .task_move_group = task_move_group_fair, #endif }; 3. 调度器初始化代码: void __init sched_init(void) { int i; /* Initialize the active and expired arrays for CFS */ for_each_possible_cpu(i) { struct rq *rq = cpu_rq(i); int j; /* Initialize the red-black tree for CFS */ for (j = 0; j < MAX_NICE; j++) { INIT_LIST_HEAD(&rq->cfs_rq[j].tasks); INIT_LIST_HEAD(&rq->cfs_rq[j].runnable); rb_init_node(&rq->cfs_rq[j].rb_node); } rq->cfs_rq[0].exec_clock = rq_clock(rq); rq->cfs_rq[1].exec_clock = rq_clock(rq); rq->cfs_rq[2].exec_clock = rq_clock(rq); rq->cfs_rq[3].exec_clock = rq_clock(rq); rq->cfs_rq[4].exec_clock = rq_clock(rq); rq->cfs_rq[5].exec_clock = rq_clock(rq); rq->cfs_rq[6].exec_clock = rq_clock(rq); rq->cfs_rq[7].exec_clock = rq_clock(rq); rq->cfs_rq[8].exec_clock = rq_clock(rq); rq->cfs_rq[9].exec_clock = rq_clock(rq); rq->cfs_rq[10].exec_clock = rq_clock(rq); rq->cfs_rq[11].exec_clock = rq_clock(rq); rq->cfs_rq[12].exec_clock = rq_clock(rq); rq->cfs_rq[13].exec_clock = rq_clock(rq); rq->cfs_rq[14].exec_clock = rq_clock(rq); rq->cfs_rq[15].exec_clock = rq_clock(rq); rq->nr_running = 0; rq->nr_uninterruptible = 0; rq->curr = NULL; INIT_LIST_HEAD(&rq->migration_queue); INIT_LIST_HEAD(&rq->expired); INIT_LIST_HEAD(&rq->active); rq->expired_timestamp = 0; rq->next_balance = jiffies + HZ; rq->skip_clock_update = 0; rq->idle_stamp = rq_clock(rq); rq->last_moved = jiffies; spin_lock_init(&rq->lock); spin_lock_init(&rq->task_lock); } /* Initialize the idle class */ init_idle(&init_task); init_idle(&ksoftirqd_task); init_idle(&migration_thread); /* Initialize the fair class */ sched_register_scheduler(&fair_sched_class); }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值