局部搜索算法源代码
数学建模十大算法部分带有源代码综述

• • •ห้องสมุดไป่ตู้• • • • • • •
蒙特卡罗算法 数据处理算法 数学规划算法 图论算法 动态规划、回溯搜索、分治算法、分支定 界 三大非经典算法 网格算法和穷举法 连续离散化方法 数值分析算法 图象处理算法
1、蒙特卡罗算法
该算法又称随机性模拟算法,是通过计算机 仿真来解决问题的算法,同时可以通过模拟 可以来检验自己模型的正确性,是比赛时必 用的方法
现在假设需要识别出这一伪币。把两个或三个硬币的情况作 为不可再分的小问题。注意如果只有一个硬币,那么不能判 断出它是否就是伪币。在一个小问题中,通过将一个硬币分 别与其他两个硬币比较,最多比较两次就可以找到伪币。这 样,1 6硬币的问题就被分为两个8硬币(A组和B组)的问题。 通过比较这两组硬币的重量,可以判断伪币是否存在。如果 没有伪币,则算法终止。否则,继续划分这两组硬币来寻找 伪币。假设B是轻的那一组,因此再把它分成两组,每组有4 个硬币。称其中一组为B1,另一组为B2。比较这两组,肯定 有一组轻一些。如果B1轻,则伪币在B1中,再将B1又分成两 组,每组有两个硬币,称其中一组为B1a,另一组为B1b。比 较这两组,可以得到一个较轻的组。由于这个组只有两个硬 币,因此不必再细分。比较组中两个硬币的重量,可以立即 知道哪一个硬币轻一些。较轻的硬币就是所要找的伪币。
例2-1 [找出伪币] 给你一个装有1 6个硬币 的袋子。1 6个硬币中有一个是伪造的,并 且那个伪造的硬币比真的硬币要轻一些。你 的任务是找出这个伪造的硬币。为了帮助你 完成这一任务,将提供一台可用来比较两组 硬币重量的仪器,利用这台仪器,可以知道 两组硬币的重量是否相同。
比较硬币1与硬币2的重量。假如硬币1比硬币 2轻,则硬币1是伪造的;假如硬币2比硬币1 轻,则硬币2是伪造的。这样就完成了任务。 假如两硬币重量相等,则比较硬币3和硬币4。 同样,假如有一个硬币轻一些,则寻找伪币 的任务完成。假如两硬币重量相等,则继续 比较硬币5和硬币6。按照这种方式,可以最 多通过8次比较来判断伪币的存在并找出这一 伪币。
【国家自然科学基金】_局部搜索策略_基金支持热词逐年推荐_【万方软件创新助手】_20140730

调度优化 视频稳定 覆盖网络 蟑螂算法 蚂蚁算法 蚂蚁相遇策略 薄膜光学 菱形搜索 航线影响因子 航班延误调度 自适应变异 膜系优化 聚类分析 聚类 群机器人 网络流模型 约束布局问题 算子行为的微粒群优化算法 策略 等位基因 等价性验证 立体视觉 空间平滑搜索 空中交通管理 种群多样性 离散粒子群算法 离散数字编码 禁忌搜索 神经网络 砌墙式规则 短期优化调度 目标搜索 目标增量 生物反应器 状态集分解 烧结过程 烧结终点 烟羽跟踪 烟羽发现 烟羽 湍流 混沌序列 混沌 混合量子进化算法 混合算法 流水车间调度 气味/气体源确认 比特平面 正交矩形packing问题 模糊逻辑 模糊自适应pso 模糊控制 模拟退火算法 模因算法
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
科研热词 推荐指数 遗传算法 11 蚁群算法 9 局部搜索 7 粒子群算法 5 多目标优化 5 旅行商问题 4 粒子群优化算法 3 memetic算法 3 进化算法 2 迁徙策略 2 群体智能 2 精英策略 2 粒子群优化 2 混沌优化 2 混合遗传算法 2 混合粒子群算法 2 汽车排产 2 模拟退火 2 柔性作业车间调度 2 差分进化算法 2 局部搜索算法 2 局部搜索策略 2 小生境 2 协同进化 2 函数优化 2 信息熵 2 优化 2 人工免疫系统 2 食物再分配策略 1 预防性维修 1 非线性运输问题 1 集成动态调度 1 集成优化 1 随机重启爬山搜索 1 量子遗传算法 1 量子进化算法 1 配送路径 1 遍历性 1 递归弧插入 1 适应度赋值 1 连续优化 1 过滤定向搜索 1 边缘约束 1 边缘匹配 1 轨迹优化 1 足球机器人 1 贪心随机适应性搜索算法 1 贪婪算法 1 贪婪倒位变异 1 负修复 1 贝叶斯网络 1 调整时间 1
面向模型局部搜索的最短路径集最优匹配方法

面向模型局部搜索的最短路径集最优匹配方法石源;莫蓉;刘红军;彭维;万能【摘要】To realize local search of Boundary Representation(B-Rep)model, a method converted attribute graph local structure comparisoninto attribute graph shortest paths set optimal matching was proposed. To obtain shortest paths set of the attribute graph, an algorithm named All Shortest Paths generation based on Floyd--Warshall (ASP Floyd-Warshall)was presented. For realize optimal matching of shortest paths set between query models and candidate models, an Discrete Particle Swarm Optimization for Shortest Paths Optimal Matching (DPSO-SPOM) was given, which included definition of corresponding basic operation rules, fitness function, termination conditions and algorithm steps. The experimental results demonstrate that ASP Floyd-Warshall algorithm and DPSO-SPOM algorithm could solve problems that how to obtain the local structure correspondence between models and how to calcu late distance between local structures, thus supported the local search of models effectively.%为实现边界表示模型的局部搜索,提出一种将模型属性图局部结构比较问题转化为属性图最短路径集最优匹配问题的方法。
katago源代码解析

katago源代码解析摘要:1.KataGo简介2.KataGo的算法原理3.KataGo的神经网络结构4.KataGo的训练过程5.KataGo的应用与优化正文:近年来,围棋人工智能(AI)的发展备受瞩目,其中KataGo以其出色的表现和高效计算能力引起了广泛关注。
本文将对KataGo的源代码进行解析,以期帮助读者更好地理解其算法原理、神经网络结构和训练过程。
1.KataGo简介KataGo是由Google开发的一款基于深度学习的围棋AI。
它采用了单神经网络架构,并在训练过程中使用了自我对弈和强化学习技术。
KataGo的棋力强大,曾在多个围棋比赛中取得优异成绩。
2.KataGo的算法原理KataGo的核心算法是基于蒙特卡洛树搜索(MCTS)和深度学习。
MCTS 是一种随机模拟算法,通过多次随机模拟进行搜索和选择,最终得到最佳决策。
KataGo将这一算法与深度学习相结合,提高了棋力表现。
3.KataGo的神经网络结构KataGo的神经网络结构包括两个部分:值网络和策略网络。
值网络用于估计棋局的好坏,输出每一步棋的胜率;策略网络则用于生成下一步的候选动作。
这两个网络通过博弈树进行交互,最终输出最佳决策。
4.KataGo的训练过程KataGo的训练过程主要包括三个阶段:数据预处理、网络搭建和优化、自我对弈与强化学习。
在数据预处理阶段,KataGo使用了大量的围棋棋局数据进行训练。
接下来,通过网络搭建和优化阶段,不断调整神经网络的结构和参数,提高棋力。
最后,在自我对弈与强化学习阶段,KataGo通过自我对弈不断强化自身棋力,并采用策略梯度方法进行优化。
5.KataGo的应用与优化KataGo不仅在围棋领域取得了优异成绩,还可以应用于其他棋类游戏和组合优化问题。
为了进一步提高KataGo的棋力,可以采取以下途径:(1)扩大训练数据规模:更多的训练数据有助于提高KataGo的棋力。
(2)优化网络结构:尝试不同的神经网络结构和参数设置,以提高计算效率和棋力。
pso算法求解vrptw问题的python代码

题目:PSO算法求解VRPTW问题的Python代码一、概述随着物流行业的不断发展,车辆路径规划问题(VRP)逐渐成为物流领域研究的热点之一。
其中,带时间窗口的车辆路径规划问题(VRPTW)是VRP问题的一个重要变体,它在实际应用中具有很高的价值。
粒子裙优化算法(PSO)作为一种新兴的启发式优化算法,已经在求解优化问题方面取得了很好的效果。
本文将介绍如何使用Python编写PSO算法来求解VRPTW问题。
二、VRPTW问题简介1. VRPTW问题的定义VRPTW问题是指在满足客户需求的前提下,规划车辆的路径和行驶时间,使得总成本最小。
该问题包含了多个客户点、车辆容量限制、时间窗口限制等复杂约束条件。
2. 问题的目标VRPTW问题的目标是找到一组车辆路径方案,使得每个客户需求都得到满足,并且满足车辆的容量限制和时间窗口限制,同时使得总行驶距离或总行驶时间最小。
三、PSO算法简介1. PSO算法原理PSO算法是一种基于裙体智能的优化算法,其灵感来源于鸟裙或鱼裙的裙体行为。
算法通过不断迭代更新粒子的位置和速度,寻找全局最优解。
2. PSO算法特点PSO算法具有全局寻优能力强、易于实现和并行化等特点,因此在解决优化问题时具有一定的优势。
四、Python实现PSO算法求解VRPTW问题1. VRPTW问题建模我们需要将VRPTW问题转化为数学模型,以便使用PSO算法求解。
一般来说,可以使用带有时间窗口限制的TSP模型来表示VRPTW问题。
2. PSO算法代码实现接下来,我们使用Python编写PSO算法的代码,并将其应用于VRPTW问题。
代码主要包括初始化粒子裙、更新粒子位置和速度、计算适应度值、寻找全局最优解等步骤。
3. VRPTW问题的数据准备在使用PSO算法求解VRPTW问题之前,我们需要准备VRPTW问题的相关数据,包括客户需求信息、车辆容量信息、时间窗口信息等。
4. 结果分析和可视化我们将得到的最优解进行分析和可视化展示,以便更直观地理解算法的求解过程和结果。
禁忌搜索灰狼优化算法研究

禁忌搜索灰狼优化算法研究郭玉纯; 曹小鹏; 胡元娇【期刊名称】《《计算机技术与发展》》【年(卷),期】2019(029)012【总页数】6页(P55-60)【关键词】灰狼优化算法; 禁忌搜索算法; 局部搜索; 局部最优【作者】郭玉纯; 曹小鹏; 胡元娇【作者单位】西安邮电大学计算机学院陕西西安 710121【正文语种】中文【中图分类】TP301.60 引言2014年澳大利亚学者Mirjalili模仿狼群种群围攻、捕获猎物的过程提出了灰狼优化算法(grey-wolf-optimization,GWO)[1-3]。
灰狼优化算法具有较好的计算鲁棒性和全局搜索能力,自该算法提出以来,在图像处理、图像分割[4],无人机三维航路规划[5],流水车间调度[6],TSP问题[7],均值聚类[8],互联电网负荷频率控制[9]等方面应用广泛。
由于灰狼优化算法中灰狼种群始终向全局最优的前三个解靠近,导致其全局搜索能力较弱,对于一些复杂优化问题,如在解决高维度、多模态复杂函数优化问题时,容易陷入局部最优和出现早熟收敛的现象。
针对以上问题,张贾奎等提出了一种基于Tent混沌序列的灰狼算法(TCGWO)[10],以改善算法的寻优性能;伍铁斌提出一种基于对数函数描述收敛因子的改进GWO算法[11],以避免算法出现早熟收敛;徐慧等提出了融合杜鹃搜索的灰狼优化算法[12],在全局搜索能力方面有较为显著的提升,将其应用于特征选择中,有效提高了网络入侵检测的性能。
以上文献中提出的更新策略,虽然扩大了搜索空间,但是容易跳过全局最优,收敛速度也会变低。
禁忌搜索通过禁忌表来记录若干次搜索历史,下轮迭代可通过检索禁忌表来避免回到历史搜索。
文中通过引入禁忌搜索策略,通过对每次迭代产生的最优解α、优解β、次优解δ个体执行禁忌搜索,从而提高算法的全局搜索能力并在算法收敛后期跳出局部最优解,且收敛速度加快。
基于此,提出一种禁忌搜索灰狼优化改进算法(tabu search-grey wolf optimization,TS-GWO),并通过多组实验验证了该策略对算法寻优性能的改进。
COST231-Hata模型基于Memetic算法的修正
COST231-Hata模型基于Memetic算法的修正张涵; 周新力; 刘晓娣; 宋斌斌【期刊名称】《《电子设计工程》》【年(卷),期】2019(027)022【总页数】4页(P133-136)【关键词】模型修正; 数据采集; COST231-Hata模型; Memetic算法【作者】张涵; 周新力; 刘晓娣; 宋斌斌【作者单位】海军航空大学山东烟台264001【正文语种】中文【中图分类】TN011无线电波传播在自由空间中是相对简单的现象,但由于地球表面复杂的地表特性,这就决定了地表上的电波传播是一个复杂的问题,粗糙地表面、海平面、丘陵等各种复杂地形对电波传播都有着不同的影响。
在此基础上,经验模型Egli模型[1]、Okumura-Hata 模型[2]、COST231-Hata模型[3]、Lee[4]模型总结了各个地区不同的地理情况,给出了不同条件下的电波传播的模型,具有一定的代表性。
COST231-Hata模型[5]是COST231研究计划在Okumura测试数据基础上,通过对较高频段的传播实验曲线进行分析模拟得到的[6]。
因其对数据预测准确简单,受到了很多学者的关注。
文献[7]通过对5.8 GHz频段的LMS调谐算法,对COST231-Hata模型与SUI模型的性能进行了比较。
文献[8]通过比较东京附近的电波路径损耗,基于相同的频率不同的建筑高度对COST231-Hata模型的影响。
文中介绍了COST231-Hata模型的基本原理和Memetic算法的基本流程,并且通过实测数据测量出了适合模型的本地化数据,并列出了适应度函数公式,在此基础上,利用算法对COST231-Hata模型进行改进,说明了此方法的可行性。
1 基本原理1.1 COST231-Hata模型COST231-Hata模型的计算公式[9]为:式中,f为频率,单位为MHz;d为距离,单位为km;hb为发射天线有效高度,单位为m;hm为接收天线有效高度,单位为m;α(hm)为接收天线高度修正因子;C为传播环境校正因子,中型城市及郊区取0,密集大城市区取3。
局部搜索的音频数据检索
局部搜索的音频数据检索
李应
【期刊名称】《智能系统学报》
【年(卷),期】2008(3)3
【摘要】根据多媒体音频数据的特点,提出一种适用于快速音频数据检索的局部搜索数据结构,即局部搜索树(local search tree,LS-tree).在局部搜索树中,分别以音频数据小波变换系数的过零率和平均幅度作为主、次关键码,基于局部范围对作为索引的其他系数进行组织.其次,基于局部搜索树,提出采用小波包最好基小波塔型算法实现音频数据检索.最后,把采用局部搜索树的小波包最好基-小波塔型算法的搜索和基于小波不同级系数的检索方法相比较,结果表明,这种方法对音频数据检索的快速和有效性.
【总页数】6页(P259-264)
【作者】李应
【作者单位】福州大学数学与计算机科学学院,福建福州350108
【正文语种】中文
【中图分类】TP391.3;TP311.12
【相关文献】
1.音频数据检索专利技术综述 [J], 邓慧丽;何华
2.基于内容的音频数据检索研究 [J], 刘文辉;蚩志锋
3.基于LPCMCC的音频数据检索方法 [J], 江基华;李应
4.一种高效过滤提纯音频大数据检索方法 [J], 张兴忠;王运生;曾智;牛保宁
5.基于音频搜索源的音频搜索引擎研究 [J], 詹祯浩
因版权原因,仅展示原文概要,查看原文内容请购买。
AutoDock
AutoDock和AutoDock Tools 使用教程一、分子对接简介及软件介绍1.分子对接理论基础所谓分子对接就是两个或多个分子之间通过几何匹配和能量匹配而相互识别的过程。
分子对接在酶学研究以及药物设计中具有十分重要的意义。
在酶激活剂、酶抑制剂与酶相互作用以及药物分子产生药理反应的过程中,小分子(通常意义上的Ligand)与靶酶(通常意义上的Receptor)相互互结合,首先就需要两个分子充分接近,采取合适的取向,使两者在必要的部位相互契合,发生相互作用,继而通过适当的构象调整,得到一个稳定的复合物构象。
通过分子对接确定复合物中两个分子正确的相对位置和取向,研究两个分子的构象,特别是底物构象在形成复合物过程中的变化,是确定酶激活剂、抑制剂作用机制以及药物作用机制,设计新药的基础。
分子对接计算是把配体分子放在受体活性位点的位置,然后按照几何互补、能量互补化学环境互补的原则来实时评价配体与受体相互作用的好坏,并找到两个分子之间最佳的结合模式。
分子对接最初思想起源于Fisher E.的“锁和钥匙模型”(图),认为“锁”和“钥匙”的相识别的首要条件是他们在空间形状上要互相匹配。
然而,配体和受体分子之间的识别要比“锁和钥匙”模型复杂的多。
首先,配体和受体分子的构象是变化的,而不是刚性的,配体和受体在对接过程中互相适应对方,从而达到更完美的匹配。
其次,分子对接不但要满足空间形状的匹配,还要满足能量的匹配。
配体和受体之间的通过底物分子与靶酶分子能否结合以及结合的强度最终是由形成此复合物过程的结合自由能变化ΔG bind所决定的。
互补性(complementarity)和预组坦织(pre-organization)是决定分子对接过程的两个重要原则,前者决定识别过程的选择性,而后者决定识别过理的结合能力。
互补性包括空间结构的互补性和电学性质的互补性。
1958年Koshland提出了分子识别过程中的诱导契合(induced fit)概念,指出配体与受体相互结合时,受体将采取一个能同底物达到最佳结合的构象(图1)。
改进的蝴蝶优化聚类算法
改进的蝴蝶优化聚类算法①郑洪清(广西外国语学院 信息工程学院, 南宁 530222)通讯作者: 郑洪清摘 要: 针对当前算法在求解聚类问题时存在精度低、速度慢及鲁棒性差等问题, 提出一种改进的蝴蝶优化聚类算法, 借鉴精英策略思想重新定义蝴蝶优化算法的局部搜索迭代公式, 然后融合遗传算法的选择、交叉和变异操作.在1个人工数据集和5个UCI 数据集上的测试结果表明所提出算法的性能, 且与其他算法相比具有一定优势.关键词: 聚类算法; 蝴蝶优化算法; 遗传算法引用格式: 郑洪清.改进的蝴蝶优化聚类算法.计算机系统应用,2020,29(10):217–221. /1003-3254/7635.htmlImproved Butterfly Optimization Algorithm for ClusteringZHENG Hong-Qing(School of Information Engineering, Guangxi University of Foreign Languages, Nanning 530222, China)Abstract : Aiming at the problems of low accuracy, slow speed, and poor robustness of the current algorithm in solving the clustering problem, an improved butterfly optimization clustering algorithm was proposed. Based on the idea of elite strategy, the local search iterative formula of butterfly optimization algorithm was redefined, and then the selection,crossover, and mutation operations of genetic algorithm were fused. Test results on one artificial dataset and five UCI datasets demonstrate that the performance of the proposed algorithm is superior to other algorithms.Key words : clustering algorithm; butterfly optimization algorithm; genetic algorithm聚类是将数据集中的样本划分为若干个通常不相交的子集, 每个子集称为“族”, 同一族中的对象具有较高的相似度, 不同族中的对象差别较大. 聚类分析已成为数据挖掘领域的研究热点问题, K 均值算法(K-means)是一种经典的聚类算法, 因其受初始聚类中心的影响容易陷入局部最优等缺陷而限制了其应用范围. 许多学者提出一系列智能聚类算法, 如蜜蜂交配优化聚类算法[1]、萤火虫聚类算法[2]、差分进化聚类算法[3]、布谷鸟聚类算法[4]、弹性网络聚类算法[5]、花朵授粉聚类算法[6]、蝙蝠聚类算法[7]、灰狼与郊狼混合优化算法[8]、自适应细菌觅食聚类优化算法[9]、拓展差异度的高维数据聚类算法[10]、无人仓系统订单分批问题及K-max 聚类算法[11]等. 各种改进算法均取得了一定成效, 但对于一些复杂问题仍存在精度不高和收敛速度慢等问题.蝴蝶优化算法[12](Butterfly Optimization Algorithm,BOA)是2018年Sankalap Arora 提出一种新的全局优化算法, 其灵感来自于蝴蝶的觅食行为. 该行为由蝴蝶的合作向食物来源位置移动, 蝴蝶接收并感知空气中的气味以确定食物来源或交配伙伴的潜在方向, 但其本质不同于文献[13,14]. 由于提出时间短, 国外可参考的文献很少, 国内暂无相关论文报道. 蝴蝶优化算法与其他群智能算法一样, 也存在收敛速度和易陷入局部最优等缺陷, 因此本文尝试提出了一种改进蝴蝶优化算法(Improved Butterfly Optimization Algorithm,IBOA), 首先描述了蝴蝶优化算法的特点及实施步骤,计算机系统应用 ISSN 1003-3254, CODEN CSAOBNE-mail: Computer Systems & Applications,2020,29(10):217−221 [doi: 10.15888/ki.csa.007635] ©中国科学院软件研究所版权所有.Tel: +86-10-62661041① 收稿时间: 2020-03-02; 修改时间: 2020-03-27, 2020-04-10; 采用时间: 2020-04-21; csa 在线出版时间: 2020-09-30217重新定义蝴蝶优化算法的局部迭代公式, 再将遗传算法的轮盘赌选择、交叉操作和变异操作融入蝴蝶优化算法中, 通过标准的数据集测试验证IBOA 算法的有效性.1 基本的蝴蝶优化算法蝴蝶优化算法是模拟蝴蝶的觅食行为, 该思想的条件假设如下:1) 所有的蝴蝶都应该散发出某种香味, 使蝴蝶能够互相吸引.2) 每只蝴蝶都会随机移动, 或朝着散发出更多香味的最佳蝴蝶移动.3) 蝴蝶的刺激强度受目标函数值的影响或决定.当蝴蝶能感觉到其他任何蝴蝶的香味时并朝它移动, 在该算法中, 该阶段称为全局搜索. 在另一种情况下, 当蝴蝶不能感觉周围的香味时, 然后它会随机移动这个阶段称为局部搜索. 利用转换概率 控制全局和局部搜索过程, 其迭代公式为:f =c t I a(1)x t +1i =x t i +(r 2×g ∗−x t i )×f i(2)x t +1i=x ti +(r2×x t j −x tk)×f i (3)c t +1=c t +(b /c t ×Ngen)(4)f c I a a c x t +1ii t +1r ∈[0,1]g ∗f i i x t i x t j x t ki ,j ,k t b c t t 式(1)中的是香味感知量, 是感觉形式, 是刺激强度, 是香味, 通常和的取值范围为[0, 1]之间; 式(2)中的表示第只蝴蝶在第代的位置, 的随机数, 表示全局最优解, 表示第只蝴蝶的香味感知量; 式(3)中的, , 分别表示第只蝴蝶在第代的位置; 式(4)中的为常数, , 表示第代的值,Ngen 为最大迭代次数.基于上述描述, 蝴蝶优化算法的实施步骤如下:n p Step 1. 初始化种群规模及转换概率等参数.Step 2. 利用式(5)计算每只蝴蝶的适应度值, 并求出当前最优值f min 和最优解Best.x t i x t iStep 3. 利用式(1)计算香味感知量, 如果rand <p ,则利用式(2)计算, 否则利用式(3)计算.Step 4. 利用式(5)重新计算每只蝴蝶的适应度值F new , if F new <f min , 则替换之前的最优值和最优解.c Step 5. 利用式(4)更新.Step 6. 判断是否达到最大迭代次数, 如果是输出最优值和最优解, 否则跳至Step 3.2 改进的蝴蝶优化算法由于基本的BOA 算法聚类效果差, 本文对其进行改进, 提出一种改进的蝴蝶优化聚类算法. 重新定义蝴蝶的局部搜索方式, 同时结合轮盘赌选择、交叉操作和变异操作, 提高算法的寻优能力, 使聚类效果稳定.2.1 编码方法m d nd =d ×m t i x i (t )=[c 1(t ),c 2(t ),···,c m (t ),]c j (t )t j j =1,2,···,m 采用实数编码, 一只蝴蝶的位置表示一组聚类中心, 假设有个聚类中心, 数据集的属性有个, 则每只蝴蝶的维数为. 则第代蝴蝶的位置编码为, 其中表示第代蝴蝶的第个聚类中心, .2.2 评价函数本文采用如下的聚类准则作为适应度值:f (x i (t ))=min n c ∑i =1m ∑j =1||y i −c j (t )||(5)n c y i i f (x i (t ))其中, 为聚类样本数, 为第个样本, 表示所有数据到聚类中心的最小值, 值越小表示聚类效果越好.2.3 重新定义迭代公式鉴于基本的蝴蝶优化算法局部寻优能力较差, 故结合精英策略将式(3)重新定义如下:x t +1i =x t i +r ×(x t j −x t k )+r ×(g ∗−x t i )(6)g ∗式(6)中为全局最优解即为精英, 其他蝴蝶在精英附近进行搜索, 因此能提高算法的精度.为了提高聚类效果和鲁棒性, 融合遗传算法相关操作.2.4 轮盘赌选择1) 计算每只蝴蝶的适应度值Fitness ;2) 计算每只蝴蝶被遗传到下一代的概率p ;3) 计算每只蝴蝶的累加概率q ;r ∈[0,1]x t +1i =x t i(temp (1),:)4) 在蝴蝶种群中对每一个体产生一个随机数, 执行temp =find(r <q ), .2.5 交叉操作x t j +1x t j 1) 在蝴蝶种群中随机选择两个父类, , 设置交叉概率p c ;temp =x t j 2) 若r <pc , 随机产生一个交叉点point ; ;x t j (:,point +1:nd )=x t j +1(:,point +1:nd )x t j +1(:,point +1:nd )=temp 3) .计算机系统应用2020 年 第 29 卷 第 10 期2182.6 变异操作x i =(x i 1,x i 2,···,x id ,x id +1,···,x ie ,···,x in )x id x ie x ′i =(x i 1,x i 2,···,x ie ,x ie −1,···,x id ,···,x in )设, 随机选取两个位置和, 将两个位置之间的元素进行逆转操作, 变换后的位置为 .2.7 IBOA 实施步骤IBOA 算法求解聚类问题的步骤:Step 1. 初始化种群规模、转换概率、迭代次数N_iter 和交叉概率p c 等参数.Step 2. 计算每只蝴蝶的适应度值, 并求出当前最优值f min 和最优解Best.Step 3. 利用式(1)计算香味感知量, 如果rand <p ,则利用式(2)计算, 否则利用式(6)计算.Step 4. 重新计算每只蝴蝶的适应度值F new , if F new <f min , 则替换之前的最优值和最优解.Step 5. 执行轮盘赌选择、交叉操作和变异操作.重新计算每只蝴蝶的适应度值F new , if F new <f min , 则替换之前的最优值和最优解.Step 6. 利用式(4)更新.Step 7. 判断是否达到最大迭代次数, 如果是输出最优值和最优解, 否则跳至Step 3.3 实验分析3.1 实验环境与参数设置为了测试IBOA 算法的正确性与有效性, 选取6个基准测试函数来验证算法, 包括1个人工数据集和5个从UCI (/ml/index.php )数据库中选取了Iris 、Wine 、Glass 、Cancer 、Cintraceptive Method Choice (简称CMC) 5组实验数据, 所有的实例均运行在处理器为Celeron(R)双核CPU T3100, 1.90GHz 、内存为4G 的PC 上, 以Matlab R2010a 编写代码. 参数设置为: 种群规模 =50、转换概率 =0.1、c 的初值为0.01, 迭代次数N_iter =200和交叉概率pc =0.85. 在问题规模一致的情形下, 这些算法的复杂度是相同的.3.2 测试实例结果比较(1)人工数据集1 (set_data =250, d =3, K =5): 为了展示IBOA 的求解过程, 分别计算第10代、第50代的求解结果如图1和图2中. 并将算法独立运行20次的结果于表1中, Best 表示最优解, Average 表示平均解, Worst 表示最差解, Std 表示标准差.表1中其他算法与数据来源于文献[7], 从表1中的计算结果可知IBOA 的求解精度及鲁棒性均优于其他算法.图1 人工数据集1第10代的聚类结果图2 人工数据集1第50代的聚类结果表1 人工数据集1的20次独立运行结果比较算法Best Average Worst Std K-means 1747.38591991.93512507.9091342.2974PSO 1718.25382153.75952444.8930344.4796ABC 1718.20691899.45032059.121277.4967IBA 1718.25381784.25382285.1103150.9430BOA 2720.58513288.83833705.1412217.1649IBOA1718.25381718.95071732.09923.0948(2)UCI 数据集: 将算法独立运行20次, 与近几年多种算法比较如表2–表7所示, 其中表2–表6中的K-means 、GA 、ACO 、PSO 、HBMO 、IDE 算法数据来源于文献[3]且迭代次数为500时的计算结果, IBA 算法数据来源于文献[7], IGSO 算法数据来源于文献[2],BPFPA 算法数据来源于文献[6]; 表7中K-means 、PSO 、ABC 、BA 和IBA 算法数据来源于文献[7]. 从表2可知, IBOA 算法求解效果与IBA 、BPFPA 相当, 但比其余8种算法效果较好; 从表3可知, IBOA 算法与2020 年 第 29 卷 第 10 期计算机系统应用219BPFPA求解效果相当, 但比其余7种算法效果优越许多; 文中的“-”表示未有相关数据. 从表4可知, IBOA的求结果在迭代次数为200时优于IDE和其他算法; 从表5可知, IBOA算法的精度和方差均优于其他算法; 从表6可知, IBOA算法的求解效果差于IDE,与IBA、BPFPA效果相当, 但优于其他算法; 从表7可知, IBOA算法的求解效果与IBA、BPFPA相当, 但优于其他算法. 另外, 图3展示了IBOA算法和BOA算法在Survival数据集的最优解收敛曲线图, 从图3易知, IBOA算法的求解速度和精度较BOA算法高. IBOA求解Iris、Survival、CMC数据集的聚类效果图如图4–图6所示.表2 11种算法在Iris数据集上聚类结果比较算法Best Average Worst StdK-means97.33106.05120.4514.631 GA113.98125.19139.7714.563ACO97.1097.1797.810.367PSO96.8997.2397.890.347HBMO96.7596.9597.750.531IDE97.2297.2297.220IBA96.655596.655596.65550IGSO96.683197.324297.7154—BPFPA96.655596.655596.65558.2e–13BOA131.0493144.2562156.88397.3156IBOA96.655596.655596.6555 4.374e–014表3 10种算法在Wine数据集上聚类结果比较算法Best Average Worst StdK-means16 555.6818 06118 563.12390 GA165316 530.5316 530.530ACO16 530.5316 530.5316 530.530PSO16 345.9716 417.4716 562.3285.497 HBMO16 357.2816 357.2816 357.280IGSO16 30916 34816 376—IDE16 530.5416 530.5416 530.540 BPFPA16 292.184716 292.923016 294.1720.7663 BOA16 604.017016 886.951617 348.4400180.729 IBOA16 292.184716 293.021816 294.1710.7940表4 9种算法在Glass数据集上聚类结果比较算法Best Average Worst StdK-means215.74235.5255.3812.471 GA278.37282.32286.77 4.139ACO269.72273.46280.08 3.585PSO270.57275.71283.52 4.557 HBMO245.73247.71249.54 2.438IGSO215.1349219.4834223.4760—IDE213.20213.23213.310.028BOA428.7888505.3418599.546036.7987 IBOA210.4307218.4789241.28149.0920表5 9种算法在Cancer数据集上聚类结果比较算法Best Average Worst StdK-means2999.193251.213251.59251.140 GA2999.323249.463427.43229.734ACO2970.493046.063242.0190.500PSO2973.503050.043318.88110.801 HBMO2989.943112.423210.78103.471IDE2984.072984.072984.070IBA2964.38692967.82462970.7369 3.1502BOA3307.42273558.33593756.6774113.1327 IBOA 2.9644e+3 2.9644e+3 2.9644e+3 4.6545e–13表6 10种算法在CMC数据集上聚类结果比较算法Best Average Worst StdK-means5842.205893.605934.4047.160 GA5705.635756.605812.6550.369 ACO5701.925819.135912.4345.634PSO5700.995820.965923.2546.960 HBMO5699.275713.985725.3512.690IDE5541.645541.645541.650.001IBA5693.72395693.75125693.79830.0032 BPFPA5693.72395693.72835693.72460.0016 BOA6607.55547160.98927840.6507324.3583 IBOA5693.72395693.72845693.72440.0013表7 8种算法在Survival数据集上聚类结果比较算法Best Average Worst StdK-means2976.94412983.31642988.4278 4.8661PSO2964.38713140.82814728.7901543.0715 ABC2982.82073046.34773190.502848.8843BA2970.73693125.07563179.4228149.2531 IBA2566.98892567.03142567.82480.1765 BPFPA2566.98892567.03072567.82480.1869 BOA2602.04682946.75883083.7954119.7539 IBOA2566.98892567.07242567.82480.2572图3 IBOA与BOA求解Survival数据集函数收敛曲线图4 结论本文将精英策略的思想重新定义蝴蝶优化算法的局部搜索迭代公式且遗传算法相结合提出了一种改进的蝴蝶优化聚类算法, 通过求解1个人工数据集和5个UCI数据库中不同规模的数据, 统计分析结果表明IBOA算法能够避免陷入局部最优, 具有较快的收计算机系统应用2020 年 第 29 卷 第 10 期220敛速度和较强的鲁棒性, 能够有效解决聚类问题且与其他聚类算法相比具有一定优势.4567823451234567属性3属性2属性1图4 IBOA 求解Iris 数据集的聚类效果图304050607080905060700102030405060属性1属性3图5 IBOA 求解Survival 数据集的聚类效果图图6 IBOA 求解CMC 数据集的聚类效果图参考文献罗可, 李莲, 周博翔. 一种蜜蜂交配优化聚类算法. 电子学1报, 2014, 42(12): 2435–2440. [doi: 10.3969/j.issn.0372-2112.2014.12.015]杜明煜, 雷秀娟. 一种改进的求解聚类问题的萤火虫群优化算法. 陕西师范大学学报(自然科学版), 2014, 42(3):20–23.2王勇臻, 陈燕, 张金松. 一种改进的求解聚类问题的差分进化算法. 计算机应用研究, 2016, 33(9): 2630–2633. [doi:10.3969/j.issn.1001-3695.2016.09.014]3杨辉华, 王克, 李灵巧, 等. 基于自适应布谷鸟搜索算法的K-means 聚类算法及其应用. 计算机应用, 2016, 36(8): 2066–2070. [doi: 10.11772/j.issn.1001-9081.2016.08.2066]4沈小云, 衣俊艳. 面向聚类分析的自适应弹性网络算法研究. 计算机工程与应用, 2017, 53(9): 175–183. [doi: 10.3778/j.issn.1002-8331.1611-0316]5Wang R, Zhou YQ, Qiao SL, et al . Flower pollinationalgorithm with bee pollinator for cluster analysis. Information Processing Letters, 2016, 116(1): 1–14. [doi: 10.1016/j.ipl.2015.08.007]6熊珍, 傅秀芬. 求解聚类问题的异构蝙蝠算法. 计算机工程与设计, 2017, 38(3): 677–681, 728.7张新明, 姜云, 刘尚旺, 等. 灰狼与郊狼混合优化算法及其聚类优化. 自动化学报. https:///10.16383/j.aas.c190617.[2020-03-26].8刘志鹏, 胡亚琦, 张卫卫. 自适应细菌觅食的FCM 聚类优化算法研究. 现代电子技术, 2020, 43(6): 144–148.9武森, 何慧霞, 范岩岩. 拓展差异度的高维数据聚类算法. 计算机工程与应用https:///KCMS/detail/11.2127.tp.20200323.1607.004.html . [2020-03-24].10李珍萍, 田宇璇, 卜晓奇, 等. 无人仓系统订单分批问题及K-max 聚类算法. 计算机集成制造系统. /kcms/detail/11.5946.TP.20200320.1423.010.html . [2020-03-20].11Arora S, Singh S. Butterfly optimization algorithm: A novelapproach for global optimization. Soft Computing, 2018,23(3): 715–734.12Wang GG, Deb S, Cui ZH. Monarch butterfly optimization.Neural Computing and Applications, 2019, 31(7): 1995–2014. [doi: 10.1007/s00521-015-1923-y ]13Arora S, Singh S. Butterfly algorithm with Lèvy Flights forglobal optimization. Proceedings of 2015 InternationalConference on Signal Processing, Computing and Control (ISPCC). Waknaghat, India. 2015. 220–224.142020 年 第 29 卷 第 10 期计算机系统应用221。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# include <iostream>
# include <fstream>
# include <string>
# include <ctime>
using namespace std;
#define SAT 3 //每个子句所含变量的个数,即定义N-SAT问题的N
int **arr; //描述SAT问题的二维数组
int Var_Num; //变元个数
int Clause_Num; //子句个数
ifstream fin;
ofstream fout;
void Random(int *v, int *s);
int Proper_Num(int *s);
void Reverse(int *v,int *s, int num);
void Local_Search(double &duration);
void Read_And_Save(int it);
int main()
{
srand(time(NULL));
fout.open("result50-Local_Search_Algorithm.txt");
fout << "#姓名学号" << endl;
double totaltime = 0.0;
for (int i = 1; i <= 10; ++i)
{
double duration=0.0;
Read_And_Save(i);
Local_Search(duration);
totaltime += duration;
}
fout.close();
cout<<"平均时间为: "<< totaltime / 10 <<" 秒 "<<endl;
system("pause");
return 0;
}
//随机生成一个真值指派v,并计算在这个真值指派v下每个子句中满足1的数量,可能值从0-3,存于s中
void Random(int *v, int *s)
{
int temp, i, j, k;
for (i = 0; i < Var_Num;i++)
v[i] = rand() % 2;
memset(s, 0, sizeof(int) * Clause_Num);
for (k = 0; k < Var_Num; k++)
for (i = 0; i < Clause_Num; i++)
for (j = 0; j < SAT; j++)
{
temp = (v[k] == 1) ? (k + 1) : -(k + 1);
if (arr[i][j] == temp)
{
++s[i];
break;
}
}
}
//计算符合的子句数,可能值从0-91
int Proper_Num(int *s)
{
int k = 0;
for (int i = 0; i < Clause_Num; i++)
if (s[i] > 0) ++k;
return k;
}
//尝试对第num位进行翻转
void Reverse(int *v,int *s, int num)
{
int i, j, temp;
int preSatify = Proper_Num(s);
int *offset = new int[Clause_Num];
memset(offset, 0, sizeof(int) * Clause_Num);
for (i = 0; i < Clause_Num; i++) //计算翻转后的可满足子句数量的偏移值for (j = 0;j < SAT;j++)
{
temp = (v[num] == 1) ? (num + 1) : -(num + 1);
if (arr[i][j] == temp)
{
offset[i] = offset[i] - 1;
break;
}
if (arr[i][j] == -temp)
{
offset[i] = offset[i] + 1;
break;
}
}
for (i = 0;i < Clause_Num; i++) //修改生成新的可满足子句
s[i] = s[i] + offset[i];
int newSatify = Proper_Num(s); //计算新的可满足子句个数
if (newSatify > preSatify) //满足子句个数增加则翻转
v[num] = 1 - v[num];
else
for (i = 0; i < Clause_Num; i++) //否则复原可满足子句向量
s[i] = s[i] - offset[i];
delete[] offset;
}
//局部搜索思想求解
void Local_Search(double &duration)
{
int i;
int *sentence = new int[Clause_Num];
int *value = new int[Var_Num];
int tries = 0; //尝试次数
int changenum; //翻转位
double start_time = (double)clock();
Random(value, sentence); //随机生成一组真值指派
while (Proper_Num(sentence) < Clause_Num) //当未使91个子句都满足时...
{
if (tries >= Var_Num * 10) //若尝试次数大于变元数的10倍
{
Random(value, sentence);
tries = 0;
}
changenum = rand() % Var_Num; //随机选一个翻转位
Reverse(value, sentence, changenum); //尝试翻转
++tries;
}
double end_time = (double)clock();
duration =(end_time-start_time)/1000;
fout << "-" << SAT << "-" << Var_Num << "-" << Clause_Num << "-" << duration << endl;
for (i = 0; i < Var_Num; ++i)
fout << value[i];
fout << endl;
for (i = 0; i < Clause_Num;i++)
delete[] arr[i];
delete[] sentence;
delete[] arr;
}
//读取文件并把问题各子句的描述存进二维数组arr
void Read_And_Save(int it)
{
string s;
int i, j, nn;
char sc[20];
fout << "#t" << it << ".txt ";
itoa(it, sc, 10);
string infn = "test\\t" + (string)sc;
infn += ".txt";
fin.open(infn.c_str());
do
fin >> s;
while(s != "cnf");
fin >> Var_Num;
fin >> Clause_Num;
arr = new int*[Clause_Num];
for (i = 0; i < Clause_Num; i++)
{
arr[i] = new int[SAT];
for (j = 0; j < SAT; j++)
fin >> arr[i][j];
fin >> nn;
}
fin.close();
}。