MATLAB文化算法

news/2024/11/29 12:29:36/

目录

文化算法

主要代码

Sphere

AdjustCulture

结果


文化算法


基本概念:优化算法 | 详解文化算法(附MATLAB代码) - 知乎

        不同于遗传算法只有种群进化空间,文化算法包含信念空间种群空间两个进化空间,因此,文化算法是一种双层进化系统。

        种群空间和信念空间是各自保存自己群体的两个相对独立的进化过程,并各自独立演化。但是,种群空间定期贡献精英个体给信念空间,信念空间不断进化自己的精英群体来影响种群空间群体。        

        信仰空间中的知识通过 影响函数指导种群空间个体朝有利的方向进化。 任何满足文化算法结构的算法都能融入种群空间 中,通过相互融合,可以弥补传统算法的不足。

种群空间结构-适应度值

信念空间两种知识组成:

1)每次迭代中发现最佳点的个体的确切位置。

2)保存和修正目标函数主变量的变化区间在可能发现最好解的范围内

接收函数accept()的作用是将个体经验传递到信念空间,主要是在当前种群空间中选取优势个体,为信念空间的进化提供基础。接收函数一般为选取当前种群中最好的前nAccept个个体来更新信念空间。

更新函数:在接收到当前种群中最好的前nAccept个个体后,使用更新函数update()来更新信念空间。

影响函数:信念空间在形成群体经验后,通过influence()函数对群体空间中个体的行为规则进行修改,以使个体空间得到更高的进化效率


主要代码


round 四舍五入为最近的小数或整数

Y = round(X) 将 X 的每个元素四舍五入为最近的整数。在对等情况下,即有元素的小数部分恰为 0.5 时,round 函数会偏离零四舍五入到具有更大幅值的整数。

Y = round(X,N) 四舍五入到 N 位数:

  • N > 0:舍入到小数点右侧的第 N 位数。

  • N = 0:四舍五入到最接近的整数。

  • N < 0:舍入到小数点左侧的第 N 位数。

Y = round(X,N,type) 指定四舍五入的类型。指定 'significant' 以四舍五入为 N 位有效数(从最左位数开始计数)。在此情况下,N 必须为正整数。

Y = round(t) 将 duration 数组 t 的每个元素四舍五入到最接近的秒数。

Y = round(t,unit) 将 t 的每个元素四舍五入到指定单位时间的最接近的数。

repmat 重复数组副本

B = repmat(A,n) 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n

B = repmat(A,r1,...,rN) 指定一个标量列表 r1,..,rN,这些标量用于描述 A 的副本在每个维度中如何排列。当 A 具有 N 维时,B 的大小为 size(A).*[r1...rN]。例如:repmat([1 2; 3 4],2,3) 返回一个 4×6 的矩阵。

B = repmat(A,r) 使用行向量 r 指定重复方案。例如,repmat(A,[2 3]) 与 repmat(A,2,3)  返回相同的结果。

inf 创建所有值均为inf的数组

X = Inf 返回正无穷大的标量表示。当运算结果太大以至于无法表示为浮点数时,如 1/0 或 log(0),运算会返回 Inf

对于双精度,Inf 表示大于 realmax 的数字。对于单精度,Inf 表示大于 realmax('single') 的数字。

X = Inf(n) 返回 Inf 值的 n×n 矩阵。

X = Inf(sz1,...,szN) 返回由 Inf 值组成的 sz1×...×szN 数组,其中 sz1,...,szN 指示每个维度的大小。例如:Inf(3,4) 返回一个 3×4 的矩阵。

X = Inf(sz) 返回 Inf 值的数组,其中大小向量 sz 定义 size(X)。例如:Inf([3 4]) 返回一个 3×4 的矩阵。

X = Inf(___,typename) 返回由数据类型为 typename(可以是 'single' 或 'double')的 Inf 值组成的数组。

X = Inf(___,'like',p) 将返回一个由 Inf 值组成的数组,它具有与 p 相同的数据类型、稀疏度和复/实性。您可以指定 typename 或 'like',但不能同时指定二者。

unifrnd 连续统一的随机数

r = unifrnd(a,b) 从连续均匀分布中生成一个随机数,其下端点为a,上端点为b。

r = unifrnd(a,b,sz1,...,szN) 生成一个均匀随机数的数组,其中sz1,...,szN表示每个维度的大小。

r = unifrnd(a,b,sz) 生成一个均匀随机数的数组,其中大小向量sz指定了size(r)。

semilogy 半对数图(y 轴有对数刻度)

semilogy(X,Y) 在 x 轴上使用线性刻度、在 y 轴上使用以 10 为底的对数刻度来绘制 x 和 y 坐标。

  • 要绘制由线段连接的一组坐标,请将 X 和 Y 指定为相同长度的向量。

  • 要在同一组坐标轴上绘制多组坐标,请将 X 或 Y 中的至少一个指定为矩阵。

semilogy(X,Y,LineSpec) 使用指定的线型、标记和颜色创建绘图。

semilogy(X1,Y1,...,Xn,Yn) 在同一组坐标轴上绘制多对 x 和 y 坐标。此语法可替代将坐标指定为矩阵的形式。

semilogy(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn) 可为每个 x-y 对组指定特定的线型、标记和颜色。您可以对某些 x-y 对组指定 LineSpec,而对其他对组省略它。例如,semilogy(X1,Y1,'o',X2,Y2) 对第一个 x-y 对组指定标记,但没有对第二个对组指定标记。

clc;
clear;
close all;%% Problem DefinitionCostFunction = @(x) Sphere(x);        % Cost FunctionnVar = 10;          % Number of Decision VariablesVarSize = [1 nVar];   % Decision Variables Matrix SizeVarMin = -10;         % Decision Variables Lower Bound
VarMax = 10;         % Decision Variables Upper Bound%% Cultural Algorithm SettingsMaxIt = 1000;         % Maximum Number of IterationsnPop = 50;            % Population SizepAccept = 0.35;                   % Acceptance Ratio接受的更新率
nAccept = round(pAccept*nPop);    % Number of Accepted Individualsalpha = 0.3;beta = 0.5;%% Initialization% Initialize Culture
Culture.Situational.Cost = inf;
Culture.Normative.Min = inf(VarSize);
Culture.Normative.Max = -inf(VarSize);
Culture.Normative.L = inf(VarSize);
Culture.Normative.U = inf(VarSize);% Empty Individual Structure
empty_individual.Position = [];
empty_individual.Cost = [];% Initialize Population Array
pop = repmat(empty_individual, nPop, 1);% Generate Initial Solutions
for i = 1:nPoppop(i).Position = unifrnd(VarMin, VarMax, VarSize);pop(i).Cost = CostFunction(pop(i).Position);
end% Sort Population
[~, SortOrder] = sort([pop.Cost]);
pop = pop(SortOrder);% Adjust Culture using Selected Population
spop = pop(1:nAccept);
Culture = AdjustCulture(Culture, spop);% Update Best Solution Ever Found
BestSol = Culture.Situational;% Array to Hold Best Costs
BestCost = zeros(MaxIt, 1);%% Cultural Algorithm Main Loopfor it = 1:MaxIt% Influnce of Culturefor i = 1:nPop% % 1st Method (using only Normative component)
%         sigma = alpha*Culture.Normative.Size;
%         pop(i).Position = pop(i).Position+sigma.*randn(VarSize);% % 2nd Method (using only Situational component)
%         for j = 1:nVar
%            sigma = 0.1*(VarMax-VarMin);
%            dx = sigma*randn;
%            if pop(i).Position(j)<Culture.Situational.Position(j)
%                dx = abs(dx);
%            elseif pop(i).Position(j)>Culture.Situational.Position(j)
%                dx = -abs(dx);
%            end
%            pop(i).Position(j) = pop(i).Position(j)+dx;
%         end% % 3rd Method (using Normative and Situational components)for j = 1:nVarsigma = alpha*Culture.Normative.Size(j);dx = sigma*randn;if pop(i).Position(j)<Culture.Situational.Position(j)dx = abs(dx);elseif pop(i).Position(j)>Culture.Situational.Position(j)dx = -abs(dx);endpop(i).Position(j) = pop(i).Position(j)+dx;end        % % 4th Method (using Size and Range of Normative component)
%         for j = 1:nVar
%           sigma = alpha*Culture.Normative.Size(j);
%           dx = sigma*randn;
%           if pop(i).Position(j)<Culture.Normative.Min(j)
%               dx = abs(dx);
%           elseif pop(i).Position(j)>Culture.Normative.Max(j)
%               dx = -abs(dx);
%           else
%               dx = beta*dx;
%           end
%           pop(i).Position(j) = pop(i).Position(j)+dx;
%         end        pop(i).Cost = CostFunction(pop(i).Position);end% Sort Population[~, SortOrder] = sort([pop.Cost]);pop = pop(SortOrder);% Adjust Culture using Selected Populationspop = pop(1:nAccept);Culture = AdjustCulture(Culture, spop);% Update Best Solution Ever FoundBestSol = Culture.Situational;% Store Best Cost Ever FoundBestCost(it) = BestSol.Cost;% Show Iteration Informationdisp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);end%% Resultsfigure;
%plot(BestCost, 'LineWidth', 2);
semilogy(BestCost, 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;

Sphere


function z = Sphere(x)z = sum(x.^2);end

AdjustCulture


numel - 数组元素的数目
    此 MATLAB 函数 返回数组 A 中的元素数目 n 等同于 prod(size(A))。

prod - 数组元素的乘积
    此 MATLAB 函数 返回 A 的数组元素的乘积。 如果 A 是向量,则 prod(A) 返回元素的乘积。如果 A 为非空矩阵,则 prod(A) 将 A 的各列视为向量,并返回一个包含每列乘积的行向量。如果 A 为 0×0 空矩阵,prod(A) 返回 1。 如果 A 为多维数组,则 prod(A) 沿第一个非单
 一维度运算并返回乘积数组。此维度的大小将减少至 1,而所有其他维度的大小保持不变。

function Culture = AdjustCulture(Culture, spop)n = numel(spop);nVar = numel(spop(1).Position);for i = 1:nif spop(i).Cost<Culture.Situational.CostCulture.Situational = spop(i);endfor j = 1:nVarif spop(i).Position(j)<Culture.Normative.Min(j) ...|| spop(i).Cost<Culture.Normative.L(j)Culture.Normative.Min(j) = spop(i).Position(j);Culture.Normative.L(j) = spop(i).Cost;endif spop(i).Position(j)>Culture.Normative.Max(j) ...|| spop(i).Cost<Culture.Normative.U(j)Culture.Normative.Max(j) = spop(i).Position(j);Culture.Normative.U(j) = spop(i).Cost;endendendCulture.Normative.Size = Culture.Normative.Max-Culture.Normative.Min;end

结果



http://www.ppmy.cn/news/380552.html

相关文章

一款基于jQuery的超酷动画幻灯片

今天给大家带来一款仿步步高vivo手机网站的一款首页焦点幻灯展示特效&#xff0c;带有超酷炫的动画特效&#xff0c;动态效果丝毫不逊色于flash动画&#xff0c;具有很强的视觉冲击力&#xff0c;推荐下载学习&#xff01; 提示&#xff1a;兼容360、FireFox、Chrome、Safari、…

mysql 常用sql

1. 常见命令 连接本地数据库与远程数据库&#xff08;172.16.xx.xx:3306&#xff09;&#xff1a; mysql -h localhost -u root -p123 mysql -h 172.16.xx.xx -P 3306 -u root -p 2. DDL 数据定义语言&#xff08;Data Definition Lanuage, DDL&#xff09;定义了数据库模式&…

sql:常用sql 语句整理一 (整体架构)

今天总结一下常用的sql 语句&#xff1a; 1. 命令 连接数据库 连接本地数据库与远程数据库&#xff08;112.26.xx.xx:3306&#xff09;&#xff1a; mysql -h localhost -u root -p123 mysql -h 112.26.xx.xx -P 3306 -u root -p PS&#xff1a;u:用户名 P 端口 p:password…

“锤”死挣扎

摘要&#xff1a;这个世界需要乔布斯这种“立势”的天才&#xff0c;也需要老罗这种“破势”的异端。 4月9日锤子新品发布会上&#xff0c;罗永浩推出了坚果3。台下零零星星的掌声&#xff0c;不时发出的捧场声&#xff0c;让整台发布会略显尴尬。对于锤子的发布会&#xff0c…

android系统负载如何获取1-简单利用系统命令

最近在调查系统负载问题&#xff0c;希望能从中获取一些系统卡顿的知识&#xff0c;暂时把简单获取系统负载的命令记录下来&#xff0c;以备以后查看。 本文不做具体负载分析&#xff0c;只为记录命令&#xff0c;等后续系统负载分析有了结果会给大家呈现分析的过程和结果。 …

2019年Java大厂面试(吐血超详细总结)

本文来自于慕课网手记&#xff1a; Java大厂面试&#xff08;吐血超详细总结&#xff09;作者&#xff1a;小码哥的freestyle链接&#xff1a; https://www.imooc.com/article/286545来源&#xff1a;慕课网 面试清单 平安产险飞猪上汽大通浩鲸科技杏仁医生兴盛优先御泥坊拓维信…

转 :2019年Java大厂面试(吐血超详细总结)

2019年Java大厂面试&#xff08;吐血超详细总结&#xff09; 本文来自于慕课网手记&#xff1a;Java大厂面试&#xff08;吐血超详细总结&#xff09;&#xff0c;转载请保留链接 ;) 转载自&#xff1a;https://www.imooc.com/article/286545#%E7%A6%8F%E7%B1%B3%E7%A7%91%E6%8…

mysql命令语句连接数据库_MySQL_MySQL常用基本SQL语句总结,1. 常见命令连接本地数据库 - phpStudy...

MySQL常用基本SQL语句总结 1. 常见命令 连接本地数据库与远程数据库(172.16.xx.xx:3306)&#xff1a; mysql -h localhost -u root -p123 mysql -h 172.16.xx.xx -P 3306 -u root -p 2. DDL 数据定义语言(Data Definition Lanuage, DDL)定义了数据库模式&#xff0c;包括CREATE…