改进的北方苍鹰算法(INGO)优化BP神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 模型预测精度对比

3 Matlab代码

3.1 伪代码流程示意图

3.2 INGO-BP

4 视频讲解

0 引言

针对北方苍鹰优化算法存在易陷入局部最优的问题,众多学者提出多种策略改进北方苍鹰优化算法(INGO)。首先,在种群初始化阶段,相对混沌隐射初始化种群,引入佳点集方法映射到搜索空间更能提高了种群的多样性以及避免了早熟,其次在位置更新阶段,加入鱼鹰局部勘探位置更新策略和自适应惯性权重因子,增强了全局勘探和局部开发能力。

1 数学模型

INGO是NGO的基础引入佳点集初始策略、OOA局部开发策略和自适应惯性权重策略来提高模型全局和局部能力。其数学模型基础如下:

1)改进点1:佳点集初始化种群:该策略能在较少的样本点下尽可能均匀地覆盖整个搜索空间。

其中Pn(k)为佳点集,r为佳点,{r,k}为小数部分,n为种群数,X为佳点集隐射种群,ub,lb为问题维度上下界限。

2)改进点2:自适应权重:为了提高北方苍鹰算法的寻优能力,引入自适应惯性权重因子用于平衡搜索和开发之间平衡。

式(4)为自适应权重,式(5)、(6)为自适应权重对NGO算法搜索和开发数学模型应用。

3)改进点3:OOA算法局部开发:NGO算法开发阶段易于陷入局部极值状态,故引入鱼鹰优化算法(Osprey Optimization Algorithm, OOA)的局部位置更新过程可以更快地收敛到局部最优解附近,克服NGO局部极值收敛状态。

利用式(3)取代NGO尾随追逐开发数学模型。

2 模型预测精度对比

对比NGO和INGO优化BP神经网络模型性能得出对比图,由于BP神经网络受权值阈值随机性影响,本章节采用’seed‘固定随机组函数进行模型对比,具体代码如下:

rand('seed',3333);%3333为随机固定组,可变

模型数据来源UCI回归数据集:

INGO-BP:

NGO-BP:

3 Matlab代码

3.1 伪代码流程示意图

3.2 INGO-BP

1)单输出回归预测:单输出回归预测:改进的北方苍鹰算法优化BP神经网络模型(INGO-BP)

2)多输出回归预测:多输出回归预测:改进的北方苍鹰算法优化BP神经网络模型(INGO-BP)

3)分类模型:分类模型:改进的北方苍鹰算法优化BP神经网络模型(INGO-BP)

4)时间序列:时间序列:改进的北方苍鹰算法优化BP神经网络模型(INGO-BP)

4 视频讲解

B站搜索:‘ 不想学习的陈成 ’

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值