搜档网
当前位置:搜档网 › 基于MATLAB的局域网多机并行遗传算法求解不确定优化问题

基于MATLAB的局域网多机并行遗传算法求解不确定优化问题

基于MATLAB的局域网多机并行遗传算法求解不确定优化问题
基于MATLAB的局域网多机并行遗传算法求解不确定优化问题

技术创新

软件时空

您的论文得到两院院士关注

基于MATLAB的局域网多机并行遗传算法求解不确定优化问题

SolutionofoptimizationunderuncertaintybyparallelgeneticalgorithmbasedonMATLABunderlocalareanetwork

(武汉科技大学)蒋

峥刘斌方康玲

Jiang,ZhengLiu,BinFang,Kangling

摘要:本文提出一种新的不确定非线性优化问题的确定化形式,采用局域网多机并行遗传算法求解不确定优化问题,应用常用的计算软件MATLAB来实现该算法。通过在主机上开辟共享缓冲区,在其中设立数据文件,主机和从机都用MATLAB语言中读写文件的命令来交换数据,以实现局域网中的并行计算环境。该算法编程简便,充分利用操作系统提供的数据共享传输功能,性价比较高。

关键词:局域网;并行计算;不确定优化;遗传算法中图分类号:TP311.1文献标识码:B

Abstract:Thedeterministicframeworkofthenonlinearprogrammingunderuncertaintyispresentedinthispaper.Theparallelgeneticalgorithmunderthelocalareanetworkisusedtosolvetheframework.ThealgorithmisimplementedwithcommonsoftwareMAT-LAB.Thesharedbufferarea,inwhichthedatafileisused,iscreatedinthemastercomputer,andthemastercomputerandtheslavecomputerscanexchangeinformationbyusingthefileoperationcommands.Thealgorithmisimplementedsimple,effectivelyuti-

lizingtheoperatingsystem’

sperformanceofdatasharingandtransforming.Keywords:localareanetwork;parallelcomputation;optimizationunderuncertainty;geneticalgorithm

文章编号:1008-0570(2006)05-3-0215-02

1引言

随着优化问题规模的扩大,非线性程度的加大,由单台计算机来进行优化问题的求解,所花费的计算时间越来越长。并行计算技术的出现,为这类问题的求解,带来了新的突破。但是,由于并行计算机的购置成本非常昂贵,所以采用并行计算机的方案有一定的局限性。另一方面,随着PC机运行速度的大幅度提高,成本的不断降低,再加上局域网技术的不断发展,以PC机为主体的局域网多机并行计算环境成为了并行计算技术的一个新的发展点。由于局域网并行计算环境需要一定的软件操作平台,而这类软件大都为商业软件,成本高。MATLAB语言是一种常见的数学计算软件,以MATLAB来实现并行计算平台,性价比较高。

按照模型参数的确定与否,优化问题分为确定性优化和不确定优化两类问题。不确定优化一般又分为随机规划、模糊规划和区间规划三种。随机规划需要知道不确定参量的精确概率分布信息,模糊规划需要知道不确定量的模糊隶属度函数。而区间规划仅需要知道不确定参量的变化范围。目前区间规划大都局限于线性情形。本文研究区间非线性规划问题的求解,提出一种MATLAB环境下的局域网多机并行遗传算法的求解算法。

2区间非线性规划问题的确定化描

述形式

实际不确定性非线性系统的优化问题可描述为

P1:(1a)s.t.:

(1b),

(1c)

其中,为决策向量,

为系统约束输

出,

为系统不确定参数,

、分别为置信

区间的下界与上界。为一个非线性目标函数。表示包含有不确定参数的非线性等式约束。

针对上述优化问题,本文提出将不确定性的目标函数转化为一个确定性的极大极小问题。

对于优化问题P1,给定一个决策,则目

标函数值

的变化区间可表示为

其中

而区间表示不确定参数的

变化范围。

蒋峥:博士

基金项目:国家科技攻关计划,编号2005BA102C,“基于FPGA技术的个人定位导航与监控系统”

技术创新

对于区间中的任意值,定义风险系数为

(2)

这里,α

表示因参数的不确定性而使决策μ实

际获得的目标函数值大于等于λ的风险因子。由(2)式

可得到

(3)

(3)式表示在具有风险系数α1的前提下,决策μ

可以获得的最大目标函数值为λ。

于是,可将原不确定目标函数(1a)式转化为以下

确定性的优化目标:

(4)

其中,风险系数表示决策者在追求最大

目标函数值时所愿意承担的风险程度。

此外,考虑到不确定参数会给决策实际获得的目标函

数值造成偏差,其最大偏差为:

(5)

为了体现决策者在决策时对这种偏差大小的不

同要求,本文采用以下式子来表示

(6)

对于不确定性约束条件的确定性转化,本文考虑

对于给定的决策,定义

,,(7)

这里仅考虑硬约束问题,即要求存在一个可行决

策区域D,使D中任意一个决策,对任何,

均满足

(8)

3MATLAB环境下的局域网并行遗

传算法

通过上述讨论,原不确定性优化问题P1可转化

为以下确定性优化命题:

P2:(9)

s.t.:

其中

由于命题P2存在着计算量较大的非线性子优化

问题(如J

min

(μ)),如果采用主从式并行遗传算法,将子

优化问题交予从机网络进行求解,主机负责全局优化

命题(9)式的求解,将有效提高系统的求解速度。

本文采用MATLAB作为计算平台,在主机中开辟

一块共享缓冲区,主机和从机都可以存取该缓冲区中

的计算任务。利用MATLAB中的文件打开fopen和文

件关闭fclose操作命令,以及文件读fscanf和文件写

fprintf命令,对共享缓冲区的计算任务进行操作,主从

机得以交换数据。对于每一个计算任务,设立一个操

作完成与否的标志位。在对数据进行操作之前,先进

行文件打开操作,操作结束后,再把该文件关闭。读数

据时,为保证读出数据的完整和有效,本文在采用fs-

canf之前,使用命令isempty来判断文件内容是否为

空。若为空,则使用命令frewind将读数据指针复位,然

后重新读该文件,大致过程参见以下程序段。

在由一台主机和若干台从机组成的并行计算环

境中,主机完成遗传算法运算,并且负责将需要计算

目标函数值的样本点分配给各从机,并等待从机完成

计算任务。而各从机负责计算样本点的目标函数值。

本文采用在主机的共享缓冲区common中设立数

据文件data.txt,并约定从不同从机得到的数据位于

data.txt中的不同字段B(i)。

fid=fopen(G:\common\data.txt,’r’);

whilefid==-1

fid=fopen(G:\common\data.txt,’r’);

end

B=fscanf(fid,’%f’);

whileisempty(B)

frewind(fid);

B=fscanf(fid,’%f’);

end

fclose(fid);

slavecomputer1=B(1);

slavecomputer2=B(2);

slavecomputer3=B(3);

4结论

本文提出一种新的不确定非线性优化问题的确

定化形式,采用局域网多机并行遗传算法求解不确定

优化问题,应用常用的计算软件MATLAB来实现该算

法。采用该算法来实现并行计算环境,编程简便,性价

比较高。

本文作者创新点:

1.提出了区间非线性优化问题的确定化描述形

式。该形式能够恰当地反映出决策者在追求最优值时

所准备承担的风险程度,同时也能反映出决策者对不

确定参数给目标函数造成偏差程度的不同要求。

2.将区间非线性规划转化为确定化形式的极大

极小问题后,提出采用主从式并行遗传算法求解大规

模非线性规划问题。

3.提出基于MATLAB的局域网多机并行计算环

境的实现策略。该策略实现简便,可靠性好,性价比较高。

参考文献:

[1]赵立伟,张春,施寅.面向过程的编译和解释环境在工控组态软

件系统中的应用[J].微计算机信息,2005,4:20-21

[2]张吉军,樊玉英,区间数线性规划问题的最优性条件.运筹与

管理,12(2):44-47,2003.

[3]郭均鹏,吴育华,区间线性规划的标准型及(转222页)

技术创新

quest_rec*req),浏览器就是调用这个函数来传递http

字符串的。数据结构request_rec是Apache头文件里规定的数据结构,包含了网络服务器的信息。它先从配置文件里取得数据库名,日志文件路径,数据库用户名密码等系统配置信息;确定数据库、中间件启动;为事务处理分配缓冲区;最后调用函数ProcessQueryS-tring(req)处理http队列。ProcessQueryString(req)函数从浏览器传输来的http包种抽取出事务处理的信息,包括事务类型,仓库号w_id,街区号ld_id。根据抽取的信息调用相应的事务处理函数。假若发现是NewOrder请求,那么该函数就调用NewOrder的处理函数Pro-

cessNewOrderQuery(req,ptr,w_id,ld_id),这个处理函数从http信息中抽取出更确切的信息,例如街区号d_id,顾客号c_id,订单号ol_i_id等。处理完后把信息存放在pNewOrder数据结构中,然后通过调用Tuxedo客户端实现函数TPCCNewOrder(pNewOrder)请求Tuxedo服务器服务。

4实验结果

首先确定组件间连接和浏览器显示的输入输出页面符合TPC-C规范。然后,启动客户端程序,对服务器进行访问测试。

本结果旨在证明Apache+Tuxedo+Oracle在Kylin上实现测试系统的正确性和本系统符合TPC-C规范,所以在两台普通PC上做测试。测试环境硬件介绍:客户端和服务器端都是联想计算机,512M内存;通过以太网连接。软件:服务器端:Kylin2.0操作系统,

Oracle9i数据库管理系统;客户端:Kylin2.0操作系统,

Oracle9i客户端,Tuxedo8.1,Apache2.0。本测试旨在验证测试系统运行的功能完善,性能良好,所以在服务器上的数据库中灌了15个WareHouse的数据,在客户端启动了200个虚拟用户。测试结果如下:

图2每分钟New-Order事务个数统计图

图2是系统对Kylin测试形成的曲线图,横轴表示测试进行时间,纵轴表示处理的订单数。可以看出

Kylin在15个仓库,200个虚拟用户的情况下,每大吞吐量(MQTh)即每分钟处理的订单数为130。需要说明的是,因为取值点的间隔时间偏长而使曲线不圆滑。

5结论

TPC基准程序的标准规范是对公共开放的,任何

软硬件厂商或其它测试者可以根据标准规范,最优地构建自己待测的系统。本文主要阐述用Apache+Tuxedo+Oracle在国产Kylin服务器操作系统上实现

TPC-C测试系统的整体架构和实现技术,在设计和开发过程中尽量避免测试工具对测试结果造成的影响,得到客观的测试结果。本文构建的TPCC测试系统为Kylin操作系统的性能调优提供了一定的参考。

参考文献:

[1]徐春金编著.Tuxedo中间件可发与配置.中国电力出版社.北京.2003

[2]余忠华,刘亚斌,李军,王志奇.传动机构测试系统的设计[J].微计算机信息,2005,1:87-88[3]www.Apache.com

作者简介:孙雪祥,女,1981年12月出生,汉族,山东即墨人,在国防科学技术大学读软件方向的研究生,

E-mail:kujiangzhu@163.com;蒋艳凰,女,博士,主要从事软件工程方面的研究;张怡,女,博士,硕士生导师,主要从事信息安全方面的研究

Authorbriefintroduction:SunXuexiang,female,bronin12.1981,Han,grownupinJiMoofShanDongprovince,study-ingformasterdegreeofsoftwareinnationaluniversityofde-fensetechnology.

通讯地址:(410073湖南长沙国防科技大学计算机学院软件工程硕士03级宁波班)孙雪祥

(投稿日期:2005.9.12)(修稿日期:2005.10.12)

(接216页)其求解.系统工程,21(3):79-82,2003

[4]Darlington,J.,Pantelides,C.C.,Rustem,B.,&Tanyi,B.A,De-creasingthesensitivityofopen-loopoptimalsolutionsindecisionmakingunderuncertainty.

EuropeanJournalofOperationalRe-

search,121(2):343-362,2000.

[5]Darlington,J.,Pantelides,C.C.,Rustem,B.,&Tanyi,B.A,().Analgorithmforconstrainednonlinearoptimizationunderuncer-tainty.Automatica,35(2):217-228,1999.

作者简介:蒋峥:男,1970年生,汉族,2005年获博士学位。研究方向:并行计算,不确定系统优化,计算机控制,E-mail:zjiangmail@126.com;刘斌:女,1972年生,汉族,2005年获博士学位。研究方向:过程控制与优化,计算机控制;方康玲:女,1945年生,汉族,教授。研究方向:高级过程控制,图像处理

Authorbriefintroduction:ZhengJiang:

male,bornin1970,

Ph.D.ResearchFields:ParallelComputation,Optimizationun-deruncertainty,

ComputerControlTheoryandAlgorithm,

E-

mail:zjiangmail@126.com

Address:DepartmentofAutomation,CollegeofIn-

formationScienceandEngineering,WuhanUniversi-tyofScienceandTechnology,Wuhan430081,China.通讯地址:(430081湖北省武汉科技大学信息科学与工程学院自动化系)蒋峥

(投稿日期:2005.9.8)(修稿日期:2005.10.20)

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

MATLAB课程遗传算法实验报告及源代码

硕士生考查课程考试试卷 考试科目: 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点最短路径,其中没有连接端点表示没有路径。要求设计遗传算法对该问题求解。 a e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 一、问题分析(10分) 这是一个简单的三元函数求最小值的函数优化问题,可以利用遗传算法来指导性搜索最小值。实验要求必须以matlab 为工具,利用遗传算法对问题进行求解。 在本实验中,要求我们用M 函数自行设计遗传算法,通过遗传算法基本原理,选择、交叉、变异等操作进行指导性邻域搜索,得到最优解。 二、实验原理与数学模型(20分) (1)试验原理: 用遗传算法求解函数优化问题,遗传算法是模拟生物在自然环境下的遗传和进化过程而形成的一种自适应全局优化概率搜索方法。其采纳了自然进化模型,从代表问题可能潜在解集的一个种群开始,种群由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体;初始种群产生后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的解:在每一代,概据问题域中个体的适应度大小挑选个体;并借助遗传算子进行组合交叉和主客观变异,产生出代表新的解集的种群。这一过程循环执行,直到满足优化准则为止。最后,末代个体经解码,生成近似最优解。基于种群进化机制的遗传算法如同自然界进化一样,后生代种群比前生代更加适应于环境,通过逐代进化,逼近最优解。 遗传算法是一种现代智能算法,实际上它的功能十分强大,能够用于求解一些难以用常规数学手段进行求解的问题,尤其适用于求解多目标、多约束,且目标函数形式非常复杂的优化问题。但是遗传算法也有一些缺点,最为关键的一点,即没有任何理论能够证明遗传算法一定能够找到最优解,算法主要是根据概率论的思想来寻找最优解。因此,遗传算法所得到的解只是一个近似解,而不一定是最优解。 (2)数学模型 对于求解该问题遗传算法的构造过程: (1)确定决策变量和约束条件;

遗传算法Matlab程序

% f(x)=11*sin(6x)+7*cos(5x),0<=x<=2*pi; %%初始化参数 L=16;%编码为16位二进制数 N=32;%初始种群规模 M=48;%M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异 T=100;%进化代数 Pc=0.8;%交叉概率 Pm=0.03;%%变异概率 %%将十进制编码成16位的二进制,再将16位的二进制转成格雷码 for i=1:1:N x1(1,i)= rand()*2*pi; x2(1,i)= uint16(x1(1,i)/(2*pi)*65535); grayCode(i,:)=num2gray(x2(1,i),L); end %% 开始遗传算子操作 for t=1:1:T y1=11*sin(6*x1)+7*cos(5*x1); for i=1:1:M/2 [a,b]=min(y1);%找到y1中的最小值a,及其对应的编号b grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体y1(1,b)=inf;%用来排除已找到的最小值 end for i=1:1:M/2 p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置if rand()

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

遗传算法的MATLAB程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

遗传算法求函数极大值(matlab实现)

遗传算法求函数最大值(matlab实现) 一、题目: 寻找f(x)=x2,,当x在0~31区间的最大值。 二、源程序: %遗传算法求解函数最大值 %本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些 Close all; Clear all; figure(1); fplot('variable*variable',[0,31]); %画出函数曲线 %以下定义遗传算法参数 GTSM=40; %定义个体数目 ZDYCDS=20; %定义最大遗传代数 EJZWS=5; %定义变量的二进制位数 DG=0.9; %定义代沟 trace=zeros(2, ZDYCDS); %最优结果的初始值

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异 Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定 规模的二进制种群和结构gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换 ObjV=variable*variable; %计算目标函数值f(x)=x2 while gen

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

matlab遗传算法程序

matlab遗传算法程序共13个.m文件。 1、B2F.m function [B,len,v]=B2F(sol,bounds) %[B,len]=B2F(x,bounds) 二进制编码函数 %x 编码向量如x=[6 8 9]; %bounds 边界约束ru如bounds=[4 8 ;3 11;6 12;]; %B 二进制编码串 %编码长度L由bounds(2)-bounds(1)决定 %以上为例: % 编码长度向量L=[4 8 6]编成二进制L=[11 1000 110],则len=[2 4 3] % 计算B=x-bound(1)=[2 5 3]编成二进制B=[10 0101 011] n=length(sol); len=[];B=[];v=[]; L=bounds(:,2)-bounds(:,1); L=de2bi(L); for i=1:n len(i)=length(L(i,:)); end v=sol-bounds(:,1)'; for i=1:n B=[B de2bi(v(i),len(i))]; end

2、changes.m function [pops]=changes(cpop,bounds,len,p) %基因突变函数 %function [pops]=changes(pop,bounds,len,p) %pop 种群数目 %bounds 边界约束 %len 每个变量的编码长度 % 如len为[4 3 3];表示有三个变量,第一个变量的二进制编码长度为4,依次类推%p 突变概率 %pops 返回突变后的基因 %p1 基因突变数目 if isempty(p) p=0.01; end [n,m]=size(cpop); pop=cpop; p1=round(sum(len)*n*p); k=0;q=[];v=[]; while(k

遗传算法的原理及MATLAB程序实现

1 遗传算法的原理 1.1 遗传算法的基本思想 遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。 遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。 1.2 遗传算法的特点 1.2.1 遗传算法的优点 遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点: 1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。 2. 遗传算法具有内在的本质并行性。它的并行性表现在两个方面,一是遗传

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

关于遗传算法的matlab程序

matlab遗传算法工具箱函数及实例讲解(转引) gaotv5 核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。

遗传算法GA的MATLAB代码

MATLAB实现算法代码:GA(遗传算法)——整数编码 function [BestGene,aa] = GA(MaxGeneration,GeneSize,GeneNum,pcross,pmute,minGene,maxGene) Parent = Init(GeneSize,GeneNum,minGene,maxGene); [BestGene,Parent] = KeepBest(Parent); aa = []; for i = 1:MaxGeneration [i 1/value(BestGene)] Child = chose(Parent); Child = cross(Child,pcross); Child = mute(Child,pmute,maxGene); [BestGene,Parent] = KeepBest(Child); aa = [aa;value(BestGene)]; end function GeneInit = Init(GeneSize,GeneNum,minGene,maxGene) GeneInit = []; for i = 1:GeneSize x = []; x = ceil(rand(1,GeneNum).*(maxGene-minGene)) + minGene; GeneInit = [GeneInit;x]; end GeneInit = [GeneInit;x]; function Child = chose(Parent) GeneSize = size(Parent,1); for i = 1:GeneSize x = Parent(i,:); val(i) = value(x); end ValSum = sum(val); val = val / ValSum; for i = 2:GeneSize val(i) = val(i) + val(i-1); end for i = 1:GeneSize randval = rand; if randval <= val(1) Child(i,:) = Parent(1,:); end for j = 2:GeneSize if randval > val(j-1) && randval <= val(j)

遗传算法MATLAB仿真程序

function [pso F] = PSO_2D() % FUNCTION PSO --------USE Particle Swarm Optimization Algorithm %global present; % close all; pop_size = 10; % pop_size 种群大小 part_size = 2; % part_size 粒子大小, ** =n-D gbest = zeros(1,part_size+1); % gbest 当前搜索到的最小的值 max_gen = 80; % max_gen 最大迭代次数 region=zeros(part_size,2); % 设定搜索空间范围 region=[-3,3;-3,3]; % **每一维设定不同范围 rand('state',sum(100*clock)); % 重置随机数发生器状态 arr_present = ini_pos(pop_size,part_size); % present 当前位置,随机初始化,rand()的范围为0~1 v=ini_v(pop_size,part_size); % 初始化当前速度 pbest = zeros(pop_size,part_size+1); % pbest 粒子以前搜索到的最优值,最后一列包括这些值的适应度 w_max = 0.9; % w_max 权系数最大值 w_min = 0.4; v_max = 2; % **最大速度,为粒子的范围宽度 c1 = 2; % 学习因子 c2 = 2; % 学习因子 best_record = zeros(1,max_gen); % best_record记录最好的粒子的适应度。 % ———————————————————————— % 计算原始种群的适应度,及初始化 % ———————————————————————— arr_present(:,end)=ini_fit(arr_present,pop_size,part_size); % for k=1:pop_size % present(k,end) = fitness(present(k,1:part_size)); %计算原始种群的适应度 % end pbest = arr_present; %初始化各个粒子最优值[best_value best_index] = min(arr_present(:,end)); %初始化全局最优,即适应度为全局最小的值,根据需要也可以选取为最大值 gbest = arr_present(best_index,:);

遗传算法及其MATLAB程序代码

遗传算法及其MATLAB实现 主要参考书: MATLAB 6.5 辅助优化计算与设计飞思科技产品研发中心编著电子工业出版社2003.1 遗传算法及其应用陈国良等编著 人民邮电出版社1996.6 主要内容: 遗传算法简介 遗传算法的MATLAB实现 应用举例 在工业工程中,许多最优化问题性质十分复杂,很难用 传统的优化方法来求解.自1960年以来,人们对求解这类难 解问题日益增加.一种模仿生物自然进化过程的、被称为“ 进化算法(evolutionary algorithm)”的随机优化技术在解这 类优化难题中显示了优于传统优化算法的性能。目前,进化 算法主要包括三个研究领域:遗传算法、进化规划和进化 策略。其中遗传算法是迄今为止进化算法中应用最多、比较 成熟、广为人知的算法。 一、遗传算法简介 遗传算法(Genetic Algorithm, GA)最先是由美国Mic- hgan大学的John Holland于1975年提出的。遗传算法是 模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算 模型。它的思想源于生物遗传学和适者生存的自然规律, 是具有“生存+检测”的迭代过程的搜索算法。遗传算法 以一种群体中的所有个体为对象,并利用随机化技术指 导对一个被编码的参数空间进行高效搜索。其中,选择、 交叉和变异构成了遗传算法的遗传操作;参数编码、初始 群体的设定、适应度函数的设计、遗传操作设计、控制参 数设定等5个要素组成了遗传算法的核心内容。 遗传算法的基本步骤: 遗传算法是一种基于生物自然选择与遗传机理的随机 搜索算法,与传统搜索算法不同,遗传算法从一组随机产 生的称为“种群(Population)”的初始解开始搜索过程。种 群中的每个个体是问题的一个解,称为“染色体(chromos ome)”。染色体是一串符号,比如一个二进制字符串。这 些染色体在后续迭代中不断进化,称为遗传。在每一代中 用“适值(fitness)”来测量染色体的好坏,生成的下一代染 色体称为后代(offspring)。后代是由前一代染色体通过交 叉(crossover)或者变异(mutation)运算形成的。 在新一代形成过程中,根据适度的大小选择部分后代,淘 汰部分后代。从而保持种群大小是常数。适值高的染色体 被选中的概率较高,这样经过若干代之后,算法收敛于最 好的染色体,它很可能就是问题的最优解或次优解。 主要步骤如下所示: (1)编码:GA在进行搜索之前先将解空间的解数据表示成 遗传空间的基因型串结构数据,这些串结构数据的不同组 合便构成了不同的点。 (2)初始群体的生成:随机产生N个初始串结构数据,每个 串结构数据称为一个个体,N个个体构成了—个群体。 GA以这N个串结构数据作为初始点开始迭代。

标准遗传算法的MATLAB实现

%标准遗传算法 %优化函数为f=-(x-1)^2+4,其中,0<=x<=3 %编码长度为10位,编码精度为0.0029 %种群规模设为40,遗传算子分别为比例选择,单点交叉和单点变异。交叉概率0.7,变异概率0.1 %最大进化代数为200代,保优操作。 main.m initial; global G; for G=1:200 crossover; mutation; adapting; keepbest; selection; end result; %初始化函数,随机形成规模为40初始种群 initial.m pop(40,10)=0; best_individual(10)=0; %最优个体 adapt_ave(200)=0; %种群平均适应值 for i=1:40 for j=1:10 if rand>0.5 pop(i,j)=1; else pop(i,j)=0; end end end % pop clear i; clear j; %交叉操作,概率为0.7,单点交叉 crossover.m for i=1:2:39 cross_P=rand; %随机产生一个数,以比较交叉概率 if cross_P<0.9 %交叉概率为0.9 cross_pos=round(10*rand); %交叉位置为0~9,若位置为0或9,则不进行交叉操作if or(cross_pos==0,cross_pos==9) continue; end

for j=cross_pos:10 temp=pop(i,j); pop(i,j)=pop(i+1,j); pop(i+1,j)=temp; end end end clear i; clear j; clear temp; clear cross_P; clear cross_pos; %变异操作,单点变异,变异概率为0.1 mutation.m for i=1:40 if rand<0.1 %通过变异概率 M_pos=round(10*rand); if M_pos~=0 %若变异位为0则无意义 pop(i,M_pos)=1-pop(i,M_pos); end end end clear M_pos; clear i; %计算适应值 adapting.m for i=1:40 adapt(i)=0; end for i=1:40 for j=1:10 if pop(i,j)==1 adapt(i)=adapt(i)+2^(10-j); end end adapt(i)=adapt(i)*0.0029; adapt(i)=-(adapt(i)-1).^2+4; end global adapt_best; global best_pos; adapt_best=0; %最佳个体 best_pos=0; %最佳个体在种群中的位置

相关主题