文化算法

算法说明:文化算法是基于人类社会进化原理的算法,他可以利用领域的先验知识以及在进化过程中获得的知识来指导搜索过程。文化能使种群以一定的速度进化和适应环境,而这个速度是超越单纯依靠基因遗传生物进化速度的。

文化算法是一种用于解决复杂计算的新型全局优化搜索算法,它模拟人类社会的演化过程。在人类社会中,文化可以被看做是信息的载体,这些信息潜在地影响所有社会成员,并且有益于指导同代及其后代解决问题的实践活动。区别于其他进化算法,文化算法是基于知识的双层进化系统,其包含两个进化空间:一个是由在进化过程中获取的经验和知识组成的信仰空间;另一个是由具体个体组成的种群空间,通过进化操作和性能评价进行自身的迭代。下图是文化算法的基本框架:

种群空间与信仰空间是两个相对独立的进化过程,两个空间通过一组由接收函数accept()和影响函数influence()组成的通信协议联系在一起。种群空间的个体在进化过程中,形成个体经验,通过accept()函数将个体经验传递到信仰空间。信仰空间将个体经验,根据一定行为规则进行比较优化,形成种群经验,信仰空间根据现有的种群经验和新个体经验用update()函数进行更新;而influence()函数能够利用信仰空间中待解决的问题的经验知识来指导种群空间的进化,以使种群空间得到更高的进化效率。objective()函数是目标函数(适应度函数)。其作用是用来评价种群空间中个体的适应值的。generate()函数根据个体行为规则和父辈个体参数生成下一代个体,select()函数根据规则从新生成个体中选择一部分个体作为下代个体的父辈。

算法的具体作用机理:

1)初始化一个种群空间p,然后通过目标函数(适应度函数)对种群空间中的个体进行评价;2)根据目标函数给定的取值范围和初始种群中的候选解,按照信仰空间结构,生成初始信仰空间;3)根据影响函数influence(),对种群中的每个父个体进行变异,生成相因个数的子个体;4)对于生成的父、子共2p新中群的每个个体,从中随机选取c个个体与其进行比较,如果该个体适应值优于与其比较的个体则称其获胜一次,记录每个个体获胜次数。选取p个具有最多胜利次数的个体作为下一代的父个体;5)设定接收函数,更新信仰空间;6)不满足结束条件,则重复(3)至结束。

可用文化算法求解的问题:

1.

在不同的种群内可按不同的速度进行进化求解的复杂系统问题;

2.

结合搜索和知识引导的混合系统求解问题;

3.

需多种群及其交互的求解问题;

4.

将不同算法结合利用其各自特性进行混合求解的问题等。

用于简单函数优化的算法代码(MATLAB)

%===============文化算法---解决非线性无约束函数优化问题=======================

clc,clear

popSize=40; %初始种群规模

pop=[]; %种群空间, 一维函数函数优化

popSon=zeros(popSize,1); %子代种群

f=zeros(popSize,1); %种群的适应度值

c=60; %从种群中随机取出的个体数

suitKnowledge=[]; %形势知识

normKnowledge=zeros(popSize,2); %规范知识

gmax=40; %最大进化代数

acc=0.7; %接受函数的接受概率

%=======================初始化种群空间======================================

% 一维函数

for i=1:popSize

pop(i)=5.12*(2*rand-1); %实数编码结构

end

%=======================计算种群适应度======================================

for i=1:popSize

f(i)=fit(pop(i));

end

%========================初始化信仰空间=====================================

[fbest,bestnum]=min(f);

suitKnowledge=pop(bestnum); %初始化形势知识

for i=1:popSize

normKnowledge(i,1)=-5.12; %n为规范知识

normKnowledge(i,2)=5.12; %n的第一列为x取值下限第二列为取值上限

end

%-----------------------

《进入大循环》-------------------------------------

for u=1:gmax

%========================影响函数(生成子代)================================

�-version1:使用规范知识调整变量变化步长,使用形势知识调整其变化方向.

for

i=1:popSize if(pop(i)

popSon(i)=pop(i)+abs((normKnowledge(i,2)-normKnowledge(i,1))*rand);

elseif(pop(i)>suitKnowledge)

popSon(i)=pop(i)-abs((normKnowledge(i,2)-normKnowledge(i,1))*rand);

elseif(pop(i)==suitKnowledge)

popSon(i)=pop(i)+(normKnowledge(i,2)-normKnowledge(i,1))*rand;

end

end

popSon; %生成的子代个体

for i=(popSize+1):(2*popSize)

pop(i)=popSon(i-popSize); %将生成的子代个体放到父代个体后面 end

%=========================父子竞争(记录胜率)==============================

winnum=zeros(2*popSize,1); %记录每个个体的胜利次数

for i=1:2*popSize

cnum=randperm(2*popSize);

winsingle=0;

for j=1:c

if(fit(pop(i))

winsingle=winsingle+1; %记录胜利次数

end

end

winnum(i)=winsingle;

end

index=1;

for

i=1:2*popSize %将pop按获胜次数排序, 冒泡法

for j=(i+1):2*popSize

if(winnum(i) %将胜利次数从大到小排列

uusee=winnum(i);

winnum(i)=winnum(j);

winnum(j)=uusee; index=j; % index

是对应第i个获胜次数最多pop的索引 end end

pptv=pop(i);

pop(i)=pop(index); %将pop按获胜次数从新排, 将获胜次数多的前40个个体放入父代

pop(index)=pptv;

end

for

i=1:2*popSize f(i)=fit(pop(i)); %计算新生成的父代个体的适应度值

end

[fbest,bestnum]=min(f(1:popSize));

%取出前40个新生种群的最优个体

f;

pop;

%=====================概率为acc的接受函数=====================================

if(fbest

if(rand<=acc) %以概率acc择优接受形势知识

suitKnowledge=pop(bestnum); end

end

for i=1:popSize

if((pop(i)

if(rand<=acc) %以概率acc择优接受规范知识

normKnowledge(i,1)=pop(i);

end

end

if((pop(i)>normKnowledge(i,2))||(fit(pop(i))

if(rand<=acc) %以概率acc择优接受接受规范知识

normKnowledge(i,2)=pop(i);

end

end

end

pop;

%↑↑↑↑↑↑↑↑↑形势知识和规范知识(信仰空间)完成了更新↑↑↑↑↑↑↑↑↑↑↑↑

trend(u)=fbest;

trendindex(u)=suitKnowledge;

%drawca(trendindex(u),trend(u)); %画图函数

end

%-------------------------《大循环结束》------------------------------------

trend

fbest

g=1:40;

figure(2);

plot(g,trend,'k');

title('适应值随进化代数变化曲线');

text(15,0.007,['最终搜索结果:最小值为',num2str(fbest)]);

fit.m

function f=fit(x)

% x is a Vector with xi between [-5.12, 5.12]

% min is at (0, 0, ..., 0)

% Generalized Rastrigin’s Function

n = size(x, 2);

output=0;

for i = 1:n

output = output+x(i)^2-10*cos(2*pi*x(i))+10;

end

f=output;

matlab求机制,[转载]文化算法 matlab相关推荐

  1. matlab数值拟合r2_用MATLAB求RMSE怎么用MATLAB计算均方误差

    用MATLAB求RMSE 怎么用MATLAB计算均方误差 www.zhiqu.org     时间: 2020-12-07 function f=RMSE(h1,h2) %RMSE return RM ...

  2. matlab 求n 的和,MATLAB求1的阶乘加到n的阶乘和 不要现有的函数,要自己编写出来的...

    点击查看MATLAB求1的阶乘加到n的阶乘和 不要现有的函数,要自己编写出来的具体信息 答:myfactorial = @(n) factorial(n) myfactorial = @(n) pro ...

  3. matlab求离散系统,离散系统的MATLAB的实现.doc

    离散系统的MATLAB的实现 离散系统的MATLAB实现 一.设计目的 通过该设计,理解系统的单位抽样响应,频率响应及零极点增益的概念及意义. 课程设计环境 计算机.MATLAB软件 设计内容及其主要 ...

  4. matlab求微分方程同届,matlab求微分方程精确解及近似解.ppt

    matlab求微分方程精确解及近似解 求微分方程的解 问题背景和实验目的 Euler 折线法 初值问题的Euler折线法 Euler 折线法举例 Euler 折线法源程序 Euler折线法举例(续) ...

  5. matlab求高阶微分的命令,matlab求解高阶微分方程辅导

    同学你好,我们可以辅导matlab高阶微分方程.关于matlab解决高阶微分方程的知识点如下,如果同学感觉还死有不明白的地方,可以直接联系我们,安排专业老师进行一对一授课讲解. 微分方程(Differ ...

  6. matlab求矩阵距平矩阵,matlab经验正交函数EOF(转载)

    A.7EOF分析 经验正交函数分析方法(empiricalorthogonalfunction,缩写为EOF),也称特征向量分析(eigenvectoranalysis),或者主成分分析(princi ...

  7. 如何用matlab画紫罗兰,[转载]基于MATLAB的快速傅立叶分析程序设计

    以下程序是我学习阶段总结的,特此写出来供大家参考,转载请注明! 1.已知信号数据 对一个人为产生的信号进行采用FFT变换方法进行功率谱分析.已知信号x(n)=120.0*COS(2*3.14*SF*n ...

  8. matlab求xk符号解,matlab符号运算习题

    matlab符号运算习题 第 3 讲 MATLAB 符号计算符号计算则是可以对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLAB 具有符号数学工具箱(Symbolic Math ...

  9. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法

    详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...

最新文章

  1. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  2. 2013年6月编程语言排行榜,C语言位据第一位
  3. 利用快排查询无序数组第k位大的数
  4. WEB前端 javascript、php关键字搜索函数的使用方法
  5. SAP 电商云 Spartacus UI 如何自定义 SeoMetaService
  6. python数学计算模块_Python-NumPy模块数学和统计方法(4)
  7. win7局域网计算机 慢,Win7系统开机宽带连接很慢怎么办?
  8. 360浏览器登录_浏览器发展历史介绍及当今主流浏览器的详细对比
  9. 腾讯广告算法大赛 | 复赛第二周最佳进步奖得主心得分享
  10. fancybox 无效 失效 直接打开页面, ajax 之后 fancybox对更新的数据无效,Jquery失效 无效...
  11. 《解析几何》吕林根,徐子道第四版 习题 1.4.7,1.4.8,1.4.9
  12. 【电脑百科】BT种子
  13. 《计算机操作系统》练习题
  14. main(argc,argv[])
  15. usb redirector linux,USB Redirector Client详细使用教程
  16. Cannot locate a 64-bit Oracle Client library:The specified module could not be found.
  17. 安装企业微信和微信-ubuntu
  18. electron 剪贴板 截图_利用 Electron 开发快速截图工具(二)
  19. [C#学习教程-委托]001.大道至简之委托(代理),匿名函数,Lambda表达式
  20. 一个机柜多少u?一个机柜可以放多少台服务器?

热门文章

  1. Flutter基础—你好,Flutter!
  2. 数字安全控制系统行业调研报告 - 市场现状分析与发展前景预测
  3. 2021年中国以文档为中心的协作Softwar市场趋势报告、技术动态创新及2027年市场预测
  4. 操作需要计算机管理员权限,win10系统操作文件时提示需要管理员权限的处理教程...
  5. mac android通知中心,有什么软件可以把安卓通知栏变成苹果通知栏
  6. Python学习:day21正则表达式
  7. 字节跳动1/3员工不支持取消大小周!库克称iPhone将采用可回收材料生产;清华博士接亲被要求现场写代码|极客头条...
  8. 都说人工智能入门难?但80%的人都错了……
  9. Dubbo to Mesh 云原生架构改造方案解析
  10. 性能 1.84 倍于 Ceph!网易数帆开源分布式存储系统 Curve