heqiangyong 发表于 2009-3-15 14:26

人工鱼群算法!

这是我在其他网站找到的一些程序,希望大家一起讨论下!【原创】基于人工鱼群算法的投影寻踪模型通用MATLAB源码题目:基于人工鱼群算法的投影寻踪模型通用MATLAB源码投影寻踪模型常与遗传算法相结合,用于分类和综合评价,这里给出了一种基于蚁群算法的投影寻踪模型通用MATLAB程序,本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页
http://blog.sina.com.cn/greensim)。function =FSOUCP(K,N,V,Delta,L,LB,UB,D,Alpha)
%% 此函数实现人工鱼群算法,用于求解投影寻踪分类模型
% GreenSim团队原创作品,转载请注明
% Email:greensim@163.com
% GreenSim团队主页:http://blog.sina.com.cn/greensim
% 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim
%% 输入参数列表
% K      迭代次数
% N      鱼群规模
% V      人工鱼的感知范围
% Delta    拥挤程度的判决门限,取值0~1之间
% L      觅食行为的试探次数
% LB       决策变量的下界,M×1的向量
% UB       决策变量的上界,M×1的向量
% D      样本指标矩阵,n×p的矩阵,每一行为一个样本
% Alpha    窗口半径系数,典型取值0.1
%% 输出参数列表
% BESTX    K×1细胞结构,每一个元素是M×1向量,记录每一代的最优人工鱼的状态
% BESTY    K×1矩阵,记录每一代的最优人工鱼的评价函数值
% ALLX   K×1细胞结构,每一个元素是M×N矩阵,记录每一代人工鱼的位置
% ALLY   K×N矩阵,记录每一代人工鱼的评价函数值
%% 测试函数设置
% 测试函数用单独的子函数编写好,在子函数FIT.m中修改要调用的测试函数名即可
% 注意:决策变量的下界LB和上界UB,要与测试函数保持一致
%% 参考设置
%=FSOUCP(50,30,0.5,0.3,20,LB,UB)
%% 第一步:
M=length(LB);%决策变量的个数
%蚁群位置初始化
X=zeros(M,N);
for i=1:M
    x=unifrnd(LB(i),UB(i),1,N);
    X(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化
%% 第二步:迭代过程
while k<=K
    NewX=zeros(M,N);
    NewY=zeros(1,N);
    for n=1:N
      x=X(:,n);
      Xnb=AFneighbour(n,X,V);
      NN=size(Xnb,2);
      if NN==0
            xx=AFprey(x,V,L,LB,UB,D,Alpha);
      elseif NN>=3
            xx=AFswarm(x,Xnb,N,Delta,V,L,LB,UB,D,Alpha);
      else
            xx=AFprey(x,V,L,LB,UB,D,Alpha);
      end
      NewX(:,n)=xx;
    end
    for n=1:N
      NewY(n)=FIT(NewX(:,n),D,Alpha);
    end
    X=NewX;
    Y=NewY;
    ALLX{k}=X;
    ALLY(k,:)=Y;
    pos=find(Y==minY);
    BESTXk=X(:,pos(1));
    b=sqrt(sum(BESTXk.^2));
    BESTXk=BESTXk/b;
    BESTX{k}=BESTXk;
    BESTY(k)=minY;
    disp(k);
    k=k+1;
end
%% 绘图
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
    TempY=BESTY(1:k);
    minTempY=min(TempY);
    posY=find(TempY==minTempY);
    BESTY2(k)=minTempY;
    BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函数值')
xlabel('迭代次数')
grid on
function Qa=Project_Pursuit(X,a,Alpha)
%% 投影寻踪模型
%% 输入参数列表
% X       洪水样本指标矩阵,n×p的矩阵,每一行为一个样本,
%         Xij表示第i次洪水第j洪水指标,X是否已经归一化均可
% a       投影向量,1×p的矩阵,元素取值范围-1~1,要求其元素平方和等于1
% Alpha   窗口半径系数,典型取值0.1
%% 输出参数列表
% Qa      投影指标函数
%% 第零步:对a的预处理
b=sqrt(sum(a.^2));
a=a/b;
%% 第一步:归一化处理
=size(X);
x=zeros(n,p);
Xjmax=max(X);
Xjmin=min(X);
for i=1:n
    x(i,:)=(X(i,:)-Xjmin)./(Xjmax-Xjmin);
end
%% 第二步:构造投影指标值
Z=zeros(n,1);
for i=1:n
    Z(i)=sum(a.*x(i,:));
end
%% 第三步:计算投影指标函数
meanZ=mean(Z);
R=Alpha*Sa;%窗口半径
Da=0;
    for k=1:n
      rik=abs(Z(i)-Z(k));
      if R>rik
            Da=Da+rik;
      end
end
Qa=Sa*Da;欢迎访问GreenSim团队主页:http://blog.sina.com.cn/greensim
欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim

huright 发表于 2009-3-21 11:27

听说这是中国人自己提出的启发式智能算法。

heqiangyong 发表于 2009-3-23 11:11

【共享】涂晓媛的“人工鱼”与李晓磊的“人工鱼群算法”简介!
涂晓媛的“人工鱼”
zz摘自:软件世界(147)
  中国青年学者涂晓媛在1996年获国际计算学会acm最佳博士论文奖,她的获奖论文题目是“人工动物的计算机动画”(artificial animals for computer animation: biomechanics , locomotion, perception and behavior)。acm是计算机科学领域的国际性权威学术机构,颁发“图灵奖”、“最佳博士论文奖”等计算机科学技术界的高级奖励。涂晓媛是第一位也是迄今唯一一位获此殊荣的中国学者。
  涂晓媛博士研究开发的新一代计算机动画“人工鱼”被学术界称之为“晓媛的鱼”(xiaoyuan's fish),被引用于在英语国家通用的数学教科书。题头图片就是教科书中的插图。
  “晓媛的鱼”被许多西方国家的学术刊物广泛介绍,但在中国,却只有几家报纸简短介绍过。“晓媛的鱼”具有极高的学术价值,并且我们相信它可以为国内的计算机动画开发者提供新的思路。
  为此,本刊记者专门走访了涂晓媛博士的父亲—中国人工智能学会理事长、北京科技大学涂序彦教授,就“人工鱼”的一些问题向他请教。
  一、什么是“人工鱼”?它是“动画鱼”吗?
  据涂教授介绍,晓媛研究开发的“人工鱼”(artificial fish)是基于生物物理和智能行为模型的计算机动画新技术,是在虚拟海洋中活动的人工鱼社会群体。请看图1。

  图1 一个多彩的虚拟海底世界
  “人工鱼”不同于一般的计算机“动画鱼”之处在于:“人工鱼”具有“人工生命”的特征,具有“自然鱼”的某些生命特征,如:意图、习性、感知、动作、行为等。
  “人工鱼”的形态(外形、颜色、姿态)和“自然鱼”非常相似,几乎达到了“以假乱真”的程度。在一次国际会议上,晓媛演示了“人工鱼”的录像,人们看到屏幕上一群色彩美丽、活泼可爱的热带鱼,在海水中漫游,逼真的外形、生动的姿态,伴随着水流的运动,还以为是在水族馆中拍摄的真热带鱼的录像。直到晓媛把“人工鱼”的彩色消隐,变成黑白的鱼,再把“人工鱼”的肌肉剥离,剩下一群热带鱼的骨架在游泳,才确信这是计算机动画的“人工鱼”。
  “人工鱼”和一般的“动画鱼”的不同之处还在于:“人工鱼”具有某些自然鱼的“活”性。
  “人工鱼”有“鱼脑”、“鱼眼”,能感知其他的“人工鱼”和海底环境,有“鱼肉”、“鱼骨”、“鱼嘴”、“鱼头”、“鱼尾”、“鱼鳍”等,能产生类似于自然鱼的随意动作和行为。例如:人工鱼有性欲,当“雄鱼”看到“雌鱼”时,会产生求爱的动作,以获得配偶(请看图2);人工鱼有饥饿感,当看到食物时,会进行扑食(请看图3);人工鱼有学习能力,若一条鱼误吞了鱼饵,被鱼钩钩上,会进行挣扎,而其他的“人工鱼”,就会吸取教训不再上当,不去吞食带钩的鱼饵,离开钓鱼的水域;“人工鱼”有恐惧感,如果发现凶恶的鲨鱼来侵犯,都迅速散开,东奔西逃,脱离危险……

  图2 雄鱼向雌鱼求爱
  从计算机动画创作的观点,也可以说,“人工鱼”是新一代的计算机动画。但人工鱼具有思维、感知、行为等多层次的智能,具有饥饿感、性欲、恐惧感,具有游泳能力、进食能力、学习能力、逃避能力、避障能力、集群能力、求偶能力等多方面的习性和功能。在一般的计算机动画中,创作者需要在动画设计和程序编制中确定动画鱼的所有动作的细节,预先知道动画鱼的全部动作过程。然而,人工鱼的创作者并不去设计和规定每条鱼的动作和行为的细节,也不能预知人工鱼群中可能发生的各种具体动作和实际行为。例如,“人工鱼”的创作者虽然赋予“人工鱼”的求偶性能,但是,不必规定,也不知道,某条“雄鱼”将在什么时间、什么地点、以什么方式、对哪一条雌鱼产生求爱行为,举行求婚仪式。

  图3 侵略者鲨鱼偷袭被扑食的小鱼群
  二、“人工鱼”有“人工智能”吗?
  涂教授很肯定地说:“人工鱼是具有人工智能的,人工鱼群体是一种典型的多智能主体(multiple intelligent agent)的分布式人工智能系统(distributive artificial intelligent system)。”
  晓媛研究开发的“人工鱼”是栖息在虚拟海底世界中人工鱼群的社会,其中,每条“人工鱼”都是一个自主的智能体(autonomous intelligent agent),都可以独立地活动,也可以相互交往。每条鱼都表现出某些人工智能,如:自激发(self-animating)、自学习(self-learning)、自适应(self-adapting)等智能特性,所以会产生相应的智能行为,如:因饥饿而激发寻食、进食行为;有性欲而激发求爱行为;能学习其他鱼被鱼钩钓住的教训,而不去吞食有钩的鱼饵(请看图4);能适应有鲨鱼的社会环境,逃避被扑食的危险等(请看图5)。人工鱼群的社会具有某些自组织(self-organizing)能力和智能集群行为。如:人工鱼群体在漫游中遇到障碍物等,会识别障碍改变队形,绕过障碍后,又重组队列,继续前进。因此,从人工智能的角度看来,“晓媛的鱼”是一种基于智能主体的分布式人工智能系统,这正是人工智能当前的研究发展动向。因此,“人工鱼”也是人工智能的研究对象之一。

  图4 一条可怜的鱼被钓出水面

  图5 逃散的鱼群
  三、“人工鱼”是“人工生命”吗?与“多莉羊”有什么不同?
  涂教授介绍说,“人工生命”(artificial life)是指具有“自然生命”特性和功能的人造系统,或者说是“人造活体”,这里,“活体”是指有生命特征的个体或群体。
  “人工生命”是当前生命科学、信息科学、系统科学及工程技术科学的研究热点,也是人工智能、计算机、自动化科学技术的发展动向之一。它的研究方法和技术途径,可以分为两类:
  其一是生命科学途径。如:生物化学、分子生物学、遗传学、基因工程、“克隆”技术等,用人工方法合成蛋白质,用克隆技术进行哺乳动物的无性繁殖。如:人工胰岛素、人工羊等。
  其二是工程技术途径。如:仿生学、控制论、人工智能、计算机科学技术等,用电子技术、精密机械技术、计算机软、硬件技术,设计和制造出人工生命的工程技术模型,如:人工脑模型、智能进化机器人、人工动物模型、人工植物生长模型……
  晓媛的“人工鱼”是由工程技术路径研究开发的“人工生命”,是基于生物物理和智能行为模型的,用计算机动画技术在屏幕上画出来的“人工鱼”,是具有自然鱼生命特征的计算机动画。而“人工羊”多莉是由生命科学途径,用基于生物化学和遗传工程的无性繁殖方法,在胚胎中生出来的“人工生命”,是自然羊的同类生物。
  四、怎样创作“人工鱼”?
  “人工鱼”不同于一般的“动画鱼”,它的创作方法,涂教授建议大家去参阅dr. xiaoyuan tu 关于“人工鱼”的著作,acm将出版她的专著,也可以通过internet查询晓媛的网页www.dgp.toronto.edu/people/tu/。
  涂教授的个人看法是,虽然“人工鱼”是基于计算机动画技术的“人工生命”,但是,“人工鱼”的动画创作方法和技术,已经突破了传统的计算机动画的框架,是新一代的计算机动画创作方法和技术。
  首先,“人工鱼”不仅有逼真于“自然鱼”的外形和彩色,而且具有类似于“自然鱼”的运动和姿态。这样,就需要研究开发一种基于“自然鱼”的生物物理和生物力学、“自然鱼”的形态学和解剖学、计算机图形学、运动学、动力学的“人工鱼”建模方法和技术。从而,使“人工鱼”在三维虚拟的海底世界中,通过肌肉和骨骼的伸缩和变形的协调控制,利用鱼鳍、鱼尾的动作和鱼体的姿态变化,以及海水及水中植物、岩石等的相互作用,在流体动力学、运动学条件下,产生各种优美的随意运动,如:前进后退、左右转身、上下翻滚、摇头摆尾……“人工鱼”不仅有运动协调控制,还有姿态协调控制。不仅和“自然鱼”静态相似,而且动态相似。
  其次,“人工鱼”不仅具有“自然鱼”的形态,而且具有“自然鱼”类似的生命特性—“活性”。如:“人工鱼”有饥饿感、性欲、恐惧感等,会寻觅食物,吞咽食物;会寻求配偶,进行求爱;会发现危险,进行逃避等。为此,在“人工鱼”的创作中,需要研究开发基于自然鱼的“动物行为学”的智能行为动画模型。从而,可以使“人工鱼”具有基本行为和激发行为,如:进食、避障等条件反射行为;求偶、逃避等激发行为,以及人工鱼社会的集群行为等。
  再次,“人工鱼”是具有人工智能的“灵巧鱼”,而传统的“动画鱼”是程序化的“木偶鱼”。在“人工鱼”中,有“意图发生器”(intention generator)相应于“鱼脑”,其中,具有人工鱼的某些特性参量,如:雄鱼或雌鱼,喜明或喜暗,贪食或不贪食,胆大或胆小等。有基于计算机视觉的虚拟感受器官—“鱼眼”,有光感、距离感以及非视觉的温度感等,因此,人工鱼可以识别和感知其他人工鱼以及周围的虚拟海洋环境,如:水草、岩石、水温、光照等。
  意图发生器是人工鱼的“感知中心”,将各种感知信息与特性参量相结合,产生人工鱼的动作意图,如:搜索食物、扑食进食等。并且具有集中注意力的意图集中或知觉集中机制,可以使“人工鱼”将注意力集中在当前主要的感知和行为上,抑制或滤除其他次要信息或干扰。因此,“人工鱼”是在动态的虚拟水底世界中,以“感知-动作”模式,具有自主能力的,自激发、自适应的智能体。需要创作和设计人工鱼的“意图发生器”、“多感知融合器”、“运动协调控制器”等。
  最后“人工鱼”不是一条单独的“动画鱼”,而是具有各种不同的人工鱼的鱼群社会,其中,各种人工鱼之间的相互通信、相互交往、相互作用,组成人工鱼社会。如:由领头的鱼带队漫游的鱼群;由雌鱼和雄鱼组成的人工鱼配偶或情侣;由大鲨鱼和小热带鱼形成的“弱肉强食”的鱼社会……因此,“人工鱼”社会是一种具有多智能体(multi-agent)的分布式人工智能系统。由于多智能体之间多种多样的相互影响、相互作用,使人工鱼社会出现丰富多采的群体行为和生态现象。一方面,提高了人工鱼群对自然鱼群的逼真度,丰富了人工鱼社会现象和活动内容;另一方面,也增加了人工鱼的动作和行为细节的不可预知性、事件的突发性及活动的趣味性。这是传统的动画中的“木偶鱼”做不到的。也就是说,人工鱼的具体动作和实际行为并不是创作者都可以预知的、规定的。“人工鱼”的动画是在自然鱼的生物物理和智能行为模型驱动下由计算机“自动”画出来的,这是不同于传统动画的新一代的计算机动画创作方法和技术。
  五、“人工鱼”有何意义和价值?
  涂教授认为“人工鱼”有以下几方面的意义和价值。
  首先,“人工鱼”开拓了计算机动画创作的新途径。因为,在自然环境中栖息活动的生物群体,是长期困扰着计算机动画创作者的“老大难”问题。如果用传统的计算机动画创作方法和技术,去创作“人工鱼”这种在虚拟海洋环境中活动的多种人工鱼的社会群体,是十分复杂而又极其繁琐的。不仅要在软件设计和程序编制中,详细规定每一条动画鱼的每一个采样时刻、每一个动作、每一种体形、每一种姿态,而且,要具体描述许多条动画鱼之间的相互关系、相互位置、相互作用,其计算复杂性将以指数率增长,造成“组合爆炸”,即使采用高速、大容量的计算机,也未必能使动画鱼群达到逼真于自然鱼群的满意效果。“人工鱼”的研究与开发,突破了传统计算机动画的框架,开拓了计算机动画创作的新途径。提供了基于生物物理和智能行为模型的、具有人工生命特征、自动生成计算机动画的创作方法和技术。不仅显著地减少了动画创作者对计算机动画生成过程的介入和干预,而且有效地提高了动画的逼真度和临场感。
  其次,“人工鱼”提供了“人工生命”的新范例。
  “人工鱼”的研究开发成功,一方面为基于计算机动画的“人工生命”提供了新的范例,另一方面,也为在屏幕上创建其他人工生命,提供了动画创作的新方法—基于生物物理和智能行为模型的动画生成方法。人们可以把“人工鱼”作为范例,用基于生物物理和智能行为模型的动画生成方法,研究开发计算机屏幕、电视、电影屏幕上的各种“人工生命”,例如:“人工猫”、“人工狗”、“人工鸟”、“人工马”……乃至于“人工人”……结合虚拟现实技术,可以创作和摄制各种基于计算机动画的电视片和电影片。
  再次,“人工鱼”实现了分布式“人工智能”。
  “人工鱼”以计算机动画的模式、在屏幕上实现了分布式“人工智能”系统—“人工鱼社会”群体。在人工鱼社会中,每一条人工鱼都是一个自激发的自主的智能体(self-animating autonomous intelligent agent)。具有模拟自然鱼的动物人工智能,在意图、感知、行为等多层次上,以“感知-动作”的模式,如:“寻食-进食”、“求偶-交配”、“惊恐-逃逸”、“钩住-挣扎”……在多方面表现出智能行为。在人工鱼群体中,分布在虚拟海底世界中的各种人工鱼,体现出复杂的相互关系和智能社会行为,如:配偶关系、敌对关系、同伴关系和集群行为、逃逸行为、求偶行为等。因此,“人工鱼”也提供了多智能体分布式人工智能系统的一种范例,以及相应的设计方法和实现技术。类似地,也可以借鉴、推广应用于其他分布式人工智能系统,如:智能机器人的群体的研究与开发。
  国际计算学会acm最佳博士论文奖获得者

huright 发表于 2009-3-23 16:24

感觉涂晓媛的“人工鱼”侧重于智能动画,或者说动画的智能行为;
而李晓磊的“人工鱼群”侧重于算法,是一种启发式的仿生智能算法。两者的区别还是比较大的。
QQ:87999379

heqiangyong 发表于 2009-3-23 16:41

回复 地板 huright 的帖子

你说的太对了,但李晓磊的鱼存在明显的缺陷!我在很多论文上发现现在的一种改进的人工鱼群算法,下面这个是人工鱼群的简要步骤:
artifical fish-warm algorithm
xp(v1,v2……vn)个体的当前位置,d(p,q)=(1/n)*{^2+……[v

(p,n)-v(q,n)]^2},两个体的距离,(不知道为什么用1/n而不是开平方);visual

一只鱼的感知距离。@拥挤度因子。
第一步:觅食人工鱼当前位置为Xi,在可见域内随机选择一个位置Xj(d(ij)

<=visual),如xj优于xi向xj前进一步,否则随机移动一步。如出现不满足约束则

剪去。X(j+1,k)={ifx(i,k)=x(j,k) 不变,else x(j+1,k)=随机(0,1)}。
第二步:聚群:
xi可见域内共有nf1条鱼。形成集合KJi,KJi={Xj|Dij <=visual},if KJi不为空,

then
X(center)=(xj1+xj2+.....xjn)/nf1(xjk属于kji)
X(center,k)=0,X(center,k) <0.51,X(center,k)>=0.5
若:FCc/nf1>@FCi(FCc为中心食物浓度,FCi为Xi点食物浓度)
则:向中心移动:X(i+1,k)=不变,当Xik=X(center,k)时;Xik=随机(0,1),当

Xik!=X(center,k)时;
若:FCc/nf1 <@FCi
则:进行觅食
第三步:追尾
在visual范围内,某一个体食物浓度最大则称为Xmax,若:FCmax>@FCi,则向它移动

:X(i+1,k)=当X(i,k)=X(max,k)时,X(i,k)不变,当X(i,k)!=X(max,k)时,X(i,k)=

随机(0,1)
第四步:公告板
在运算过程中,用公告板始终记录下最优FCi

若凡 发表于 2012-4-12 10:19

每一个算法的提出都会有一些缺陷,对其改进的方法一般都是针对某一类缺陷而做的,这样对研究生很好,改进一点或者两个智能算法的联合计算就能出点成果出来了!
页: [1]
查看完整版本: 人工鱼群算法!