f=fit matlab,Matlab免疫算法多目标,卡在第三个‘fit = eval(f)’

下面一段程序卡在了第三个 fit = eval(f)处,这是怎么回事?

function [] = AISMAIN

v = cadeia(100,44,0,0,0);

figure(1);

clf;

P=v;

% Default Parameters默认参数

gen = 100; n = size(P,1); pm = 0.01; per = 0.0; fat = 0.1;

%待优化的函数

a=0.3;b=0.7

f='a.*[1+x.*sin(4*pi.*x)-y.*sin(4*pi.*y+pi)]+b.*[-1 * x .* sin(2 * pi .* x) + y.* sin(2 * pi .* y) + 1]';

% Plotting parameters绘图参数

[x,y] = meshgrid(-1:0.05:1,-1:0.05:1);

vxp = x;

vyp = y;

vzp = eval(f);

x = decode(P(:,1:22)); y = decode(P(:,23:end)); fit = eval(f);

imprime(vxp,vyp,vzp,x,y,fit,1,1); title('Initial Population');

disp(sprintf('Number of generations: %d',gen));

disp(sprintf('Population size: %d',n));

disp(sprintf('Mutation probability: %.3f',pm));

disp(sprintf('Number of clones per candidate: %d',fat*n));

disp(sprintf('Press any key to continue...')); pause;

% Hypermutation controlling parameters

pma = pm; itpm = gen; pmr = 0.8;

% General defintions

vpm = []; vfx = []; vmfit = []; valfx = 1;

[N,L] = size(P); it = 0;

% Generations

while it <= gen & valfx <= 2.26,

x = decode(P(:,1:22)); y = decode(P(:,23:end)); T = []; cs = [];

fit = eval(f); [a,ind] = sort(fit);

valx = x(ind(end-n+1:end)); valy = y(ind(end-n+1:end));

fx = a(end-n+1:end); % n best individuals (maximization)

imprime(vxp,vyp,vzp,x,y,fit,it,5);

% Reproduction

[T,pcs] = reprod(n,fat,N,ind,P,T);

% Hypermutation

M = rand(size(T,1),L) <= pm;

T = T - 2 .* (T.*M) + M;

T(pcs,:) = P(fliplr(ind(end-n+1:end)),:);

% New Re-Selection (Multi-peak solution)

x = decode(T(:,1:22));

y = decode(T(:,23:end));

fit = eval(f);

pcs = [0 pcs];

for i=1:n,

[out(i),bcs(i)] = max(fit(pcs(i)+1:pcs(i+1)));  % Maximizationn problem

bcs(i) = bcs(i) + pcs(i);

end;

P(fliplr(ind(end-n+1:end)),:) = T(bcs,:);

% Editing (Repertoire shift)

nedit = round(per*N); it = it + 1;

P(ind(1:nedit),:) = cadeia(nedit,L,0,0,0);

pm = pmcont(pm,pma,pmr,it,itpm); valfx = max(fx);

vpm = [vpm pm]; vfx = [vfx valfx]; vmfit = [vmfit mean(fit)];

disp(sprintf('It.: %d  pm: %.4f  x: %2.2f  y: %2.2f  Av.: %2.2f  f(x,y): %2.3f',it,pm,valx(end),valy(end),vmfit(end),valfx));

end; % end while

%imprime(PRINT,vxp,vyp,vzp,x,y,fit,it,1);

x = valx(end); y = valy(end); fx = max(fx);

% x = P(ind(end),1:22); y = P(ind(end),23:44); fx = max(fx);

save data x y fx vfx;

disp(sprintf('Maximum found [x,y,f(x,y)]: [%.2f,%.2f,%.2f]',x,y,fx));

figure(2); clf; plot(vfx); title('f(x,y) x Mean'); xlabel('Generations'); ylabel('f(x)');

hold on; plot(vmfit,'r'); hold off;

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

% INTERNAL SUBFUNCTIONS

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

% Print

function [] = imprime(vxp,vyp,vzp,x,y,fit,it,mit);

% x,fx    -> actual values

% vxplot, vplot -> original (base) function

if rem(it,mit) == 0,

mesh(vxp,vyp,vzp);

hold on; %图形保持

%axis([-4 4 -4 4 0 4000]);%控制轴刻度

%axis([-10 10 -10 10 0 3500]);

axis([-1 1 -1 1 -1 2.5]);

xlabel('x'); ylabel('y'); zlabel('f(x,y)');

plot3(x,y,fit,'k*');

drawnow;%更新事件队列强迫Matlab刷新屏幕

hold off;%图形取消

end;

% Reproduction

function [T,pcs] = reprod(n,fat,N,ind,P,T);

% n  -> number of clones

% fat -> multiplying factor

% ind -> best individuals

% T  -> temporary population

% pcs -> final position of each clone

if n == 1,

cs = N;

T = ones(N,1) * P(ind(1),:);

else,

for i=1:n,

% cs(i) = round(fat*N/i);

cs(i) = round(fat*N);

pcs(i) = sum(cs);

T = [T; ones(cs(i),1) * P(ind(end-i+1),:)];

end;

end;

% Control of pm

function [pm] = pmcont(pm,pma,pmr,it,itpm);

% pma -> initial value

% pmr -> control rate

% itpm -> iterations for restoring

if rem(it,itpm) == 0,

pm = pm * pmr;

if rem(it,10*itpm) == 0,

pm = pma;

end;

end;

% Decodify bitstrings解码操作函数

function x = decode(v);

% x  -> real value (precision: 6)十进制数(精度为6位小数)

% v  -> binary string (length: 22)二进制字符串(长度为22位)

v = fliplr(v); s = size(v);

aux = 0:1:21; aux = ones(s(1),1)*aux;

x1 = sum((v.*2.^aux)');

x = -1 + x1 .* (2 / 4194303);

% Function CADEIA

function [ab,ag] = cadeia(n1,s1,n2,s2,bip)

if nargin == 2,

n2 = n1; s2 = s1; bip = 1;

elseif nargin == 4,

bip = 1;

end;

% Antibody (Ab) chains

ab = 2 .* rand(n1,s1) - 1;

if bip == 1,

ab = hardlims(ab);

else,

ab = hardlim(ab);

end;

% Antigen (Ag) chains

ag = 2 .* rand(n2,s2) - 1;

if bip == 1,

ag = hardlims(ag);

else,

ag = hardlim(ag);

end;

% End Function CADEIA

[本帖最后由 mooni 于 2009-5-6 21:34 编辑]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在生命科学领域中,人们已经对遗传(Heredity)与免疫(Immunity)等自然现象进行了广泛深入的研究。六十年代Bagley和Rosenberg等先驱在对这些研究成果进行分析与理解的基础上,借鉴其相关内容和知识,特别是遗传学方面的理论与概念,并将其成功应用于工程科学的某些领域,收到了良好的效果。时至八十年代中期,美国Michigan大学的Hollan教授不仅对以前的学者们提出的遗传概念进行了总结与推广,而且给出了简明清晰的算法描述,并由此形成目前一般意义上的遗传算法(GeneticAlgorithm)GA。由于遗传算法较以往传统的搜索算法具有使用方便、鲁棒性强、便于并行处理等特点,因而广泛应用于组合优化、结构设计、人工智能等领域。另一方面,Farmer和Bersini等人也先后在不同时期、不同程度地涉及到了有关免疫的概念。遗传算法是一种具有生成+检测 (generate and test)的迭代过程的搜索算法。从理论上分析,迭代过程中,在保留上一代最佳个体的前提下,遗传算法是全局收敛的。然而,在对算法的实施过程中不难发现两个主要遗传算子都是在一定发生概率的条件下,随机地、没有指导地迭代搜索,因此它们在为群体中的个体提供了进化机会的同时,也无可避免地产生了退化的可能。在某些情况下,这种退化现象还相当明显。另外,每一个待求的实际问题都会有自身一些基本的、显而易见的特征信息或知识。然而遗传算法的交叉和变异算子却相对固定,在求解问题时,可变的灵活程度较小。这无疑对算法的通用性是有益的,但却忽视了问题的特征信息对求解问题时的辅助作用,特别是在求解一些复杂问题时,这种忽视所带来的损失往往就比较明显了。实践也表明,仅仅使用遗传算法或者以其为代表的进化算法,在模仿人类智能处理事物的能力方面还远远不足,还必须更加深层次地挖掘与利用人类的智能资源。从这一点讲,学习生物智能、开发、进而利用生物智能是进化算法乃至智能计算的一个永恒的话题。所以,研究者力图将生命科学中的免疫概念引入到工程实践领域,借助其中的有关知识与理论并将其与已有的一些智能算法有机地结合起来,以建立新的进化理论与算法,来提高算法的整体性能。基于这一思想,将免疫概念及其理论应用于遗传算法,在保留原算法优良特性的前提下,力图有选择、有目的地利用待求问题中的一些特征信息或知识来抑制其优化过程中出现的退化现象,这种算法称为免疫算法(ImmuneAlgorithm)IA。下面将会给出算法的具体步骤,证明其全局收敛性,提出免疫疫苗的选择策略和免疫算子的构造方法,理论分析和对TSP问题的仿真结果表明免疫算法不仅是有效的而且也是可行的,并较好地解决了遗传算法中的退化问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值