基于变色龙算法的线性规划问题求解matlab程序
基于变色龙算法的线性规划问题求解matlab程序
1 变色龙算法
变色龙是爬行动物,是非常奇特的动物,它有适于树栖生活的种种特征和行为。避役的体长约15-25厘米,身体侧扁,背部有脊椎,头上的枕部有钝三角形突起。四肢很长,指和趾合并分为相对的两组,前肢前三指形成内组,四、五指形成外组;后肢一、二趾形成内组,奇特三趾形成外组,这样的特征非常适于握住树枝。它的尾巴长,能缠卷树枝。它有很长很灵敏的舌,伸出来要超过它的体长,舌尖上有腺体,能分泌大量粘液粘住昆虫。它一双眼睛十分奇特,眼帘很厚,呈环形,两只眼球突出,左右180度,上下左右转动自如,左右眼可以各自单独活动,不协调一致,这种现象在动物中是罕见的。双眼各自分工前后注视,既有利于捕食,又能及时发现后面的敌害。变色龙用长舌捕食是闪电式的,只需1/25秒便可以完成,而且它们的舌头的长度是自己身体的2倍。在树上一走一停的动作使天敌误以为是被风吹动的树叶。
变色龙算法(CSA)是一种仿生算法,在数学上模拟并实现了变色龙狩猎的行为步骤,包括搜索食物,眼睛360°旋转追踪食物及使用自身舌头定位并抓住猎物的行为。变色龙算法可以很好的运用在实际问题当中并取得好的表现。SAID等将CSA用于经济负荷调度问题的优化,并与其他算法进行了比较,仿真显示CSA计算结果更优。RIZK等设计了一种改进变色龙群算法,从而提取SOFC模型的可靠和精确参数。CSA对各类问题具有很强的计算能力和适应力。
2 算例
3 程序求解结果
4 程序
1)主程序
%% 基于变色龙算法的线性规划问题求解clear
close all
clc
%% % Prepare the problem
dim = 3;
ub = 15*ones(1, dim);
lb = 0*ones(1, dim);
fobj = @Objfun;%% % CSA parameters
noP = 500;
maxIter = 50;
[bestFitness, bestPosition, CSAConvCurve] =Chameleon(noP,maxIter,lb,ub,dim,fobj);
disp(['最优解为:', num2str(bestFitness)]);
disp(['最优变量为:', num2str(bestPosition)]);
2)子程序
%% Chameleon Swarm Algorithm (CSA) source codes version 1.0
%
% Developed in MATLAB R2018a
%
% Author and programmer: Malik Braik
%
% e-Mail: m_fjo@yahoo.com
% mbraik@bau.edu.au
%% Main paper:
% Malik Sh. Braik,
% Chameleon Swarm Algorithm: A Bio-inspired Optimizer for Solving Engineering Design Problems
% Expert Systems with Applications
% DOI: https://doi.org/10.1016/j.eswa.2021.114685
%____________________________________________________________________________________function [fmin0,gPosition,cg_curve]=Chameleon(searchAgents,iteMax,lb,ub,dim,fobj)%%%%* 1
if size(ub,2)==1ub=ones(1,dim)*ub;lb=ones(1,dim)*lb;
end% if size(ub,1)==1
% ub=ones(dim,1)*ub;
% lb=ones(dim,1)*lb;
% end%% Convergence curve
cg_curve=zeros(1,iteMax);
%
% f1 = figure (1);
% set(gcf,'color','w');
% hold on
% xlabel('Iteration','interpreter','latex','FontName','Times','fontsize',10)
% ylabel('fitness value','interpreter','latex','FontName','Times','fontsize',10);
% grid;%% Initial populationchameleonPositions=initialization(searchAgents,dim,ub,lb);% Generation of initial solutions %% Evaluate the fitness of the initial populationfit=zeros(searchAgents,1);for i=1:searchAgentsfit(i,1)=fobj(chameleonPositions(i,:));
end%% Initalize the parameters of CSA
fitness=fit; % Initial fitness of the random positions[fmin0,index]=min(fit);chameleonBestPosition = chameleonPositions; % Best position initialization
gPosition = chameleonPositions(index,:); % initial global positionv=0.1*chameleonBestPosition;% initial velocityv0=0.0*v;%% Start CSA
% Main parameters of CSA
rho=1.0;
p1=2.0;
p2=2.0;
c1=2.0;
c2=1.80;
gamma=2.0;
alpha = 4.0;
beta=3.0; %% Start CSA
for t=1:iteMax
a = 2590*(1-exp(-log(t)));
omega=(1-(t/iteMax))^(rho*sqrt(t/iteMax)) ;
p1 = 2* exp(-2*(t/iteMax)^2); %
p2 = 2/(1+exp((-t+iteMax/2)/100)) ;mu= gamma*exp(-(alpha*t/iteMax)^beta) ;ch=ceil(searchAgents*rand(1,searchAgents));
%% Update the position of CSA (Exploration)
for i=1:searchAgents if rand>=0.1chameleonPositions(i,:)= chameleonPositions(i,:)+ p1*(chameleonBestPosition(ch(i),:)-chameleonPositions(i,:))*rand()+... + p2*(gPosition -chameleonPositions(i,:))*rand();else for j=1:dimchameleonPositions(i,j)= gPosition(j)+mu*((ub(j)-lb(j))*rand+lb(j))*sign(rand-0.50) ;end end
end %% Rotation of the chameleons - Update the position of CSA (Exploitation)%%% Rotation 180 degrees in both direction or 180 in each direction
% % [chameleonPositions] = rotation(chameleonPositions, searchAgents, dim);%% % Chameleon velocity updates and find a food sourcefor i=1:searchAgentsv(i,:)= omega*v(i,:)+ p1*(chameleonBestPosition(i,:)-chameleonPositions(i,:))*rand +.... + p2*(gPosition-chameleonPositions(i,:))*rand; chameleonPositions(i,:)=chameleonPositions(i,:)+(v(i,:).^2 - v0(i,:).^2)/(2*a);endv0=v;%% handling boundary violationsfor i=1:searchAgentsif chameleonPositions(i,:)<lbchameleonPositions(i,:)=lb;elseif chameleonPositions(i,:)>ubchameleonPositions(i,:)=ub;endend%% Relocation of chameleon positions (Randomization)
for i=1:searchAgentsub_=sign(chameleonPositions(i,:)-ub)>0; lb_=sign(chameleonPositions(i,:)-lb)<0;chameleonPositions(i,:)=(chameleonPositions(i,:).*(~xor(lb_,ub_)))+ub.*ub_+lb.*lb_; %%%%%*2fit(i,1)=fobj (chameleonPositions(i,:)) ;if fit(i)<fitness(i)chameleonBestPosition(i,:) = chameleonPositions(i,:); % Update the best positions fitness(i)=fit(i); % Update the fitnessendend%% Evaluate the new positions[fmin,index]=min(fitness); % finding out the best positions % Updating gPosition and best fitness
if fmin < fmin0gPosition = chameleonBestPosition(index,:); % Update the global best positionsfmin0 = fmin;
end%% Print the results
% outmsg = ['Iteration# ', num2str(t) , ' Fitness= ' , num2str(fmin0)];
% disp(outmsg);%% Visualize the resultscg_curve(t)=fmin0; % Best found value until iteration t% if t>2
% set(0, 'CurrentFigure', f1)
%
% line([t-1 t], [cg_curve(t-1) cg_curve(t)],'Color','b');
% title({'Convergence characteristic curve'},'interpreter','latex','FontName','Times','fontsize',12);
% xlabel('Iteration');
% ylabel('Best score obtained so far');
% drawnow
% end
endngPosition=find(fitness== min(fitness));
g_best=chameleonBestPosition(ngPosition(1),:); % Solutin of the problem
fmin0 =fobj(g_best);end
。。。。。。略
基于变色龙算法的线性规划问题求解matlab程序相关推荐
- 基于鲸鱼算法的线性规划问题求解matlab程序
基于鲸鱼算法的线性规划问题求解matlab程序 1 鲸鱼算法 座头鲸有特殊的捕猎方法,这种觅食行为被称为泡泡网觅食法:标准 WOA 模拟了座头鲸特有的搜索方法和围捕机制,主要包括:围捕猎物.气泡网捕食 ...
- 基于杂草优化算法的线性规划问题求解matlab程序
基于杂草优化算法的线性规划问题求解matlab程序 1 杂草算法简介 1.1 IWO定义 IWO是2006年由A. R. Mehrabian等提出的一种从自然界杂草进化原理演化而来的随机搜索算法,模仿 ...
- 基于人工蜂群算法的线性规划求解matlab程序
基于人工蜂群算法的线性规划求解matlab程序 1 人工蜂群算法概述 2005年D. Karaboga教授仿照蜜蜂集群采蜜生物行为,提出了人工蜂群仿生算法,可以有效解决有关函数优化等相关难题.ABC算 ...
- 基于沙猫群优化算法的线性规划求解matlab程序
基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫,俗名沙漠猫,与荒漠猫名字相似,但却是两种不同的猫科动物.沙猫生活在茫茫沙漠里,主要分布在分布于非洲北部,阿 ...
- 博弈论matlab程序,基于博弈论的频谱分配的matlab程序
<基于博弈论的频谱分配的matlab程序>由会员分享,可在线阅读,更多相关<基于博弈论的频谱分配的matlab程序(5页珍藏版)>请在人人文库网上搜索. 1.是认知无线电场景下 ...
- 混合算法的图像去噪的matlab程序(主要讲述小波+NL-means的图像去噪)
一.小波滤波: 随着小波理论的日益完善,其以自身良好的时频特性在图像去噪领域受到越来越多的关注,开辟了用非线性方法去噪的先河.具体来说,小波能够去噪主要得益于小波变换有如下特点: (1)低熵性.小波系 ...
- 基于注水算法的MIMO信道容量matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 MIMO无线通信技术源于天线分集与智能天线技术,具有二者的优越性,MIMO系统的发射端与接收端都采用 ...
- 蚁群算法求解TSP问题 matlab程序
https://blog.csdn.net/wayjj/article/details/72809344 蚁群算法,单单学习算法还是不够深入了解,得实际编程实现了,理解才能更加透彻,本文根据这篇博文贴 ...
- 【优化调度】基于鸟群算法求解车间调度问题Matlab源码
1 简介 柔性作业车间调度问题是生产调度领域中非常重要的一类带约束优化问题.根据其求解特性,提出一种基于鸟群算法求解以最小化最大完工时间为目标的柔性作业车间调度问题的方法 2 部分代码 clc;cle ...
最新文章
- 让英文版windows 8支持非Unicode程序的语言方法
- 无序数组求第k大的数 python_整数无序数组求第K大数
- 06-BCD计数器设计与应用——小梅哥FPGA设计思想与验证方法视频教程配套文档
- 永远和靠谱的人在一起!
- JDK开发WebService
- 调用wsdl的接口-用axis
- axis wsdl2java_AXIS1.4 客户端 wsdl2java 使用方法
- nbu备份本机oracle,大话nbu九(nbu异机备份恢复oracle)
- FileUtils工具类学习
- GIS招聘 | 江西省直事业单位(含测绘、地信等专业岗位)
- 学位认证上‘学位网’办理即可
- strtol()函数介绍
- 有涨有跌!上交/中大/吉大/同济/西交/华南理工纷纷公布计算机考研校线
- linux day1
- win10 JDK17安装及环境变量配置
- 搞笑的哈佛大学精神病测试题
- mit6.828实验环境配置步骤
- 多人在线屏幕分享工具-join me
- JavaScript-BOM
- 【集合论】序关系 ( 链 | 反链 | 链与反链示例 | 链与反链定理 | 链与反链推论 | 良序关系 )