背包问题:蛇优化算法(Snake Optimizer,SO)求解背包问题(Knapsack Problem,KP)提供Matlab代码

本文主要是介绍背包问题:蛇优化算法(Snake Optimizer,SO)求解背包问题(Knapsack Problem,KP)提供Matlab代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背包问题

1.1背包问题描述

背包问题(Knapsack Problem,KP)是一种重要的组合优化问题,在生活的许多领域都有着十分广泛的应用。背包问题可以描述为:给定一个背包和n种物品,其中,背包的容量为 V V V ,第i 种物品的质量为 c i c_{i} ci ,价值为 p i p_{i} pi ,如何通过物品选择,使得装入背包中的物品总价值最大。其数学模型如下:
f = max ⁡ ∑ i = 1 n p i x i s.t.  ∑ i = 1 n c i x i ≤ V , i = 1 , 2 , … , n x i = 0 , 1 \begin{array}{ll} & f=\max \sum_{i=1}^{n} p_{i} x_{i} \\ \text { s.t. } & \sum_{i=1}^{n} c_{i} x_{i} \leq V, i=1,2, \ldots, n \\ & x_{i}=0,1 \end{array}  s.t. f=maxi=1npixii=1ncixiV,i=1,2,,nxi=0,1

1.2背包问题测试集

选取9个经典的背包问题测试集,下表中, c c c为物品的质量, p p p为物品的价值, V V V为背包的最大容量。
在这里插入图片描述
参考文献:
[1]耿亚,吴访升.基于粒子群-模拟退火算法的背包问题研究[J].控制工程,2019,26(05):991-996.DOI:10.14107/j.cnki.kzgc.161767.

二、蛇优化算法

蛇优化算法(Snake Optimizer,SO)由Fatma A. Hashim和Abdelazim G. Hussien于2022年提出,该算法思路新颖,快速高效,模拟了蛇的觅食和繁殖行为。

在这里插入图片描述

2.1算法原理

雄性蛇和雌性蛇之间交配的发生受到某些因素的影响。蛇在春末和初夏交配,那时温度低。但交配过程不仅取决于温度,还取决于食物的充足性。如果温带低,食物充足;雄性蛇会互相争斗,以吸引雌性的注意力。雌性有权决定是否交配。如果发生交配,雌性开始在巢穴或洞穴中产卵,一旦卵出现,它就会离开。
在这里插入图片描述

蛇优化算法受蛇交配行为的启发,如果温度低且食物充足,则会发生交配,否则蛇只会寻找食物或吃掉剩余的食物。蛇优化算法分为两个阶段即全局探索或局部开发。探索取决于环境因素,即寒冷的地方和食物,在这种情况下,蛇只在周围寻找食物。对于开发,此阶段包括许多过渡阶段,以使全局更有效率。在食物可用但温度高的情况下,蛇只会专注于吃可用的食物。如果食物可用并且该区域寒冷,则会导致交配过程的发生;交配过程进行战斗模式或交配模式。在战斗模式中,每个雄性都会为获得最好的雌性而战,每个雌性都会尝试选择最好的雄性。在交配模式下,每对配对之间发生交配与食物数量的可用性有关。如果交配过程发生,则雌性产卵并将其孵化成新的蛇。SO将群体分成两个相等的群体即雄性和雌性。

2.1.1全局搜索(无食物)

如果Q<0.25,蛇通过选择任何随机位置来搜索食物,并更新它们的位置。

雄性蛇位置更新:
在这里插入图片描述

雌性蛇位置更新:
在这里插入图片描述

2.1.2局部搜索(有食物)

如果Q>0.25,且温度>0.6,则蛇只会向食物移动:
在这里插入图片描述

如果Q>0.25,且温度<0.6,则蛇将处于战斗模式或交配模式

(1)战斗模式

雄性蛇位置更新:
在这里插入图片描述

雌雄蛇位置更新:
在这里插入图片描述

(2)交配模式

雄性蛇位置更新:

在这里插入图片描述

雌雄蛇位置更新:
在这里插入图片描述

2.2算法流程

在这里插入图片描述

三、蛇优化算法求解背包问题

% 背包问题,共包含9个数据集,修改Function_name即可测试不同数据集
close all
clear 
clc
SearchAgents_no=30; % 种群大小
Function_name='F5'; %F1-F9
Max_iteration=300; % 最大迭代次数
[lb,ub,dim,fobj]=Get_Functions_details(Function_name);%获取数据集信息
[fMin,bestX,DBO_curve]=SO(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);%算法求解
ShowResult;%显示结果

3.1数据集1求解结果

在这里插入图片描述
所求得的背包总价值 : 295
背包的理论最大容量 : 269
所求得的背包的容量 : 269
算法选取的物品序号 : 2 3 4 8 9 10
算法选取的物品质量 : 4 60 32 62 65 46
算法选取的物品价值 : 10 47 5 61 85 87

3.2数据集2求解结果

在这里插入图片描述

所求得的背包总价值 : 481.0694
背包的理论最大容量 : 375
所求得的背包的容量 : 354.9607
算法选取的物品序号 : 3 5 7 8 10 11 12 14 15
算法选取的物品质量 : 47.9873 74.6605 51.3535 1.49846 16.5899 44.5692 0.4669 57.1184 60.7166
算法选取的物品价值 : 58.5009 82.284 71.0501 30.3995 14.7313 98.8525 11.9083 53.1663 60.1764

3.3数据集3求解结果

在这里插入图片描述

所求得的背包总价值 : 1018
背包的理论最大容量 : 878
所求得的背包的容量 : 837
算法选取的物品序号 : 1 2 3 4 5 6 7 9 10 11 12 13 15 17 18 19 20
算法选取的物品质量 : 92 4 43 83 84 68 92 6 44 32 18 56 25 70 48 14 58
算法选取的物品价值 : 44 46 90 72 91 40 75 8 54 78 40 77 61 75 29 75 63

3.4数据集4求解结果

在这里插入图片描述

所求得的背包总价值 : 9767
背包的理论最大容量 : 10000
所求得的背包的容量 : 9768
算法选取的物品序号 : 1 2 3 4 5 6 7 8 10 16 17
算法选取的物品质量 : 983 982 981 980 979 978 488 976 486 969 966
算法选取的物品价值 : 981 980 979 978 977 976 487 974 485 976 974

3.5数据集5求解结果

在这里插入图片描述

所求得的背包总价值 : 3029
背包的理论最大容量 : 1000
所求得的背包的容量 : 1000
算法选取的物品序号 : 1 4 6 7 8 10 11 12 13 14 15 16 17 19 20 22 25 26 27 28 30 35 37 38 40 41 45 49
算法选取的物品质量 : 80 70 70 66 50 25 50 55 40 48 50 32 22 30 32 38 25 28 30 22 30 20 20 25 10 20 10 2
算法选取的物品价值 : 220 192 180 165 162 158 155 130 125 122 120 118 115 105 101 100 95 90 88 82 77 69 65 63 58 56 15 3

3.5数据集6求解结果

在这里插入图片描述

所求得的背包总价值 : 15899
背包的理论最大容量 : 11258
所求得的背包的容量 : 11246
算法选取的物品序号 : 2 3 4 5 8 10 12 13 14 18 19 21 23 25 27 28 30 31 33 34 35 37 38 40 41 43 49
算法选取的物品质量 : 754 699 587 789 347 287 784 676 198 4 355 144 531 741 321 84 483 205 399 747 118 806 9 121 370 494 193
算法选取的物品价值 : 490 651 833 883 337 441 934 467 661 774 595 424 807 501 834 851 459 111 159 858 793 651 856 285 405 391 448

3.7数据集7求解结果

在这里插入图片描述

所求得的背包总价值 : 8327
背包的理论最大容量 : 2400
所求得的背包的容量 : 2398
算法选取的物品序号 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 46 47 49 50 51 53 56 57 59
算法选取的物品质量 : 135 133 130 11 128 123 20 75 9 66 105 43 18 5 37 90 22 85 9 80 70 17 60 35 57 35 61 40 8 50 32 40 72 35 100 2 7 19 28 10 22 27 30 47 68 10 12 43 20 4 3 10
算法选取的物品价值 : 350 310 300 295 290 287 283 280 272 270 265 251 230 220 215 212 207 203 202 200 198 196 190 182 181 175 160 155 154 140 132 125 110 105 101 92 83 77 75 73 72 70 69 58 45 38 36 33 27 19 10 4

3.8数据集8求解结果

在这里插入图片描述
所求得的背包总价值 : 4822
背包的理论最大容量 : 1173
所求得的背包的容量 : 1173
算法选取的物品序号 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 18 20 22 24 25 26 27 30 31 32 33 36 39 43 45 46 49 50 51 54 62 63 67 68 72 77
算法选取的物品质量 : 40 27 5 21 51 16 42 18 52 28 57 34 44 43 52 53 42 56 44 2 12 9 40 3 39 16 54 5 23 22 10 16 40 1 43 32 2 23 11 35 6 4
算法选取的物品价值 : 199 194 193 191 189 178 174 169 164 164 161 158 157 154 152 149 142 125 124 122 119 116 114 110 109 100 97 82 80 77 74 72 69 68 65 56 36 34 29 29 22 5

3.9数据集9求解结果

在这里插入图片描述

所求得的背包总价值 : 14791
背包的理论最大容量 : 3820
所求得的背包的容量 : 3818
算法选取的物品序号 : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 58 59 60 61 62 63 64 65 66 67 68 70 71 74 75 77 78 79 83 87 96 99
算法选取的物品质量 : 54 95 36 18 4 71 83 16 27 84 88 45 94 64 14 80 4 23 75 36 90 20 77 32 58 6 14 86 84 59 71 21 30 22 96 49 81 48 37 28 6 84 19 55 88 38 51 52 79 55 70 53 64 99 61 86 64 32 60 42 45 34 22 49 37 33 1 43 85 32 99 23 8 10 95 6 13 5
算法选取的物品价值 : 297 295 293 292 291 289 284 284 283 283 281 280 279 277 276 275 273 264 260 257 250 236 236 235 235 233 232 232 228 218 217 214 211 208 205 204 203 201 196 194 193 193 192 191 190 187 187 184 184 184 181 179 176 173 172 171 128 123 114 113 107 105 101 100 100 99 98 94 94 80 74 72 63 63 56 48 15 6

四、完整MATLAB代码

这篇关于背包问题:蛇优化算法(Snake Optimizer,SO)求解背包问题(Knapsack Problem,KP)提供Matlab代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406715

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python