Algorithm 版 (精华区)

发信人: Lerry (戒网·学习), 信区: Algorithm
标  题: 神经网络及其五子棋程序设计 
发信站: 哈工大紫丁香 (2001年12月13日09:00:20 星期四), 站内信件

神经网络及其五子棋程序设计
----------------------------------------------------------------------------
----
  人工神经网络定义:
神经网络:由多个非常简单的处理单元彼此按某种方式相互连接而形成的计算机系统,
该系统是靠其状态对外部输入信息的动态响应来处理信息。
所谓人工神经网络就是指为了模拟生物大脑的结构和功能而构成的一种信息处理系统或
计算机。
人工神经网络特点(区别于冯氏计算机):
1.大规模并行计算
2.非线性处理
3.鲁棒性
4.自组织及自适应性
5.学习能力
6.分布式存储,存储与计算相结合
7.联想能力
人工神经网络的应用:
主要民用应用领域有:
语言识别、图像识别与理解、计算机视觉、智能机器人故检测、实时语言翻译、企业管
理、市场
分析、决策优化、物资调运、自适应控制、专家系统、智能接口、神经生理学、心理学
和认知科
学研究等等。
主要军用应用领域有:
语音、图像信息的录取与处理
雷达、声纳的多目标识别与跟踪
战场管理和决策支持系统
军用机器人控制
各种情况、信息的快速录取、分类与查询
导弹的智能引导
保密通讯
航天器的姿态控制等
人工神经网络研究发展简史
其发展历程经过三个时期:
第一次研究高潮:五十至六十年代
1943年心理学家W.S.McCu lloch和数学家W.Pitts提出M-P模型。
1949年D.O.Hebb从心理学的角度提出了至今仍对神经网络理论有着重要影响的Hebb学习
法则。
1961年E.Rosenblatt提出了著名的感知机模型(perceptron)。
1962年Widrow提出了主要适用于自适应系统的自适广线性元件Adaline网络。
低潮时期:六十年代末至七十年代
由于受当时神经网络的理论研究水平所限及应用前景不明朗,加之受到冯·诺依曼式计
算机大发展的冲击等因素的影响,对神经网络的研究陷入低谷。但是,在美、日等国仍
有少数学者在扎扎实地继续着网络模型和学习算法的研究,提出了许多有意义的理论和
方法:如Arbib的竞争模型、1977年Kohonen提出的自组织映射模型、Grossberg的自适应
谐振模型、Fukushima的新认知机等。有的学者还提出了连接机制(Connectionism)和并
行分布处理概念(Parallel Distributed Processing)。
第二次研究高潮:八十年代初至现在
1982年生物物理学家J.Hoppield教授提出了Hoppield神经网络模型,引入了能量函数概
念,这一成果的取得使神经网络的研究取得了突破性进展。84年他用此模型成功地解决
了复杂度为NP的旅行商问题(TSP)。1987年6月美国加州举行了第一届神经网络国际会议
。有一千多名学者参加,并成立了国际神网络学会。后确定为每年召开两次国际联合神
经网络大会。
1990年我国的863高技术研究计划,批准了关于人工神经网络的三项课题,自然科学基金
与国防科技预研基金也都把神经网络的研究列入选题指南,对中选的课题提供研究上的
资助。
知识结构
一.神经网络的生物学知识
1.生物神经元
2.神经组织
3.大脑结构
二.基本数学工具
1.概率过程
2.连续时间的马尔科夫过程
3.离散状态系统与连续状态系统
4.概率微分方程
进一步地: 势条件与吉布斯分布
1.强势条件
2.弱势条件
3.细致平衡条件
4.正则系统和正则--散逸系统
5.Ito,Stratonovich概率微分方程及它们的福克--普朗克方程
三.热力学统计物理学
系统熵:
1.最大熵原理
2.最小相对信息原理
3.最小平均"能量"原理
4.有序与无序平衡原理
5.系统平衡态的熵
6.平衡状态的平均能量
7.最大熵分布
四.数学物理方程的基本求解方法
1.初始、边界条件
2.定解问题
3.解法(分离变量法、行波法、积分变换法、格林函数法、差分解)
五.基本模型
(一)前馈网络
1.M-P神经元模型
2.感知机模型
3.Adaline,Madaline网络
4.多层前馈网络
(二)反馈网络
1.Hopfield网络
2.双向联想记忆网络
(三)随机网络
1.Boltzmann机
2.Cauchy机
(四)自组织网络
1.Hamming网络
2.自组织特征映射网络
3.对传网络
4.认知机
5.自适应共振ART网络
(五)其他类型
1.脑模型联接控制器
2.模糊人工神经网络
3.分形人工神经网络
4.遗传算法构造的人工神经网络
六.全局优化
1.随机梯度法
2.模拟退火算法
3.遗传算法
七.实现方案
(一)基于传统计算机
1.软件模拟
2.并行处理器阵列
(二)基于硬器件的实现
1.VLSI(模拟,数字,混合)
2.光学器件
3.分子器件
(三)其它
1.生物工程器件
80年代初,在美国、日本、接着国内掀起了一股研究神经网络理论和神经计算机的热潮
,并将神经网络原理应用于图象处理、模式识别、语音综合及机器人控制等领域。近年
来,美国等先进国家又相继投入巨额资金,制定出强化研究计划,开展对脑功能和新型
智能计算机的研究。人脑是自生命诞生以来,生物经过数十亿年漫长岁月进化的结果,
是具有高度智能的复杂系统,它不必采用繁复的数字计算和逻辑运算,却能灵活处理各
种复杂的,不精确的和模糊的信息,善于理解语言、图象并具有直觉感知等功能。人脑
的信息处理机制极其复杂,从结构上看它是包含有140亿神经细胞的大规模网络。单个神
经细胞的工作速度并不高(毫秒级),但它通过超并行处理使得整个系统实现处理的高
速性和信息表现的多样性。因此,从信息处理的角度对人脑进行研究,并由此研制出一
种象人脑一样能够“思维”的智能计算机和智能信息处理方法,一直是人工智能追求的
目标。神经网络就是通过对人脑的基本单元---神经元的建模和联结,来探索模拟人脑神
经系统功能的模型,并研制一种具有学习、联想、记忆和模式识别等智能信息处理功能
的人工系统。神经网络的特点以及近年来有关神经网络与混沌理论、模糊计算和遗传算
法等相结合的混合神经网络研究的动态。
一.神经网络和联结主义
回顾认知科学的发展,有所谓符号主义和联结主义两大流派。符号主义从宏观层次上,
撇开人脑的内部结构和机制,仅从人脑外在表现出来的智能现象出发进行研究。例如,
将记忆、判断、推理、学习等心理活动总结成规律、甚至编制成规则,然后用计算机进
行模拟,使计算机表现出各种智能。符号主义认为,认识的基本元素是符号,认知过程
是对符号表示的运算。人类的语言,文字的思维均可用符号来描述,而且思维过程只不
过是这些符号的存储、变换和输入、输出而已。以这种方法实现的系统具有串行、线性
、准确、简洁、易于表达的特点,体现了逻辑思维的基本特性。七十年代的专家系统和
八十年代日本的第五代计算机研究计划就是其主要代表。联接主义则与其不同,其特点
是从微观出发。联接主义认为符号是不存在的,认知的基本元素就是神经细胞(神经元
),认知过程是大量神经元的联接,以及这种联接所引起的神经元的不同兴奋状态和系
统所表现出的总体行为。八十年代再度兴起的神经网络和神经计算机就是这种联接主义
的代表。神经网络的主要特征是:大规模的并行处理和分布式的信息存储,良好的自适
应、自组织性,以及很强的学习功能、联想功能和容错功能。与当今的冯.诺依曼式计
算机相比,更加接近人脑的信息处理模式。主要表现如下:
☆神经网络能够处理连续的模拟信号。例如连续灰度变化的图象信号。
☆能够处理混沌的、不完全的、模糊的信息。
☆传统的计算机能给出精确的解答,神经网络给出的是次最优的逼近解答。
☆神经网络并行分布工作,各组成部分同时参与运算,单个神经元的动作速度不高,但
总体的处理速度极快。
☆神经网络信息存储分布于全网络各个权重变换之中,某些单元障碍并不影响信息的完
整,具有鲁棒性。 ☆传统计算机要求有准确的输入条件,才能给出精确解。神经网络只
要求部分条件,甚至对于包含有部分错误的输入,也能得出较好的解答,具有容错性。

☆神经网络在处理自然语言理解、图象模式识别、景物理解、不完整信息的处理、智能
机器人控制等方面有优势。
符号主义和联接主义两者各有特色,学术界目前有一种看法:认为基于符号主义得传统
人工智能和基于联接主义得神经网络是分别描述人脑左、右半脑的功能,反映了人类智
能的两重性:精确处理和非精确处理,分别面向认识的理性和感性两个方面,两者的关
系应该是互补而非互相代替。理想的智能系统及其表现的智能行为应是两者相互结合的
结果。接下去的问题是,符号AI和联接AI具体如何结合,两者在智能系统中相互关系如
何?分别扮演什么角色?目前这方面发表的文献很多,大致有如下几种类型:
1.松耦合模型:符号机制的专家系统与联接机制的神经网络通过一个中间媒介(例如数
据文件)进行通讯。
2.紧耦合模型:与松耦合模型相比较,其通讯不是通过外部数据进行,而是直接通过内
部数据完成,具有较高的效率。其主要类型有嵌入式系统和黑板结构等。
3.转换模型:将专家系统的知识转换成神经网络,或把神经网络转换成专家系统的知识
,转换前的系统称为源系统,转换后的系统称为目标系统,由一种机制转成另一种机制
。如果源系统是专家系统,目标系统是神经网络,则可获得学习能力及自适应性;反之
,可获得单步推理能力、解释能力及知识的显式表示。当然,转换需要在两种的机制之
间,确定结构上的一致性,目前主要问题是还没有一种完备而精确的转换方法实现两者
的转换。有待进一步研究。
4.综合模型:综合模型共享数据结构和知识表示,这时联接机制和符号机制不再分开,
两者相互结合成为一个整体,既具有符号机制的逻辑功能,又有联接机制的自适应和容
错性的优点和特点。例如联接主义的专家系统等。近年来神经网络研究的另一个趋势,
是将它与模糊逻辑、混沌理论、遗传进化算法等相结合,即所谓“混合神经网络”方法
。由于这些理论和算法都是属于仿效生物体信息处理的方法,人们希望通过她们之间的
相互结合,能够获得具有有柔性信息处理功能的系统。下面分别介绍。
二.混沌理论与智能信息处理
混沌理论是对貌似无序而实际有序,表面上看来是杂乱无章的现象中,找出其规律,并
予以处理的一门学科。早在七十年代,美国和欧洲的一些物理学家、生物学家、数学家
就致力于寻求在许许多多不同种类的不规则性之间的联系。生物学家发现在人类的心脏
中有混沌现象存在,血管在显微镜下交叉缠绕,其中也有惊人的有序性。在生物脑神经
系统中从微观的神经膜电位到宏观的脑电波,都可以观察到混沌的性态,证明混沌也是
神经系统的正常特性。九十年代开始,则更进一步将混沌和神经网络结合起来,提出多
种混沌神经网络模型,并探索应用混沌理论的各种信息处理方法。例如,在神经元模型
中,引入神经膜的不应性,研究神经元模型的混沌响应,研究在神经网络的方程中,不
应性项的定标参数,不定性时间衰减常数等参数的性质,以及这些参数于神经网络混沌
响应的关系,并确定混沌---神经网络模型具有混沌解的参数空间。经过试验,由这种混
沌神经网络模型所绘出的输出图形和脑电图极为相似。现代脑科学把人脑的工作过程看
成为复杂的多层次的混沌动力学系统。脑功能的物理基础是混沌性质的过程,脑的工作
包含有混沌的性质。通过混沌动力学,研究、分析脑模型的信息处理能力,可进一步探
索动态联想记忆、动态学习并应用到模式识别等工程领域。例如:
☆对混沌的随机不规则现象,可利用混沌理论进行非线性预测和决策。
☆对被噪声所掩盖的微弱信号,如果噪声是一种混沌现象,则可通过非线性辨识,有效
进行滤波。
☆利用混沌现象对初始值的敏锐依赖性,构成模式识别系统。
☆研究基于混沌---神经网络自适应存储检索算法。
该算法主要包括三个步骤,即:特征提取、自适应学习和检索。模式特征提取采用从简
单的吸引子到混沌的层次分支结构来描述,这种分支结构有可能通过少数几个系统参数
的变化来加以控制,使复杂问题简单化。自适应学习采用神经网络的误差反传学习法。
检索过程是通过一个具有稳定吸引子的动力学系统来完成,即利用输入的初始条件与某
个吸引子(输出)之间的存在直接对应关系的方法进行检索。利用这种方法可应用于模
式识别。例如黑白图象的人脸识别。
三.模糊集理论与模糊工程
八十年代以来在模糊集理论和应用方面,也有很大进展。1983年美国西海岸AI研究所发
表了称为REVEAL的模糊辅助决策系统并投入市场,1986年美国将模糊逻辑导入OPS---5,
并研究成功模糊专家系统外壳FLOPS,1987年英国发表采用模糊PROLOG的智能系统FRIL等
。除此通用工具的研制以外,各国还开发一系列用于专用目的的智能信息处理系统并实
际应用于智能控制、模式识别、医疗诊断、故障检测等方面。模糊集理论和神经网络虽
然都属于仿效生物体信息处理机制以获得柔性信息处理功能的理论,但两者所用的研究
方法却大不相同,神经网络着眼于脑的微观网络结构,通过学习、自组织化和非线性动
力学理论形成的并行分析方法,可处理无法语言化的模式信息。而模糊集理论则着眼于
可用语言和概念作为代表的脑的宏观功能,按照人为引入的隶属度函数,逻辑的处理包
含有模糊性的语言信息。神经网络和模糊集理论目标相近而方法各异。因此如果两者相
互结合,必能达到取长补短的作用。将模糊和神经网络相结合的研究,约在15年前便已
在神经网络领域开始,为了描述神经细胞模型,开始采用模糊语言,把模糊集合及其运
算用于神经元模型和描述神经网络系统。目前,有关模糊---神经网络模型的研究大体上
可分为两类:一类是以神经网络为主,结合模糊集理论。例如,将神经网络参数模糊化
,采用模糊集合进行模糊运算。另一类以模糊集、模糊逻辑为主,结合神经网络方法,
利用神经网络的自组织特性,达到柔性信息处理的目的。与神经网络相比,模糊集理论
和模糊计算是更接近实用化的理论,特别近年来美国和日本的各大公司都纷纷推出各种
模糊芯片,研制了型号繁多的模糊推理板,并实际应用于智能控制等各个应用领域,建
立“模糊工程”这样一个新领域。日本更首先在模糊家电方面打开市场,带有模糊控制
,甚至标以神经---模糊智能控制的洗衣机、电冰箱、空调器、摄象机等已成为新一代家
电的时髦产品。我国目前市场上也有许多洗衣机,例如荣事达洗衣机就是采用模糊神经
网络智能控制方式的洗衣机。
四.遗传算法
遗传算法(Genetic Algorithm :GA)是模拟生物的进化现象(自然、淘汰、交叉、突
然变异)的一种概率搜索和最优化方法。是模拟自然淘汰和遗传现象的工程模型。GA的
历史可追溯到1960年,明确提出遗传算法的是1975年美国Michigan大学的Holland博士,
他根据生物进化过程的适应现象,提出如下的GA模型方案:
1.将多个生物的染色体(Chromosmoe)组成的符号集合,按文字进行编码,称为个体。

2.定义评价函数,表示个体对外部环境的适应性。其数值大的个体表示对外部环境的适
应性高,它的生存(子孙的延续)的概率也高。
3.每个个体由多个“部分”组合而成,每个部分随机进行交叉及突然变异等变化,并由
此产生子孙(遗传现象)。
4.个体的集合通过遗传,由选择淘汰产生下一代。
遗传算法提出之后,很快得到人工智能、计算机、生物学等领域科学家的高度重视,并
在各方面广泛应用。1989年美国Goldberg博士发表一本专著:“Genetic Algorithms i
n Search,Optimization and Machine Learning”。出版后产生较大影响,该书对GA的
数学基础理论,GA的基本定理、数理分析以及在搜索法、最优化、机器学习等GA应用方
面进行了深入浅出的介绍,并附有Pascal模拟程序。1985年7月在美国召开第一届“遗传
算法国际会议”(ICGA)。以后每隔两年召开一次。近年来,遗传算法发展很快,并广
泛应用于信息技术的各个领域,例如:
智能控制:机器人控制。机器人路径规划。
工程设计:微电子芯片的布局、布线;通信网络设计、滤波器设计、喷气发动机设计。

图象处理:图象恢复、图象识别、特征抽取。
调度规划:生产规划、调度问题、并行机任务分配。
优化理论:TSP问题、背包问题、图划分问题。
人工生命:生命的遗传进化以及自增殖、自适应;免疫系统、生态系统等方面的研究。

神经网络、模糊集理论和以遗传算法为代表的进化算法都是仿效生物信息处理模式以获
得智能信息处理功能的理论。三者目标相近而方法各异;将它们相互结合,必能达到取
长补短、各显优势的效果。例如,遗传算法与神经网络和模糊计算相结合方面就有:
☆神经网络连续权的进化。传统神经网络如BP网络是通过学习,并按一定规则来改变数
值分布。这种方法有训练时间过长和容易陷入局部优化的问题。采用遗传算法优化神经
网络可以克服这个缺点。
☆神经网络结构的进化。目前神经网络结构的设计全靠设计者的经验,由人事先确定,
还没有一种系统的方法来确定网络结构,采用遗传算法可用来优化神经网络结构。
☆神经网络学习规则的进化。采用遗传算法可使神经网络的学习过程能够适应不同问题
和环境的要求。
☆基于遗传算法的模糊推理规则的优化,以及隶属度函数的自适应调整也都取得很好效
果。
上述神经网络、模糊计算、遗传算法和混沌理论等都是智能信息处理的基本理论和方法
。近年来学术界将它们统称为“计算智能”。有关这方面更详细的内容,可参阅编著的
下列著作:
“神经网络与神经计算机”(1992年科学出版社出版)
“遗传算法及其应用” (1996年邮电出版社出版)
“混沌、分形及其应用” (科大出版社出版)。
面向对象的五子棋神经网络程序设计
一 概 述
  人工神经网络(以下简称神经网络)是一门高度综合的交叉学科,其理论研究和实际
应用的发展已引起我国广大科技工作者的极大关注。神经网络因其具有自组织、自学习
、自适应和并行处理(响应速度快)等特点以及很强的输入输出非线性映射能力和易于
学习和训练的优点,不仅被广泛应用于模式识别、图像处理、故障诊断和优化组合等方
面。目前网络模型的表示和实现五花八门,其应用程序也普遍存在编程效率低、通用性
差等缺点,寻求一种良好的实现方法,必将对神经网络的应用发展有推动作用。面向对
象的程序设计(OOP)是模仿现实世界模型方法的程序设计风格,它具有很好的概括、分
类和抽象能力,该方法已被广泛应用于程序设计语言、形式定义、操作系统、人工智能
、实时系统、数据库等多种领域。尽管现在存在多种类型的神经网络,但在其拓扑结构
和神经元权值信息的整体表现形式上具有很大的共性,而采用OOP实现这些共性是非常有
效的。用面向对象的程序设计语言C++,建立了能描述神经网络模型对象的类Network,
并在此基础上提出了五子棋神经网络程序。
二 OOP的基本概念   
OOP(Object-Oriented Programming)是促进模块化设计和软件重用的一种行之有效的
程序设计方法,是一种基于新的设计思想和计算风格的信息处理技术。现简单介绍一下
文中涉及的几个重要概念:
对象(object) 对象是指由一组数据及与该组数据相关的一组操作所构成的一个实体
。它不仅代表了普遍使用的物体的直接抽象,而且对用户掩蔽了实现的复杂性。
类(class) 类是指在某种抽象意义上具有相同数据结构与行为(过程)的对象。类是
由一组变量和一组操作构成,它描述一组对象共有或相似的性质。
继承(inheritance) 继承是指一个新定义的对象可从另一个已被定义的对象引伸或扩
充出来,这个被引伸或扩充出来的新对象就拥有了已被定义对象中定义的特性,而只需
定义其扩展的部分。 
多态性(polymorphism) 给对象的操作定义一个名字,它从上到下共享一个类等级。

每个类都以适合自己的方式实现这个行为,在C++中主要体现在虚函数的应用上。 类模
板(template) 在C++中允许单个的类处理通用的数据类型T。这种类并不是类,而仅
是类的描述,通常称为类模板。如下文中提到的Vector(Unit*)和Matrix(Link*)便是这
种意义上的类模板,它使得对神经元Unit和连接权Link的操作变得十分简单直观。 OO
P中的类结构通过类接口和类实现分离开来支持信息隐藏,这种分离允许类接口映射到多
种不同实现,对用户掩蔽了实现的复杂性。继承机制使对象具有很好的可扩展性,也易
于实现软件的重用。这些特性都非常适应于神经网络。
三 神经网络模型的C++描述
在面向对象的程序设计中,一个类的结构包括类实现和类接口两部分。类实现是指用一
组变量去描述类对象的内部状态即特性,类接口实际上是对类对象实施操作的一组函数
,提供给类用户访问该对象。本文提出类Network,来完成对神经网络模型的完全描述。

Network的类实现 组成神经网络模型最基本的要素是神经元和突触权,因此建立类Uni
t和类Link。类Link的实现比较简单,包括状态变量如权值、表征权值是否允许更改的逻
辑量以及更新权值操作等。而神经元由于响应机制(如激励函数)的不同,因而具有多
种类型。由类的继承性特性,首先定义一个抽象的神经元类,便于上层操作的统一性。
其他具体神经元对象是对该抽象类的继承,如线性神经元、符号神经元等。类Unit作为
特定神经元的父类,其激励响应函数fire()被定义为纯虚函数,依赖于特定类型的神
经元。  
class Unit{
UnitType type;     // 神经元类型,如Sigmoid神经元
 doubleactivation;// 神经元的激励响应变量,即输出
 doublebias;// 神经元的阈值变量
 doubleinput;// 神经元的输入变量
 Booleanfrozen;// Boolean表示frozen为逻辑型变量,若frozen为true,则不允许更新
该阈值        
 void updatebias( double w ); //将神经元阈值更新为w
 virtual fire( double in )=0; //纯虚函数,根据不同的神经元类型,采用响应激
励函数计算神经元响应 和函数导数等    
}   
一般来说,神经元向量和权连接矩阵即可形象地描述一个完整的神经网络对象。因此,
引入了类模板的概念,创建了类Vector(class T)和Matrix(class T),实现对通用数据
类型T的矩阵操作和向量操作,如插入或删除某一元素T,以及矩阵中删除某一行(列)等
。将神经元类Unit和突触权类Link分别作为Vector和Matrix中的通用数据类型,这样便
获得对神经网络模型的完整而直观的描述如下:    
class Network{     
private:      
Vector(Unit *) UnitVector;      
Matrix(Link *) LinkMatrix;      
int insize,outsize;  //网络输入和输出维数
}   
其中UnitVector[i]表示对象神经单元i,通过对象的接口便可实现对该神经元的操作
。LinkMatrix[i][j]表示神经元i到神经元j的连接单元,同样通过类接口便可实现
对该连接单元的操作。这样的表达符合我们对神经网络的直观认识。为了避免在常规二
维数组表示法中的空间浪费,当神经元i到神经元j之间无连接关系时,则将LinkMatrix
[i][j]的指针赋予NULL空指针,不占用空间。
Network的类接口 在Network类实现的基础上,来定义该类的接口。从神经网络的运行
机理分析,类接口主要支持两类操作:一是对网络结构的创建与重构;二是各种算法的
实现。而在算法的实现中主要涉及到网络从输入到输出的映射运算和对神经网络对象信
息的存取等类接口操作。于是定义Network的类接口如下:
class Network{  
//用于网络模型创建以及结构调整(结构优化)
CreatUnit(int i,double thita,UnitType type,Boolean frozen);
Connect(int i,int j,double w,Boolean frozen);
DestroyUnit(int i);
DestroyLink(int i,int j);//网络自身输入到输出的映射运算,由于函数多态性的
存在,参数数目不定 //故省略
runSync();  // 串行计算,即按顺序依次计算神经元响应,例如BP网
runParallel();// 并行计算,同时计算每一神经元的响应,例如Hopfield网
runAsync();  // 随机计算,按随机的顺序计算每一神经元响应    //用于获取网
络状态变量
Unit* getUnit(i);  // 获得指向神经元i的类对象指针
Link* getLink(i,j); // 获得指向由神经元i到神经元j的连接的类对象指针
 //其它(可根据具体用户要求进行扩展)
initweight();// 初始化网络权值
test();   // 对检验样本数据进行测试,返回神经网络检验误差

四 五子棋神经网络程序的实现
  五子棋神经网络的学习过程就是根据训练样本,按一定的算法,调节网络权值至最
优的过程。为此,我们补充定义类PatternSet,即样本数据集。同时通过类Network的类
接口定义了一些典型的外部操作函数以及各种算法的调用函数(如BP):ReadNetWork(F
ILE* fname,Network net) WriteNetwork(FILE* fname,Network net) ReadPat
ternSet(FILE* fname,PatternSet set) BP1( Network net,PatternSet set,d
ouble step, double momentum) BP2( Network net,double input[],double ou
tput[], double step,double momentum)从而使得该程序具有以下两个显著的特点:
(1)五子棋神经网络模型自动实现 调用外部函数ReadNetwork(),可直接从具有一定输
入格式的五子棋网络输入文件中读入网络的拓扑结构及网络权值的初值(也可无),自
动完成五子棋神经网络模型对象的实现,从而对用户掩蔽了实现的复杂性,同时使建模
工作一劳永逸。WriteNetwork()即记录已学好的网络模型,这对于动态系统的辨识尤
为重要,因为往往利用离线学习模型,进行在线辨识与学习。ReadPatternSet()用来一
次性读取样本空间的输入输出数据,建立样本集set,主要用于静态样本数据的学习。 
(2)各种算法独立编程程序化,可供直接调用。神经网络的权值学习算法不胜枚举,常用
的如BP及其各类改进算法,模拟退火(SA)、遗传算法(GA)、最小二乘法(LMS)等等
。通过Network的类接口,可在不知具体网络结构参数的情况下,将各种算法程序化,以
供直接调用。如上文中BP算法的两种调用形式。程序初始化调用函数。
五 实战应用
在神经网络模型对象基础上提出的五子棋神经网络程序,在应用中都体现了良好的通用
性和实现的简便性。下面以其在五子棋实战中的应用为例予以说明。考虑五子棋模型如
下:系统辨识网络模型响应为零均值、方差为0.1,为系统的输出量测,为系统的输入。
采用串并结构的神经网络辨识模型,多层网络取,首先形成表征五子棋网络结构输入文
件;然后取[ -1 ,1 ]区间内均匀分布的随机数和 u( k )作输入激励,分别形成训
练样本集和检验样本集,采用BP算法,调用函数BP1(),其离线辨识流程所示,编程十
分简洁。而在线辨识仅需在离线学习的网络模型上,结合所采用的辨识结构,实时产生
训练样本,调用函数BP2(),也无需更动程序本身。 a、b、c 分别为实际系统、离线
辨识模型和在线辨识模型对实际激励 u ( k )的输出响应,基本上和实际响应重合,
说明在线学习不仅提高了模型的抗干扰能力,也可进一步减小静态学习误差。
六 结论  
采用C++中的类描述了神经网络模型,由于概念和五子棋对象模型的一一对应关系,使建
立的模型更容易被人理解。在此基础上采用面向对象的程序设计方法建立的五子棋神经
网络程序,具有很好的通用性和重用性,同时结构和权值的调整算法编程具有相对的独
立性(需要说明的是,给出的程序仅是描述性的,不是严格的C++程序代码)。

--
  不在乎天长地久,就怕你从来没有!

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 天外飞仙]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:205.042毫秒