基于利用免疫算法求解多元函数最值问题

                                                                 前言

人们常常说的函数y=f(x),是因变量与一个自变量之间的关系,即因变量的值只依赖于一个自变量,称为一元函数但在许多实际问题中往往需要研究因变量与几个自变量之间的关系,因变量的值依赖于几个自变量苏教版普通高中课程标准实验教科书必修5第三章《二元一次不等式组与简单的线性规划》一节就是典型的多元函数问题不等式一章的内容比较少,相对于前几年的高考而言,笔者斗胆就多元函数的最值(范围)求解和多变量不等式证明的常见解法作一些不成熟的归纳函数的最值是函数这一章节中很重要的部分,它的重要性不仅表现在题型多样、方法的灵活上,更主要的是其在实际生活及生产实践中的应用高考应用题几乎都与最值问题有关,而基本不等式是解决此类实际问题的有力工具本文着重就基本不等式在求最值中的应用与完善谈一些个人的体会只有扎实地掌握好基本不等式求最值的基本技能与注意事项,才能更好地去解决实际应用问题

                                                                  目录

  第一章 概述 4

1.1 目的 4

1.2 要求 4

1.3 开发环境 4

第二章 算法简介 5

2.1 免疫算法 6

第三章 测试函数 7

第四章 求解 8

附录程序..........................................................................................................19

参考文献

第一章 概述

  1. 目的

1.可以使我们了解到一些先进的算法知识,提升我们的利用算法解决问题的能力。

2.培养我们的创新能力和创新思维。学我们可以根据指导书和相关文献上的参考算法,自己设计出相应算法的应用程序,并且利用这些算法程序解决实际问题。

3.通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。

4.可以提升我们的编程能力和解决数学问题的能力,扩展我们的数学思维能力。

1.2 要求

1.提供关键但不是全部的源程序。

2.每个人自由选择测试函数,但不要和别人完全重复。

3.在自己力所能及的情况下,绘制不同算法针对不同测试函数的收敛曲线。

4.成科技小论文的形式,要求有题目、摘要、关键词、前言、算法原理、测试函数、实验(测试)结果、结论、参考文献等组成,字数不少于3000字。

1.3 开发环境

在求解这些多元函数的最小值的过程中,我使用了MATLAB进行求

  • 算法简介

2.1免疫算法

免疫算法的算子包括:亲和度评价算子、抗体浓度评价算子、激励度计算算子、免疫选择算子、克隆算子、变异算子、克隆抑制算子和种群刷新算子等。由于算法的编码方式可能为实数编码、离散编码等,不同编码方式下的算法算子也会有所不同。

目前还没有统一的免疫算法及框图,下面介绍一种含有以上免疫算子的算法流程,分为以下几个步骤:

首先进行抗原识别,即理解待优化的问题,对问题进行可行性分析,提取先验知识,构造出合适的亲和度函数,并制定各种约束条件。

(2)然后产生初始抗体群,通过编码把问题的可行解表示成解空间中的抗体,在解的空间内随机产生一个初始种群。

(3)对种群中的每一个可行解进行亲和度评价。

(4)判断是否满足算法终止条件:如果满足条件则终止算法寻优过程,输出计算结果;否则继续寻优运算。

(5)计算抗体浓度和激励度。

(6)进行免疫处理,包括免疫选择、克隆、变异和克隆抑制。

免疫选择: 根据种群中抗体的亲和度和浓度计算结果选择优质抗体,使其活化;

克隆: 对活化的抗体进行克隆复制,得到若干副本;

变异: 对克隆得到的副本进行变异操作,使其发生亲和度突变;

克隆抑制: 对变异结果进行再选择,抑制亲和度低的抗体,保留亲和度高的 变异结果。

(7)种群刷新,以随机生成的新抗体替代种群中激励度较低的抗

  • 求解

4.1初化免疫个体维数为 D ,免疫种群个体数为 N P ,最大免疫代数为 G ,变异概率为 P m ,激励度系数为 α , β相似度阈值为 δ ,克隆个数为 N c l 。

(2)随机产生初始种群,计算个体亲和度、抗体浓度和激励度,并按激励度排序。

(3)取激励度前 N P / 2 NP/2 NP/2 个个体进行克隆、变异、克隆抑制的免疫操作,免疫后的种群进行激励度计算。

(4)随机生成 N P / 2 NP/2 NP/2 个个体的新种群,并计算个体亲和度、抗体浓度和激励度;免疫种群和随机种群合并,按激励度排序,进行免疫迭代。

(5)判断是否满足终止条件:若满足,则结束搜索过程,输出优化值;若不满足,则继续进行迭代优化。

免疫算法主要程序:

  1. 关于二元函数的算法程序

5)figureplot(trac

xlabel('迭代次数')clear all;

clc;

figure

[x,y]=meshgrid(-2:0.01:2,-2:0.01:2);

z=(1+((x+y+1).^2).*(19-14.*x+3.*x.^2-14.*y+6.*x.*y+3.*y.^2)).*(30+(2.*x-3.*y).^2.*(18-32.*x+12.*x.^2+48.*y-36.*x.*y+27.*y.^2));

mesh(x,y,z)

xlabel('x')

ylabel('y')hold on%初始化

D=2;                                  %免疫个体维数

NP=50;                                %免疫个体数目

Xs=4;                                 %上限

Xx=-4;                                %下限

G=50;                                %最大免疫代数

pm=0.7;                               %变异概率

alfa=2;                               %激励度参数

belta=1;                              %激励度参数

detas=0.2;                            %相似度阈值

gen=0;                                %免疫代数

Nc1=5;                                %克隆个数

deta0=0.5*Xs;                         %邻域范围初值%初始种群

f=rand(D,NP)*(Xs-Xx)+Xx;for np=1:NP

MSLL(np)=fun(f(:,np));end%计算个体浓度和激励度for np=1:NP

for j=1:NP

nd(j)=sum(sqrt((f(:,np)-f(:,j)).^2));

if nd(j)<detas

nd(j)=1;

else

nd(j)=0;

end

end

ND(np)=sum(nd)/NP;end

MSLL=alfa*MSLL-belta*ND;%激励度按升序排列

[SortMSLL,Index]=sort(MSLL);

Sortf=f(:,Index);%免疫循环while gen<G

for i=1:NP/2

a=Sortf(:,i);

Na=repmat(a,1,Nc1);

deta=deta0/gen;

for j=1:Nc1

for ii=1:D

if rand<pm

Na(ii,j)=Na(ii,j)+(rand-0.5)*deta;

end

%边界条件处理

if (Na(ii,j)>Xs)||(Na(ii,j)<Xx)

Na(ii,j)=rand*(Xs-Xx)+Xx;

end

end

end

Na(:,1)=Sortf(:,i);%保留克隆源个体

%克隆抑制,保留亲和度最高的个体

for j=1:Nc1

NaMSLL=fun(Na(:,j));

end

[NaSortMSLL,Index]=sort(NaMSLL);

aMSLL(i)=NaSortMSLL(1);

NaSortf=Na(:,Index);

af(:,i)=NaSortf(:,1);

end

%免疫种群激励度

for np=1:NP/2

for j=1:NP/2

nda(j)=sum(sqrt((af(:,np)-af(:,j)).^2));

if nda(j)<detas

nda(j)=1;

else

nda(j)=0;

end

end

aND(np)=sum(nda)/NP/2;

end

aMSLL=alfa*aMSLL-belta*aND;

%总群刷新

bf=rand(D,NP/2)*(Xs-Xx)+Xx;

for np=1:NP/2

bMSLL(np)=fun(bf(:,np));

end

%生成新的种群激励度

for np=1:NP/2

for j=1:NP/2

ndc(j)=sum(sqrt((bf(:,np)-bf(:,j)).^2));

if ndc(j)<detas

ndc(j)=1;

else

ndc(j)=0;

end

end

bND=sum(ndc)/NP/2;

end

bMSLL=alfa*bMSLL-belta*bND;

%免疫种群与新生种群合并

f1=[af,bf];

MSLL=[aMSLL,bMSLL];

[SortfMSLL,Index]=sort(MSLL);

Sortf=f1(:,Index);

gen=gen+1;

trace(gen)=fun(Sortf(:,1));end

%输出优化结果

Bestf=Sortf(:,1);

trace(end);disp('最优值为:')disp(trace(end))disp('最优个体为:')disp(Bestf)plot3(Bestf(1), Bestf(2), trace(end),'bo','linewidth',1.

ylabel('目标函数值')

title('亲和度进化曲线')%亲和度函数

%目标函数function v=fun(x)

v=((1+(x(1)+x(2)+1).^2).*(19-14.*x(1)+3.*x(1).^2-14.*x(2)+6.*x(1).*x(2)+3.*x(2).^2)).*(30+(2.*x(1)-3.*x(2)).^2.*(18-32.*x(1)+12.*x(1).^2+48.*x(2)-36.*x(1).*x(2)+27.*x(2).^2));end

  1. 关于一元函数求和的算法程序

for np=clear all; %清除所有变量

close all; %清图

clc; %清屏

D=10; %免疫个体维数

NP=100; %免疫个体数目

Xs=20; %取值上限

G=500; %最大免疫代数

Xx=-20; %取值下限

pm=0.7; %变异概率

alfa=1; %激励度系数

belta=1; %激励度系数

detas=0.2; %相似度阈值

gen=0; %免疫代数

Ncl=10; %克隆个数

deta0=1*Xs; %邻域范围初值

%初始种群

f=rand(D,NP)*(Xs-Xx)+Xx;

for np=1:NP

MSLL(np)=func1(f(:,np));

end

%计算个体浓度和激励度

for np=1:NP

for j=1:NP

nd(j)=sum(sqrt((f(:,np)-f(:,j)).^2));

if nd(j)<detas

nd(j)=1;

else

nd(j)=0;

end

end

ND(np)=sum(nd)/NP;

end

MSLL=alfa*MSLL-belta*ND;

%激励度按升序排列

[SortMSLL,Index]=sort(MSLL);

Sortf=f(:,Index);

%免疫循环

while gen<G

for i=1:NP/2

%选激励度前NP/2个个体进行免疫操作

a=Sortf(:,i);

Na=repmat(a,1,Ncl);

deta=deta0/gen;

for j=1:Ncl;

for ii=1:D

%变异

if rand<pm

Na(ii,j)=Na(ii,j)+(rand-0.5)*deta;

end

%边界条件处理

if(Na(ii,j)>Xs)|(Na(ii,j)<Xx)

Na(ii,j)=rand*(Xs-Xx)+Xx;

end

end

end

Na(:,1)=Sortf(:,i);    %保留克隆源个体

%克隆抑制,保留亲和度最高的个体

for j=1:Ncl

NaMSLL(j)=func1(Na(:,j));

end

[NaSortMSLL,Index]=sort(NaMSLL);

aMSLL(i)=NaSortMSLL(1);

NaSortf=Na(:,Index);

af(:,i)=NaSortf(:,1);

end

%免疫种群激励度

1:NP/2

for j=1:NP/2

nda(j)=sum(sqrt((af(:,np)-af(:,j)).^2));

if nda(j)<detas

nda(j)=1;

else

nda(j)=0;

end

end

aND(np)=sum(nda)/NP/2;

end

aMSLL=alfa*aMSLL-belta*aND;

%种群刷新

bf=rand(D,NP/2)*(Xs-Xx)+Xx;

for np=1:NP/2

bMSLL(np)=func1(bf(:,np));

end

%新生种群激励度

for np=1:NP/2

for j=1:NP/2

ndc(j)=sum(sqrt((bf(:,np)-bf(:,j)).^2));

if ndc(j)<detas

ndc(j)=1;

else

ndc(j)=0;

end

end

bND(np)=sum(ndc)/NP/2;

end

bMSLL=alfa*bMSLL-belta*bND;

%免疫种群和新生种群合并

f1=[af,bf];

MSLL1=[aMSLL,bMSLL];

[SortMSLL,Index]=sort(MSLL1);

Sortf=f1(:,Index);

gen=gen+1;

trace(gen)=func1(Sortf(:,1));

end

%输出最优结果

Bestf=Sortf(:,1);   %最优变量

trace(end);         %最优值

figure,plot(trace);

xlabel('迭代次数');

ylabel('目标函数值');

title('亲和度进化曲线');

%亲和度函数

function result=func1(x);

summ=sum(x.^2);

result=summ;

end

参考文献:刘好斌,王浚岭.互补问题的几种可行内点算法的计算机实现[J].三峡大学学报(自然科学版),2007,(4).374-378.doi:10.3969/j.issn.1672-948X.2007.04.023.

[2]黄文华,王仁明.用遗传算法求解全系数模糊证券投资组合模型[J].三峡大学学报(自然科学版),2006,(2).189-192.doi:10.3969/j.issn.1672-948X.2006.02.024.

[3]陈丽安,张培铭.免疫遗传算法在MATLAB环境中的实现[J].福州大学学报(自然科学版),2004,(5).554-559.

[4]殷铭,张兴华,戴先中.基于MATLAB的遗传算法实现[J].电子技术应用,2000,(1).9-11.doi:10.3969/j.issn.0258-7998.2000.01.003.

[5]储理才.基于MATLAB的遗传算法程序设计及TSP问题求解[J].集美大学学报(自然科学版),2001,(1).14-19.

[6]吕岗.免疫算法及其应用研究[D].中国矿业大学,2003.82页.

免疫算法求解多元函数论文相关推荐

  1. 货物配送问题的matlab,免疫算法求解配送中心选址问题matlab代码

    免疫算法求解配送中心选址问题matlab代码 所属分类:matlab例程 开发工具:matlab 文件大小:31KB 下载次数:3 上传日期:2020-12-01 16:11:00 上 传 者:代码大 ...

  2. 粒子群算法求解多元函数最值问题

    粒子群算法求解多元函数最值问题 一.简介 多元函数极值&最值问题通常使用导数/偏导数进行推导,这里尝试使用启发式算法进行求解近似最优解.选用粒子群算法进行求解,粒子群算法模仿鸟群觅食行为,核心 ...

  3. 【故障检测问题】基于matlab免疫算法求解故障检测问题【含Matlab源码 196期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[故障检测问题]基于matlab免疫算法求解故障检测问题[含Matlab源码 196期] 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭 ...

  4. 【优化布局】基于免疫算法求解充电站最优布局matlab代码

    1 简介 为了普及电动汽车,以缓解我国日益严重的环境能源问题,本文研究电动汽车充换电站的选址方法,旨在利用提高电动汽车充电设施的覆盖范围,加快电动汽车的普及发展.本文建立人们日常出行模型,模拟电动汽车 ...

  5. 【物流选址】基于matlab免疫算法求解物流选址问题【含Matlab源码 020期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[物流选址]基于matlab免疫算法求解物流选址问题[含Matlab源码 020期] 获取代码方式2: 付费专栏Matlab路径规划(初级版 ...

  6. 【IA TSP】基于matlab免疫算法求解旅行商问题【含Matlab源码 195期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[旅行商问题]基于matlab免疫算法求解旅行商问题[含Matlab源码 195期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  7. 【优化布局】基于matlab免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  8. 【优化布局】免疫算法求解充电站最优布局【含Matlab源码 2539期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[生产调度]基于matlab免疫算法求解生产调度零等待问题[含Matlab源码 1178期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  9. 离散免疫算法求解旅行商问题(源码实现)

    旅行商问题     旅行商问题(TSP 问题).假设有一个旅行商人要拜访全国31个省会城市,他需要选择所要走的路径,路径的限制是每个城市只能拜访-一次, 而且最后要回到原来出发的城市.路径的选择要求是 ...

最新文章

  1. java中运用label跳转
  2. PyTorch 源码解读之即时编译篇
  3. 计算机教研活动心得体会,信息技术研修教研活动总结
  4. TCP/IP协议是什么
  5. bzoj千题计划241:bzoj3864: Hero meet devil
  6. C++ 对象的初始化和清理
  7. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程
  8. 【LeetCode】剑指 Offer 22. 链表中倒数第k个节点
  9. STM32F103ZET6 GPIO的使用
  10. Gatling性能测试(一)
  11. 基于最大堆实现最大优先队列【代码】
  12. 数电基础-数字电路芯片种类
  13. DSP6678入门必看
  14. Unity3D 运用GL屏幕画图(阴阳师画符)
  15. python获取摄像头型号,python3.6 opencv获取摄像头代码
  16. openfire的入门学习
  17. 2,未来十年,资产增加
  18. 2021年中国LED驱动器(LED照明驱动器)市场趋势报告、技术动态创新及2027年市场预测
  19. 2021 ICPC Asia Taipei Regional Programming Contest C、F
  20. PTA---C++实现,计算正方体、圆柱体的表面积、体积

热门文章

  1. unity 聊天界面
  2. 云米预计Q3营收同比下降三成,陈小平对未来增长没信心?
  3. 后端线上问题排查常用命令;关键时候能救命,建议收藏!
  4. 27岁武大计算机博士生,入选华为“天才少年”
  5. 什么是区块链?区块链详解
  6. 使用Makefile链接so库文件
  7. 游戏服务器中多人交互逻辑业务的思考
  8. 线控改装技术连载一之——线控开端和车辆组成
  9. 最佳的75个网络安全工具
  10. Android开发者请进:猛击鼠标,请投一票!