基于人工蜂群算法的线性规划求解matlab程序

news/2024/5/17 17:56:37/文章来源:https://blog.csdn.net/weixin_47365903/article/details/126312788

基于人工蜂群算法的线性规划求解matlab程序

1 人工蜂群算法概述
2005年D. Karaboga教授仿照蜜蜂集群采蜜生物行为,提出了人工蜂群仿生算法,可以有效解决有关函数优化等相关难题。ABC算法仿照蜜蜂蜂群中不同蜂种相互协作,蜂群间进行角色转换的工作方式完成信息之间的传递与分享,不断寻优找到最佳的蜜源。ABC算法结构简单操作容易、参数个数少、且待求解的问题的特殊信息不需要被知晓,只需要计算待求解问题的可行性解的适应度值并通过贪婪算法挑选出较优的食物源。单个蜜蜂在局部范围内搜索优质的解,最终整个群体便会向全局最优解趋近,优化搜索的效率较高,因此近年来广大研究学者将人工蜂群算法应用到各个领域之中。

自然界中蜜蜂与熊猫、仓鼠等独居动物不同,由于单个蜜蜂个体的行为特征十分简单,不能完成复杂的活动,因此蜜蜂常以群居的方式共同生活在一起,蜂群中的各个蜂种协同合作,各司其职,彼此间进行信息交互可以使蜂群具有复杂的行为模式,可以保证当蜂群处于恶劣的环境中时,依旧可以井然有序地搜索到蜜源的位置从而采集到花蜜。
在这里插入图片描述
蜜蜂属于高级的社会性昆虫,蜂群中不同的蜜蜂个体协调合作完成采蜜等社会性行为。当蜜蜂进行采蜜时,一部分工蜂转化为侦查蜂外出搜索食物源,只要发现高品质的蜜源,这些侦查蜂便会转变为采蜜蜂,采蜜后返回蜂巢大本营,通过跳“8”字型舞蹈或者圆圈舞将信息传达给同伴,这种舞蹈称为“摇摆舞”。通过跳摇摆舞可以隐晦地表现出蜜源的一些相关信息,舞蹈的持续时间越长表明该位置的食物源品质越高,摇摆舞与蜂巢之间和与太阳之间的方位关系决定了蜜源的方向。同伴们通过观察多个采蜜蜂带回来的信息并挑选自己认为最好的蜜源,转化为跟随蜂并开始跟随采蜜蜂一起前往蜜源位置进行采蜜,于是整个蜂群便会逐步向最好品质的蜜源位置处前进。以这种方式进行采蜜,蜜蜂之间角色进行相互转换,有序协调合作,可以使蜂群快速地适应环境的改变,当已被收集的蜜源品质逐渐降低或发现有更高质量的蜜源时,侦查蜂可以高效快速地向整个蜂群传达出最及时的蜜源信息,引导整个蜂群高效的采集到花粉数量最多的食物源。
蜜蜂种群采蜜的模型中包含了3种主要的组成部分:食物源、雇佣蜂和非雇佣蜂。

(1)食物源 也称为蜜源,是人工蜂群算法中的研究主体。蜜源的质量由蜜源距离蜂巢的远近程度、蜜源中的花粉数量以及对其进行采蜜的难易水平等多方面共同决定的。在优化问题中食物源也有相应的适应度函数可以对其进行评价。

(2)雇佣蜂 即为引领蜂、采蜜蜂。与食物源位置相对应,雇佣蜂的数量与食物源的数量一致。雇佣蜂的职责是在发现食物源后返回蜂巢,以跳舞的方式将食物源的信息进行分享。

(3)非雇佣蜂 包括跟随蜂和侦查蜂两类蜂种。在蜂巢周边随机检索蜜源的是侦查蜂;跟随蜂留守在蜂巢内通过接收雇佣蜂传递回来的信息寻找蜜源。在蜜蜂个体在进行采蜜过程时,包含了两种行为:招募更多蜜蜂到搜索的蜜源处,放弃经过搜索依旧没有更新的蜜源。为更好的理解两种行为,参照图3-1进行具体的说明。
在这里插入图片描述
2 线性规划算例
2.1算例
在这里插入图片描述
2.2算例答案
在这里插入图片描述

3 人工蜂群优化算法求解结果

1)迭代曲线

在这里插入图片描述
2)求解答案
在这里插入图片描述
4 matlab程序
1)主函数

close all
clc
clear
%%
NP=20; %/* The number of colony size (employed bees+onlooker bees)*/f蜂群大小
FoodNumber=NP/2; %/*The number of food sources equals the half of the colony size*/
limit=100; %/*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/
maxCycle=300; %/*The number of cycles for foraging {a stopping criteria}*/
%/* Problem specific variables*/
objfun='Sphere'; %cost function to be optimized29 / 成本函数有待优化 
D=3; %/*The number of parameters of the problem to be optimized*/要优化的问题的参数数量
ub=ones(1,D)*15; %/*lower bounds of the parameters. */参数的下限
lb=ones(1,D)*0;%/*upper bound of the parameters.*/
runtime=1;%/*Algorithm can be run many times in order to see its robustness*/
GlobalMins=zeros(1,runtime);
for r=1:runtime  
% /*All food sources are initialized */
%/*Variables are initialized in the range [lb,ub]. If each parameter has different range, 
%use arrays lb[j], ub[j] instead of lb and ub */
Range = repmat((ub-lb),[FoodNumber 1]);
Lower = repmat(lb, [FoodNumber 1]);
Foods = rand(FoodNumber,D) .* Range + Lower;
ObjVal=feval(objfun,Foods);
Fitness=calculateFitness(ObjVal);
%reset trial counters
trial=zeros(1,FoodNumber);
%/*The best food source is memorized*/
BestInd=find(ObjVal==min(ObjVal));
BestInd=BestInd(end);
GlobalMin=ObjVal(BestInd);
GlobalParams=Foods(BestInd,:);
iter=1;
while ((iter <= maxCycle))
%% %%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%for i=1:(FoodNumber)        %/*The parameter to be changed is determined randomly*/Param2Change=fix(rand*D)+1;        %/*A randomly chosen solution is used in producing a mutant solution of the solution i*/neighbour=fix(rand*(FoodNumber))+1;       %/*Randomly selected solution must be different from the solution i*/        while(neighbour==i)neighbour=fix(rand*(FoodNumber))+1;end;        sol=Foods(i,:);%  /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;        %  /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/ind=find(sol<lb);sol(ind)=lb(ind);ind=find(sol>ub);sol(ind)=ub(ind);       %evaluate new solutionObjValSol=feval(objfun,sol);FitnessSol=calculateFitness(ObjValSol);        % /*a greedy selection is applied between the current solution i and its mutant*/if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/Foods(i,:)=sol;Fitness(i)=FitnessSol;ObjVal(i)=ObjValSol;trial(i)=0;elsetrial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/end;end;  
%% %%%%%%%%%%%%%%%%%%%%%% CalculateProbabilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
prob=(0.9.*Fitness./max(Fitness))+0.1;  
%% %%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
i=1;
t=0;
while(t<FoodNumber)if(rand<prob(i))t=t+1;%/*The parameter to be changed is determined randomly*/Param2Change=fix(rand*D)+1;        %/*A randomly chosen solution is used in producing a mutant solution of the solution i*/neighbour=fix(rand*(FoodNumber))+1;       %/*Randomly selected solution must be different from the solution i*/        while(neighbour==i)neighbour=fix(rand*(FoodNumber))+1;end;        sol=Foods(i,:);%  /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;        %  /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/ind=find(sol<lb);sol(ind)=lb(ind);ind=find(sol>ub);sol(ind)=ub(ind);        %evaluate new solutionObjValSol=feval(objfun,sol);FitnessSol=calculateFitness(ObjValSol);        % /*a greedy selection is applied between the current solution i and its mutant*/if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/Foods(i,:)=sol;Fitness(i)=FitnessSol;ObjVal(i)=ObjValSol;trial(i)=0;elsetrial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/end;end;    i=i+1;if (i==(FoodNumber)+1) i=1;end;   
end; 
%/*The best food source is memorized*/ind=find(ObjVal==min(ObjVal));ind=ind(end);if (ObjVal(ind)<GlobalMin)GlobalMin=ObjVal(ind);GlobalParams=Foods(ind,:);end;      %% %%%%%%%%%% SCOUT BEE PHASE 侦查蜂阶段%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ind=find(trial==max(trial));
ind=ind(end);
if (trial(ind)>limit)trial(ind)=0;sol=(ub-lb).*rand(1,D)+lb;ObjValSol=feval(objfun,sol);FitnessSol=calculateFitness(ObjValSol);Foods(ind,:)=sol;Fitness(ind)=FitnessSol;ObjVal(ind)=ObjValSol;
end;
BestCost(iter)=GlobalMin;
fprintf('iter=%d,ObjVal=%g\n',iter,GlobalMin);plot(BestCost(1:iter));xlabel('迭代次数');ylabel('适应度');drawnow 
iter=iter+1;
end % End of ABC
GlobalMins(r)=GlobalMin;
end %end of runs
%% 
disp('输出结果')
disp('最优变量')
sol
disp('最优值')
GlobalMin
。。。。。略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_227300.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同类型的 SSL 证书解释

了解不同类型的 SSL 证书&#xff1a;扩展验证 (EV)、组织验证 (OV) 和域名验证 (DV)。 查看用例及更多。 SSL/TLS 证书用于验证网站的身份并在服务器和浏览器之间创建安全连接。有许多不同类型的 SSL 证书选项可用&#xff0c;它们都有其独特的用例和价值主张。证书颁发机构 …

电磁仿真设计RMxprt-6p72s电励磁凸极同步电机分析案例

作者 | 电机设计青年 仿真秀专栏作者 导读&#xff1a;大家好&#xff0c;我是仿真秀专栏作者——电机设计青年&#xff0c;曾担任ANSYS低频电磁工程师一职&#xff0c;后入职电机企业&#xff0c;一直从事电机产品研发工作。研究的电机类型涉及电励磁同步电机、永磁同步电机、…

MIT发现语言模型内的事实知识可被修改??

文 | 小伟前言众所周知&#xff0c;自回归语言模型(如GPT-2)里存储着大量的事实知识&#xff0c;比如语言模型可以正确的预测出埃菲尔铁塔所在的城市是巴黎市。那么语言模型是在什么地方存储这些知识呢&#xff1f;我们是否可以修改存储在语言模型里的知识呢&#xff1f;来自于…

R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例

全文下载链接&#xff1a;http://tecdat.cn/?p21317本文提供了运行分布滞后非线性模型的示例&#xff0c;同时描述了预测变量和结果之间的非线性和滞后效应&#xff0c;这种相互关系被定义为暴露-滞后-反应关联&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。…

[附源码]计算机毕业设计springboot本地助农产品销售系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

小程序上新(2022.11.15~11.28)

20221115 小程序基础库 2.27.3 更新 更新 框架 设备 VoIP 能力授权更新 框架 支持 worker 代码打包到小程序&小游戏分包 详情更新 组件 scroll-view 接近全屏尺寸时默认开启点击回到顶部更新 API createVKSession 在不需要用到摄像头的时候不再发起摄像头授权 详情修复 框…

【笔试强训】Day 4

&#x1f308;欢迎来到笔试强训专栏 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x…

王道考研——操作系统(第三章 内存管理)

一、内存的基础知识 什么是内存&#xff1f;有何作用&#xff1f; 这么做的原因是&#xff0c;程序本来是放在外存中的&#xff0c;放在磁盘中的&#xff0c;但是磁盘的读写速度很慢&#xff0c;而cpu的处理速度又很快 存储单元就是存放数据的最小单元&#xff0c;每一个地址…

NetCore路由的Endpoint模式

IdentityServer里有各种Endpoint,如TokenEndpoint,UserInfoEndpoint,Authorize Endpoint,Discovery Endpoint等等。Endpoint从字面意思来看是“终端节点"或者“终节点”的意思。无独有偶NetCore的路由也有Endpoint的概念。那么我们提出一个问题来&#xff0c;究竟什么是En…

不用ps怎么修改图片?电脑图片在线处理的方法

很多小伙伴在工作、学习的时候会用到简单的图片处理工具&#xff08;在线ps 图片编辑制作工具 免费照片编辑器_压缩图&#xff09;&#xff0c;但是因为用到的功能比较多&#xff0c;需要下载安装很多电脑处理图片软件&#xff0c;非常不方便&#xff0c;而且上手比较难。下面就…

Windows OpenGL ES 图像色彩替换

目录 一.OpenGL ES 图像色彩替换 1.原始图片2.效果演示 二.OpenGL ES 图像色彩替换源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 …

代码调优?从Fibonacci数列的7种写法说起,看完coding能力上一个台阶

开启掘金成长之旅&#xff01;这是我参与「掘金日新计划 12 月更文挑战」的第2天&#xff0c;点击查看活动详情 引子 楼梯有 N阶&#xff0c;上楼可以一步上一阶&#xff0c;也可以一步上二阶。 编一个程序&#xff0c;计算共有多少种不同的走法。 例&#xff1a; 0层&…

【微信小程序高频面试题——精选一】

微信小程序高频面试题小程序中如何进行接口请求&#xff1f;会不会跨域&#xff0c;为什么小程序的常用命令有哪些你认为微信小程序的优点是什么&#xff0c;缺点是什么微信小程序中的js和浏览器中的js以及node中的js的区别微信小程序中的数据渲染浏览器中有什么不同小程序中如…

FineReport表格软件- 计算操作符说明

1. 概述 FineReport 中使用函数需要用到很多的操作符。 操作符不仅包含很多运算符&#xff0c;还包括一些报表特有的操作符。 FineReport 11.0 优化了公式 2. 运算符类型 运算符用于指定要对公式中的元素执行的计算类型。有默认计算顺序&#xff0c;但可以使用括号更改此顺序…

python如何将日期字符串格式化年月日

今天用Python的DataFrame处理数据时&#xff0c;相对一波数据按日期分组处理&#xff0c;但是原始数据包含时间分秒&#xff0c;无法按日期分组&#xff0c;因此需要先将数据转成只包含年月日的数据格式。但是写代码处理过程中发现有点绕&#xff0c;不熟悉的同学容易绕晕。这种…

数据库——数据库备份与恢复

目录 原因&#xff1a; 数据库的备份与恢复&#xff1a; 1、使用MySQLdump命令备份 2、恢复数据库 表的导入和导出 1、表的导出 2、表的导入 原因&#xff1a; 尽管采取了一些管理措施来保证数据库的安全&#xff0c;但是不确定的意外情况总是有可能造成数据的损失&#xff0c;…

【学习笔记60】JavaScript原型链的理解

一、万物皆对象 JS中, 万物都可以都可以称为对象 1、对象概念 含义1: 一种数据格式 {key: value, key2: value2}含义2: 某一类事务的实例(某一类内容中的真实个体) 2、说明 arr1就是Array这一类内容中的某一个真实个体数组也可以算作一个对象(Array 这一类事务中的一个个体) …

NoSQL数据库之MongoDB

一、NoSQL数据库背景 传统关系型数据库遇到的问题 2008 年左右&#xff0c;网站 、 论坛、社交网络开始高速发展&#xff0c;传统的关系型数据库在存储及处理数据的时候受到了很大的挑战 &#xff0c;其中主要体现在以下几点&#xff1a; 难以应付每秒上万次的高并发数据写入…

文献认证!Kamiya艾美捷抗酒石酸酸性磷酸酶TRAP染色试剂盒

人类及动物体骨组织不断地进行着重建&#xff0c;骨重建过程包括骨的分解吸收与新骨的形成。破骨细胞&#xff08;Osteoclast&#xff0c;OC&#xff09;负责骨分解与吸收&#xff0c;而成骨细胞&#xff08;osteoblast&#xff0c;OB&#xff09;负责新骨形成。破骨细胞贴附在…

Native 内存warp

Native 启动-动态/静态&libc &linker https://www.cnblogs.com/ilocker/p/4645308.html https://www.cnblogs.com/ilocker/p/4645308.html 修改LD_PRELOAD hook java native 库函数 https://blog.csdn.net/m0_57036414/article/details/126811772 Native malloc_debug …