遗传算法java实验报告范文

2024-02-15

遗传算法java实验报告范文第1篇

JAVA实验报告

一、 JAVA编程模拟密码攻击MimaGongji 1. 模拟密码攻击MimaGongji功能需求分析

编程模拟密码攻击的过程,实现下述功能:

(1)键盘输入12位密码,包括字母和数字;

(2)采用穷举法进行攻击,直到破解密码为止;

(3)屏幕输出试验的次数,并输出获得的密码。

2. MimaGongji基本设计思路

1) 基于对MimaGongji功能需求的分析,MimaGongji这个类作为主类,实现主要功能,包括密码的流输入,密码的穷举法破解和破解后密码的输出。 2) Java.io.*这个包主要实现数据的流输入和流输出。

3) public static void main(String[] args)这个方法是主要的方法,实现密码的键盘输入,采用穷举法进行攻击,并屏幕输出试验的次数和获得的密码。 4) .length()这个方法主要是计算一个字符串的长度

3. 实验步骤

1) Java程序代码(*.java)和详细的行注释 //文件名称为“MimaGongji.java” import java.io.*; //加入java的流输入和流输出包 class MimaGongji //定义主类 {

public static void main(String[] args)//引入主要方法 {

String s=""; try{ BufferedReader

mima=

new

BufferedReader(new InputStreamReader(System.in)); //定义密码的流输入

- 1

JAVA实验报告

//统计试验的次数

}

System.out.print(po);

} //输出破解之后的密码

} System.out.println();//换行 System.out.println("试验次数:"+g); //输出提示“试验的次数”

} }//类申明的结束

2)程序的运行(包括运行的过程、界面和结果图)

首先编写如上所示的源程序,保存文件名称为“MimaGongji.java”,然后编译源程序,编译完成后,生成一个字节码文件MimaGongji.class,执行这个程序,得到如下图所示的窗口:

- 345

JAVA实验报告

getContentPane().add(pb,BorderLayout.SOUTH);//把面板添加到窗口上

t1=new JTextField(50); //创建文本框

t2=new JTextField(50); //创建文本框

t3=new JTextField(50); //创建文本框 t4=new JTextField(5); //创建文本框 t5=new JTextField(5); //创建文本框 t6=new JTextField(5); //创建文本框

t2.setEditable(false); //定义文本框的不可书写

t4.setEditable(false); //定义文本框的不可书写

t5.setEditable(false); //定义文本框的不可书写

t6.setEditable(false); //定义文本框的不可书写

p.add(l3,BorderLayout.NORTH); //把标签添加到面板上 p.add(t3,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l1,BorderLayout.NORTH); //把标签添加到面板上 p.add(t1,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l2,BorderLayout.NORTH); //把标签添加到面板上 p.add(t2,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l4,BorderLayout.NORTH); //把标签添加到面板上 p.add(t4,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l5,BorderLayout.NORTH); //把标签添加到面板上 p.add(t5,BorderLayout.CENTER); //把文本框添加到面板上 p.add(l6,BorderLayout.NORTH); //把标签添加到面板上 p.add(t6,BorderLayout.CENTER); //把文本框添加到面板上 b0=new JButton("生成父母基因"); //创建父母基因生成按钮 pb.add(b0); //添加到面板上

b1=new JButton("100次交叉、变异"); //创建交叉、变异按钮 pb.add(b1); //添加到面板上 b2=new JButton("200次交叉、变异"); pb.add(b2); b3=new JButton("500次交叉、变异");

- 7

JAVA实验报告

Object s=e.getSource(); if(s==b0) //监听器实现功能 {

t3.setText(s1); //t3文本框输出s1

} t1.setText(s2); t4.setText(String.valueOf(H1)); t5.setText(String.valueOf(H2));

if(s==b1)time(100); //监听器实现功能

} if(s==b2)time(200); if(s==b3)time(500);

public void time(int r) //定义方法,实现函数的调用

{

int x,y,z,d1=0,d2=0,w,k,H3=0;

c=new int[23]; //定义一个数组

for(int j=1;j<=r;j++) //基因的交叉 {

x=1+(int)(Math.random()*23); //生成一个随机父亲基因位

y=1+(int)(Math.random()*23); //生成一个随机母亲基因位

z=f[x-1];f[x-1]=m[y-1];m[y-1]=z; //两个基因位的基因调换 }

for(int j=0;j<23;j++) //分别计算父母基因总和

{

d1+=f[j];

- 9

JAVA实验报告

2)程序的运行(包括运行的过程、界面和结果图)

首先编写如上所示的源程序,保存文件名称为“YichuanSuanfa.java”,然后编译源程序,编译完成后,生成一个字节码文件YichuanSuanfa.class,执行这个程序,得到如下图所示的窗口:

随机生成父母基因,得到如下图示:

- 11

JAVA实验报告

500次交叉、变异之后,得到如下图示:

4.实验心得

.java文件名要与主类名相同,JAVA对字

1.编写调试程序要注意程序编写的规则,母的大小写特别敏感,输入时要特捏注意大小写字母的定义,千万别犯主类名与.java文件名不同的错误。

2.在做图形界面时,注意设置图形界面的大小以及文本框、标签和按钮的位置。创建文本框的时候,可以设置文本框的可写性,以及文本框的颜色等等。在随机生成父母基因的时候,注意生成的随机数是什么范围,我们实验要求的范围是什么。监听器的响应,在文本框中输出的是一个基因整体还是一个数,都需要注意,因为这两种输出的方法不同。

3.为了简化程序,我们应该学会调用函数的方法。一开始做程序的时候,我没有注意到这一点,导致我的程序代码非常繁杂,而且容易出错。在同学的建议下,我把100次、200次、500次交叉、变异的实现使用调用函数的方法,这样我的程序代码变得简明多了。因此,在做程序的时候应该考虑到程序代码的简明扼要,不但美观,还能保证

JAVA实验报告

正确性的要求。

遗传算法java实验报告范文第2篇

摘 要:个性化需求的出現,致企业多品种、小批量的装配线平衡出现失调问题。针对第Ⅱ装配线平衡问题,分析成组技术与最小节拍的对应关系,结合成组技术、遗传算法建立数学模型,按照遗传算法进行编码、译码、构造适应函数。成组技术问题是组合优化问题,而遗传算法正是目前求解组合最优化的有效方法之一。因此,文章将成组技术与遗传算法相融合,提出了一种基于遗传算法的工序成组方法。

关键词:第Ⅱ类装配线;遗传算法;负荷平衡;成组技术

Key words: class Ⅱ assembly line; load balancing; genetic algorithm; group technology

0 引 言

对于日新月异的社会发展,随之企业的装配线负荷平衡就成为瓶颈问题。装配线的失衡会严重造成企业生产效率大大降低,装配线负荷平衡可以有效解决工人、机器等待问题,并使工作站之间负荷均衡,以保证生产效率的提高。从根本上讲,装配线平衡就是组合优化问题,但是该问题涉及到产品设计研发和制造过程,这也就决定工作站先后顺序以及作业元素逻辑关联。市场需求多样性的变化对装配线的柔性要求增强,但在实际生产过程中由于工序的排列不合理、工作站负荷不均衡等一些因素导致装配线不能顺畅进行。针对装配线平衡目标的不同,单一型装配线平衡分四种:第Ⅰ类:已知装配线节拍C,优化工作站数N;第Ⅱ类:已知装配线工作站数N,优化节拍T;第Ⅲ类:已知装配线工作站数N,优化均衡指数SI;第Ⅳ类:已知装配线工作站数N,优化相关指数SN。

装配线平衡(Assembly Line Balance,ALB)是个组合优化问题,属于典型的NP-hard问题,到目前为止没有公认的最优算法。Salveson[1]首次提出ALB的线性规划模型;Dooyoung[2]采用0-1整数规划同时优化装配线工作站节拍问题;Tonge[3]提出了一种启发式算法优化装配线;Rubinovitz[4]等人研究了结合启发式算法的装配线平衡的遗传算法。不过上述算法多为理论值,没有完全结合实际状况,导致可信度差;采用单纯的遗传算法(Genetic Algorithm,GA)优化装配线平衡问题,因不满足实际约束的可行解使最优解不可行。

本文提出了一种结合成组技术的遗传算法来优化第Ⅱ类装配线的数学模型,运用工序成组结合传统的遗传算法,既保留了原始遗传算法的空间搜索能力又仅在可行解空间搜索。本文针对第Ⅱ类装配线采用该方法进行优化。

1 遗传算法

遗传算法(GA)是Holland受自然界生物进化论启发而提出来的,它是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局化概率搜索算法。随着GA的开启可以克服启发式方法的规则困难,同时提出了一种新的有效决策支持工具,而之前启发式方法的产生主要是因为现实建模的需求但没有万能的启发式规则。GA依一定的概率进行全局搜索,并且可以较大概率求得最优解,GA过程中的适应度函数的选择,编码和译码规则对装配线平衡都有影响,鉴于此本文采用工序成组的非标准遗传算子,保证解的可行性,同时采取最优策略避免最优解的丢失,其可定义为8元组[5]:

GA=(C,E,P ,M,Φ,Γ,ψ,T),T) (1)

上述式中8元组依次表示个体编码方法、适应度函数、群体范围、选择算子、交叉算子、变异算子、终止条件,本文处理每个单元的规则将结合装配线实际情况具体操作。

2 设计装配线遗传算法模型

装配线平衡(ALB)问题的研究就是产品装配过程中每个工作站工序的分配,使其作业元素按照一定的装配操作顺序进行装配,运用遗传算法(GA)就是每个工作站的工时接近节拍T或者差距最小。因此分配工序任务时需要降低工作站之间的空闲时间,平衡其作业时间。在运用GA时需要结合实际约束,这些约束用数学表达如下:

(1)S ∪S ∪…S =D k=1,2,…,m;——工作站中工序的约束。

(2)S ∩S =φ i≠j;i,j=1,2,…,m;——工作站之間工序的约束。

(3)TS ≤T k=1,2,…,m;——工作站时间与节拍的约束。

(4)若M =1, i∈S , j∈S , 则x≤y, M=M 为优先矩阵;——工序顺序约束。

D表示工序集合,M表示工作站数k=1,2,…,m,S 表示第i个工作站工序集合。上述为装配线基本约束,目标一般就是衡量装配线的指标,尽量减少工作站之间的空闲时间,最终达到每个工作站总工时均衡,提升生产效率。

2.1 成组工序的装配线遗传算法模型

本文主要针对成组工序的第Ⅱ类装配线平衡问题进行研究[6],运用成组技术将工序集中分类安排,使节拍T最小化,工序相似度最大,提高装配线效率。用数学模型描述该装配线问题如下:

w 为某一个工序的某一特征的权重系数;x为工序代号;k为零件的特征要素数,k=1,2,…,s;i,j为待分类的工序数,i,j

=1,2,…,m;针对工序成组特征本文选取5M1E(人,机,料,法,测,环)六个方面,每个特征方面依据工艺及工作站要求赋予权重。权重系数反应每个工序之间的相似度,需要满足归一条件,即∑wx =1k=1,2,…,6。余弦值越接近1,就表明夹角越接近0度,也就是两个工序越相似,夹角等于0,即两个工序相等。

2.2 编 码

遗传算法的优化结果受编码规则的影响,在实际装配线生产过程中约束较多,一般的二进制编码会影响整个算法的每一步,因此在这里并不适用,所以需要选择特殊的编码方式。针对装配线平衡问题,由于受装配线工序先后顺序以及工艺设计的约束,所以可用装配工序图表示现有的流程制造。图1是某装配线的工序流程约束图,连接点的弧表示工序顺序,节点上方数字表示工序时间,装配线的排列顺序也就是成为一种优化组合问题,使工序先后逻辑顺序编码符合实际约束更为简单[7]。在排列工序时应结合成组技术,按照工序的相似度进行配列,最大可能分配同一个工作站,提高装配线作业效率,降低工序之间的空闲时间。因此,本文采用工序成组的方法对染色体进行编码,每个工序对应一个基因,每个工作站对应一段基因位,按顺序排好。图2为图1工序约束图下的一个染色体。每个工作站的总工时不能超过节拍T。

2.3 译 码

编码后的染色体要按照一定的规则进行译码,该过程是将工序编码表示的染色体(成组工序)中的每个基因(工序)顺序分配各个工作站。在工作站给定的情况下,依据染色体中工序号顺序最小化节拍T(最大化生产效率P)和工序的相似度最大[8]。首先在给定满足工作站数的条件下,依照染色体的工序号,运用模糊聚类分析法——夹角余弦法对每个工序进行分类,再依据给定的工作站数以及工艺要求进行分配,然后依据工作站上所分配工序求其时间。在此过程需要满足以下条件:

(1)每个工作站的工时不能超过节拍时间,即TS ≤T;

(2)一个工序只能分配一个工作站;

(3)考虑到节拍的约束,若一个工序不能被分配到工作站,但该工序的紧后工序可以分配,则该工序优先分配到工作站。

在译码过程需要借助平衡指数SI= 来衡量成组工序分配情况,即∑s 值的合理性。

2.4 适应函数的构造

由于该适应函数是求极大值的过程,但是平衡指数是极小值问题,因此需要进一步转化SI也为极大值。本文借助指数函数构造适应函数如下:

fi= +e

其中:SI= ,因此就有指数函数越小,相似度越大,节拍越小的染色体使适应函数越大。

2.5 初始群体的选取

为保持最优解的可行性和计算结果的精确性,本文采取的可行解都是在装配线可操作的工序条件下进行筛选。因此依据工序流程图采用图论中随机拓扑排序方法生成初始群体,具体步骤如下:

(1)使当前初始化染色体序列为空;

(2)随机从工序流程图中选择一个无紧前工序安插在当前序列尾部;

(3)在图中删除该节点以及所连接的边,若已无节点则输出当前作业序列,否则转(2)。

成组工序顺序的输出是建立在装配线实际情况之上,可排列组合出新的成组工序,并生成初始群体。

2.6 选择策略的确定

因需要适应值较大的个体保留在群体中,本文采用确定式采样选择方法(Deterministic Simpling)。其具体操作过程如下:

(1)群体中每个个体在下一代中期望生存数目N : N =M i=1,2,…,M。

(2)用N 的整数部分 N 确定每个对应个体在下一代群体中生存数目,其中 N 表示取不大于x的最大整数。由该步可确定下一代群体中的∑ N 个个体。

(3)按照N 的小数部分对个体进行降序排列,顺序取前M-∑ N 个个体加入到下一代群体中,至此完全确定出下一代群体中的M个个体,保持总的群体数量不变。

上述的选择方法保证了较大的适应群体被保留,避免最优解流失,也就是最优的可行性解的保留。

2.7 交叉和变异准则

单点交叉算子(One-point Crossver):它是指个体编码随机选取某个交叉点,然后互换该点后的部分染色体,是一种最常用和最基本的一个交叉方式。由于初始群体是可行解,经过单点交叉后产生的新一代个体也是可行解。初始群体具体操作方式如下:

(1)初始群体中随机选取两个进行配对。若该群体数量为M,则有 M/2 对进行配对;

(2)对于每个相互配对的个体,随机设置某基因后的位置为交叉点。若染色体长度为n,则共有n-1个交叉点数[9];

(3)依据设定的交叉率(一般0.4~0.99)进行交叉互换部分基因,从而产生两个新的个体。

用上面两个染色体说明单点交叉操作,随机选取交叉点:position 1=5,产生的新个体见图3。

基本位变异算子(Simple Mutation):依据变异率p 对当前染色体上基因位进行变异操作,本文为保证可行解的持续,采用位移变异方式。随机选择一个关系进行变异操作,将其插入约束条件下的任意位置,而它的紧随工序按照原来的顺序排列,这也就保证了变异后的可行解持续性[10]。取工序6进行变异,将其插入第十个位置,则8,10,7,9工序向前平移一个位置,工序11位置保持不变。具体操作过程如图4:

2.8 终止代数

鉴于本文工序数目较少,终止代数取100,即进化100代后结束运算。

3 实例分析

基于第Ⅱ类装配线结合遗传算法的叙述,本文采用仿真软件Matlab2016a基于处理器为Intel(R)Core(TM)i5-4256U/2.4GHz,操作系统为64位四核window10平台进行模拟,交叉概率0.8,变异概率0.2。选取一条十一个工序四个工作站的装配线为例,其总工时为46s,优化结果如表1至表3:

目前装配线平衡率P =P =P = =95.83%;minT为11S;均衡指数SI = =1.4;SI =SI

= =2即SI

4 结束语

针对第Ⅱ类装配线工序相关因素(5M1E)分析,提出了成组工序的作业序列,在此基础运用遗传算法。该方法既保留了原有的GA遗传算法搜索能力,又依据实际情况选择初始群体和构造交叉算子、变异算子,重要的是只在可行解范围内进行搜索最优可行解。交叉算子一般取0.4~0.99,变异过程中算子的随机选取范围0.3~0.5。在适应度函数方面考虑了各个工序之间的相似度和装配线的平衡率以及平衡指数,可以用来比较不同工作站内工序相似度,增加工序的聚集度,提高工作效率。由于本算法中的相似度根据5M1E需要赋予相应的权重,该过程会涉及到主管因素,所以在结果上会产生差异性,结合实例可见该算法以及相关指数还是取得相对满意的结果。本文的成组工序遗传算法的提出,为提高装配线效率和改进装配线技术提出了参考依据。

参考文献:

[1] Salveson M E. The assembly line balancing problem[J]. Journal of industrial Engineering, 1955,6(3):18-25.

[2] Dooyoung Shim, Hobey Min. Flexible Line balancing practices in a just-in-timeenvionment[J]. Production and inventory management Journa1, 1991(4):38-41.

[3] Tonge F M. Summary of a Heuristic line balancing Procedure[J]. Management Science, 1960,7(11):21-42.

[4] Levitin, Rubinovitz, Jacob, et al. A genetic algorithm for robotic assemblyline balancing[J]. European Journal of Operational Research, 2006,168(3):811-825.

[5] 周明,孫树栋. 遗传算法原理及应用[M]. 北京:国防工业出版社,1999:19-20.

[6] 皮兴忠,范秀敏,严隽琪. 用基于可行作业序列的遗传算法求解第二类装配线平衡问题[J]. 上海交通大学学报,2005,39(7):1123-1127.

[7] 朱会霞,王福林,张勇,等. 改进遗传算法优化非线性规划问题[J]. 数学的实践与认识,2013(7):117-125.

[8] 梁燕,金烨. 基于工位约束快速启发式算法的混合装配线分段优化[J]. 上海交通大学学报,2007,41(9):1501-1505.

[9] 鞠彦兵,李桂芬,王爱华. 基于遗传算法的车间作业计划仿真研究[J]. 数学的实践与认识,2006(10):79-85.

[10] 吴君华,夏巨谌,曹山河. ALB问题的数学模型及其优化算法的研究[J]. 系统学报,1999,11(5):358-361.

[11] 王丽颖,孙丽,王秀伦. 基于虚拟工序的小批量工序质量控制方法研究[J]. 计算机集成制造系统,2006,12(8):1263-1266.

[12] 郭胜会,杨育,邢青松,等. 基于联合作业序列的遗传算法求解第二类装配线平衡问题[J]. 机械,2011,11(38):42-47.

遗传算法java实验报告范文第3篇

1 基于遗传算法电力系统有功优化运行

遗传算法起源于对生物系统所进行的计算机模拟研究。美国Michigan大学的J·Holland教授及其学生受到生物模拟技术的启发, 创造了一种基于生物遗传和进化机制的适合于复杂系统优化的自适应概率优化技术一遗传算法。遗传算法与传统的算法不同。大多数古典的优化算法是基于一个单一的度量函数 (评估函数) 的梯度或较高次统计, 以产生一个确定性的试验解序列;遗传算法不依赖于梯度信息, 而是通过模拟自然进化过程来搜索最优解, 它利用某种编码技术, 作用于叫染色体的数字串, 模拟由这些串组成的群体的进化过程。遗传算法通过有组织、随机的信息交换来重新组合成那些适应性好的串, 生成新的群体。并适用于处理传统搜索方法难于解决的复杂问题和非线性问题, 可广泛用于组合优化、机器学习、自适应控制、规划设计和人工生命等领域, 是21世纪有关智能计算中的关键之一。

对于工程和科学中的许多实际问题, 找到一个最优解的唯一可靠的方法是穷举法, 即搜索问题的整个参变量空间。在许多情况下, 由于参变量空间太大, 以致在限定的时间内只可能搜索其中极小的一部分。而遗传算法像撒网一样, 在参变量空间中进行搜索, 由染色体组成的群体在遗传算子的作用下, 同时对空间中不同的区域进行采样计算, 从而构成一个不断进化的群体序列。与传统的优化算法相比, 遗传算法主要有以下几个优点。

(1) 遗传算法处理对象不是参数本身, 而是参数集编码所得到的基因个体。这一特点使得遗传算法具有广泛的应用领域。

(2) 遗传算法不是采用单点搜索法, 而是同时处理群体中多个个体的方法, 即同时对搜索空间中的多个解进行评估。这一特点使遗传算法具有较好的全局搜索性能, 也使得遗传算法本身易于并行化。

(3) 遗传算法仅用适应度值信息来评估基因个体, 并在此基础上进行遗传操作。遗传算法的适应度函数不仅不受连续可微的约束, 而且其定义域可以任意设定。对适应度函数的唯一要求是:编码必须与可行解空间对应, 不能有死码。由于限制条件的缩小, 使得遗传算法的应用范围大大扩展。

(4) 遗传算法么有采用确定性规则, 而是利用概率转移规则来指导它的搜索方向。概率仅是作为一种工具来引导其搜索过程并朝着搜索空间的更优化的解区域移动的。虽然看起来它是一种盲目搜索方法, 实际上它有明确的搜索方向, 具有内在的并行搜索机制。

但是遗传算法也有其自身的缺点, 表现在以下几个方面。

(1) 编码不规范及编码存在表示的不准确性; (2) 单一的遗传算法编码不能全面地将优化问题的约束表示出来; (3) 遗传算法的效率通常比其它传统的优化方法低; (4) 遗传算法容易出现过早收敛; (5) 遗传算法对算法的精度、可信度、计算复杂性等方面, 还没有有效的定量分析方法。

2 遗传算法基本流程

2.1 编码

解空间中的解数据x, 作为遗传算法的表现型形式, 从表现型到基因的映射称为编码。利用遗传算法进行问题求解时, 首先确定问题的目标函数和变量, 然后对变量进行编码。这样做主要是因为在遗传算法中, 问题的解是用数字串表示的, 而且遗传算子也是直接对串进行操作。编码方式可分为二进制编码和实数编码。以二进制编码为例说明编码的过程:设变量x的区间是[-3.0, 12.1], 要求的精度是小数点后4位, 则对每个变量应该被分成至少 (121.- (-.30) ) ×104=151000个部分, 接着确定一个变量的二进制串位数 (染色体长度) 因为217<151000<218所以可以确定染色体的长度为17位。遗传算法的创始人Holland认为:采用二进制编码与计算机码一致, 适合于计算机用;在染色体中的每一位只有1和0两个编码值, 在交叉和变异等操作中原理清晰, 操作简单;表示的变t范围大, 适合于表示离散变量, 而对于连续变量, 只要群体总取足够大, 就可以达要求的精度。

2.2 初始群体的生成

随机产生个初始串结构数据, 每个串结构数据称N为一个个体, 个个体构成了一个群体。基本遗传算法以N这个个体作为初始点开始迭代。设置进化N代数计数器t=0;设置最大进化代数T;随机生成M个个体作为初始群体P (0) 。

在实际应用遗传算法解决问题时, 由于问题解的空间大小可能有很大的差别, 种群数目对遗传算法性能影响不容忽视:一方面太小的种群数目容易产生较大的采样误差, 另一方面太大的种群数目会影响遗传算法的收敛时间导致计算资源的浪费。实际上, 初始群体的选取, 应根据实际问题来权衡。

2.3 适应度函数值的评价

适应度函数值是对解的质量的度量, 它通常依赖于解的行为环境 (即种群) 的关系。适应度函数是用来区分群体中个体好坏的标准, 是遗传算法的驱动力, 是进行自然选择的唯一标准。改变群体内部结构的操作皆通过适应度值加以控制。

一般以目标函数或费用函数的形式来表示适应度函数, 对于不同的问题, 适应度函数的定义方式不同。根据具体问题和定义, 计算群体P (t) 中各个个体的适应度值。

2.4 选择

选择的目的是为了从当前群体中选出优良的个体, 使它们有机会作为父代为下一代繁殖子孙。根据各个个体的适应度值, 按照一定的规则或方法从上一代群体中选择出一些优良个体遗传到下一代群体中。遗传算法通过选择运算体现这一思想, 进行选择的原则是适应强的个体为下一代贡献一个或多个后代概率大。这样就体现了达尔文的适者生存原则。最常见的方法就是比例选择法:利用比例于各个个体适应度的概率决定其子孙遗留的可能性。若设种群数为M, 个体i的适应度为fi, 则个体i被选取的概率为:

遗传算法模拟了自然选择和遗传中发生的复制、交叉和变异等现象, 从任一初始种群 (Population) 出发, 通过随机选择、交叉和变异操作, 产生一群更适应环境的个体, 使群体进化到搜索空间中越来越好的区域, 这样一代一代地不断繁衍进化, 最后收敛到一群最适应环境的个体 (Individual) , 求得问题的最优解。基本遗传算法 (Simple Genetic Algorithm, 简称SGA) 的总流程如下。

当个体选择的概率给定后, 产生[0, 1]之间的均匀随机数来决定哪个个体参加交配。若个体的选择概率大, 则能被多次选中, 它的遗传基因就会在种群中扩大:若个体的选择概率小, 则可能被淘汰。除了适应度比例方法, 常见的还有最佳个体保存方法, 队列选择方法, 锦标赛选择方法, 确定性抽样选择方法, 剩余随机抽样选择方法, 随机整体抽样选择方法等。

2.5 交叉

交叉又称重组, 是按较大的概率cP从群体中选择两个个体, 交换两个个体的单个或多个基因。交叉运算产生子代, 子代继承父代的基本特征。交叉算子的设计包括如何确定交叉点位置和如何进行部分基因交换两个方面的内容。遗传算法中所谓的交叉运算, 是指两个相互配对的染色体按某种方式相互交换其部分基因, 从而形成两个新的个体。交叉运算是遗传算法区别于其他进化运算的重要特征, 它在遗传算法中起着关键作用, 是产生新个体的主要方法。在交叉运算之前还必须先对群体中的个体进行配对, 目前最常的配对策略是随机配对, 即将群体中的个个体以随机的方式组成对配对个体组, []表示不大于X的最大整数2。交叉点的位置则X是由交叉率决定的。常见的交叉方法有:单点交叉、两点P交c叉、均匀交叉、算术交叉等。图1是单点交叉的示意图。

2.6 变异

变异是以较小的概率Pm (变异概率) 对群体中染色体的某个或某些基因值进行改变, 如二进制编码中“0”变为“1”, “1”变为“0”, 从而可以生成新的个体。

变异运算本身也是一种随机算法, 但与选择和交叉算子结合后, 能够避免由于选择和交叉运算而造成的某些信息丢失, 保证遗传算法的有效性。交叉运算是产生新个体的主要方法, 它决定了遗传算法的全局搜索能力:而变异可以提供初始种群中不含有的基因, 或找回选择过程中丢失的基因, 为种群提供新的内容, 它决定了遗传算法的局部搜索能力。交叉算子与变异算子相互配合, 共同完成对搜索空间的全局搜索和局部搜索, 从而使得遗传算法能够以良好的搜索性能完成最优化问题的寻优过程。

2.7 终止条件准则

收敛判别对算法有着重大影响而且是一个不容易确定的问题。可以采用在线性能不发生变化即前后几代适应度值不发生变化, 也可以采用最大迭代次数作为收敛判据。若采用适应度值作为收敛判据, 对新一代的母体群, 重复 (3) ~ (6) 的操作, 直到满足:

式中:fi为第i代最佳母体的适应度, 对最后得到的母体群, 选取适应度最大的母体作为最优解。若采用迭代次数作为收敛判据, 取i为一定代数时停止运算。

3 结语

短期有功负荷分配是在满足系统总负荷的前提下, 在调度周期内充分、合理地利用有限的水资源在各电厂间分配有功负荷, 以减少火电厂的总运行费用。由于水电厂运行的灵活性和梯级水电厂间的补偿协调作用, 即上级水电厂的发电用水或弃水经一定延时将会影响下级各水电厂的发电和弃水, 而下级水电厂的水库调节能力又反过来影响上级水电厂的用水计划。因此, 水火电力系统的短期有功负荷分配是一个具有复杂约束条件的大型、动态、有时滞的非线性优化问题, 处理起来比较复杂。

摘要:电力系统有功优化, 从20世纪30年代开始就一直广受人们关注, 电力系统运行的任务是保证系统安全、可靠、持续供电, 在保证电能质量的前提下, 提高电能生产输送的效率, 尽量降低燃料使用费或供电成本。

遗传算法java实验报告范文第4篇

遗传算法是在模拟自然界生物遗传进化过程中形成的一种自适应优化的概率搜索算法。它于1962年被提出, 直到1989年才最终形成基本框架[1]。它从初始种群出发, 采用“优胜劣汰, 适者生存”的自然法则选择个体, 并通过杂交、变异来产生新一代种群, 如此逐代进化, 直到满足目标为止[2]。

二、遗传算法的基本过程

(一) 基本过程

遗传算法的主要内容和基本步骤如下: (1) 选择编码策略。 (2) 定义遗传策略。 (3) 令t=0, 随机选择N个染色体初始化种群P (0) 。 (4) 定义适应度函数f (f>0) 。 (5) 计算P (t) 中每个染色体的适应度。 (6) t=t+1。 (7) 运用选择算子, 从P (t-1) 中得到P (t) 。 (8) 对P (t) 中的每个染色体, 按概率Pc参与交叉。 (9) 对染色体中的基因, 以概率Pm参与变异运算。 (10) 判断群体性能是否满足终止标准, 如不满足, 则返回5) 。

(二) 编码与解码

常用的遗传编码算法有二进制编码、格雷编码、实数编码和字符编码等[2]。对于函数优化问题, 一般采用两种编码方式。 (1) 二进制编码:将原问题结构变换为染色体的位串结构, 稳定性高。 (2) 实数编码:将每个体的染色体都用某一范围的一个实数来表示, 容易理解且不需要解码的过程。

(三) 适应度函数

适应度函数是一个对个体的适应性进行度量的函数。适应度函数值越大, 说明解的质量越高。常用的适应度函数有原始适应度函数和标准适应度函数[2]。

(四) 基本遗传操作

遗传算法中基本遗传操作包括选择、交叉和变异三种。

选择操作是在种群中选择优秀的个体, 并成为一对父母, 然后将它们的基因传递到下一代, 直到下一代个体数量达到种群数量上限。常用的选择策略有比例选择、排序选择和竞技选择[2]。交叉操作是按照某种方式对选择的父母根据交叉概率进行交配重组, 从而形成新的个体。通常采用单点交叉法, 即随机选择k位为交叉点, 单点交叉是将X中的xk+1到xn部分与Y中的yk+1到yn部分进行交叉。变异操作是对选中的个体的染色体中某些基因按照变异概率进行变动, 然后形成新的个体, 通常采用单点变异法。

三、函数最大值实验及结果分析

(一) 目标函数

我们将求解函数f (x) =x+10sin (6x) +12cos (x) 在区间[0, 10]的最大值。

(二) 定义各种策略及实验结果

首先, 我们设定求解的精度为小数点后4位, 然后将x的解空间划分为 (10) * (1e+4) =100000个等分。65536=2^16<100000<2^17=131072, 所以需要17位二进制数来表示这些解, 即这里染色体串的长度位17。其次, 使用f (x) 来表示该问题的适应度函数, 适应度函数值越大, 则解的质量越高。最后就是定义遗传策略, 这里我们设定交叉概率为0.6, 变异概率为0.05, 最大迭代次数为200。

测试结果如图1:

最优个体:00001011011100101;最优适应度:28.1421;最优个体对应自变量值:6.5394;达到最优结果需要的迭代次数:从21次到一百多次不等迭代次数与平均适应度关系曲线 (横轴:迭代次数, 纵轴:平均适应度) 。

(三) 结果分析

上述实验结果显示, 当迭代次数达到近21次左右时, 平均适应度会迅速上升并达到一个较为稳定的区域。然后, 随着迭代次数的进一步增加发现, 平均适应度会在这个稳定的区域上下波动但跨度不大, 并渐渐的保持在了一个水平值上。这时, 曲线达到了最优适应度, 也就是该种群基本达到了最佳适应水平。

(四) 改进方法

首先, 我们知道在种群刚开始迭代的时候因为需要增强种群的多样性, 所以变异概率通常会高一点, 当渐渐接达到了最优迭代次数时, 就需要稳定的发展下去, 这个时候的变异概率通常会很低, 所以我们可以对变异的概率进行动态确定, 这里可以使用类似于正态分布函数来表示变异概率随着迭代次数增加的变化趋势。

四、总结

在介绍了遗传算法的理论知识的基础上, 本文主要介绍了在函数最优解方面的应用并进行了简单的实验。遗传算法具有良好的全局搜索能力, 克服了传统算法容易陷入局部最优的缺点;但遗传算法也有一些不足的地方, 比如运行效率不高、编程实现的步骤较为复杂、局部搜索能力差而且容易早熟收敛, 对于这一点可以动态确定变异的概率或者改进选择的方式来优化。目前而言, 遗传算法并不是最完美的, 这些都是将来需要进一步研究的问题。

摘要:遗传算法遵守着物竞天择、适者生存的原则, 是人工智能领域中用于解决最优化的一种启发式搜索算法, 是进化算法的一种。发展至今已经得到了广泛的应用, 特别是在生产调度、神经网络、函数优化、模式识别等领域, 遗传算法都发挥了很大的作用。本文主要是通过实现函数优化方面的例子来体现遗传算法的实用价值以及从遗传算法的变异概率方面尝试了改进。

关键词:人工智能,遗传算法,函数优化

参考文献

[1] AlexYu.简单遗传算法MATLAB实现[M].

[2] 王万森.人工智能原理及其应用 (第三版) [M].电子工业出版社, 2014.

[3] (美) 米歇尔 (Mitchell, T.M.) 着, 曾华军等译.机器学习[M].机械工业出版社, 2008.

遗传算法java实验报告范文第5篇

一、提出问题

假设一游客计划从上海出发, 自驾游览上海市及周边共30个景区并最终回到出发地, 根据出行需求, 游客要遍历每个景区且各个景区只能到访一次, 如何规划路线可以使游客在最短时间内完成游览目标。

根据问题, 提出以下假设:

(1) 每两个景区之间都有直接接通的公路, 不存在两个景点间必须通过其他景点才能到达的情况, 且连接各景区的公路均为直线。

(2) 游客在景区间的移动过程全程自驾, 且平均车速为40km/h。

(3) 不考虑游客中途停车、用餐、夜间休息或其他突发因素造成的时间增加, 且游客到达景区马上开始游览, 没有时间间隔。

(4) 游客在各个景区内的游览时间是固定的, 不因到达的时刻不同而变化。

二、建立模型

TSP问题即旅行商问题, 可描述为:已知n各城市坐标, 一个商人从起点城市出发, 经过且只经过每个城市一次, 最后回到起点城市的最短路程。TSP问题属于NP完全问题的一种, 目前没有精确算法可以找到最优解, 只能找到有效地近似解。

TSP问题的数学描述为:在正权图G (V, E) 中, 顶点集合V={1, 2, …, n}, 边集合为E, d为城市i到城市j的距离矩阵, 要找到最短路径的回路, 成为最佳哈密顿回路或最佳哈密顿圈。

三、算法实现

遗传算法是模拟生物界“物竞天择, 适者生存”的自然演化规律的一种随机搜索方法, 它将自然界繁殖、杂交、变异、竞争等概念引入算法当中, 通过一组可行解进行交叉、变异、逆转化等操作得到最优解, 是一种全局最优算法。其基本思路为, 首先对问题参数进行编码, 形成一定数量的染色体, 即初始种群, 然后计算种群的适应度, 再利用迭代对初始种群进行交叉、变异等操作得到更加优秀 (适应度更高) 的种群, 最终保留符合目标的最优群体。

在本例中, 利用遗传算法求解上述模型的主要步骤及部分代码如下:

(1) 编码

在遗传算法中, 大部分时候采用二进制编码方式, 但在求解旅行商问题时最简单最直接的编码方式是基于结点顺序进行编码, 如针对一个9个景点的旅游路径3-2-6-4-8-9-5-1-7可直接用 (3 2 6 4 8 9 5 1 7) 进行编码, 直观明了的情况下还可以满足模型中的约束条件。

(2) 初始化种群

随机生成一个初始解, 初始解的个数决定了初始化种群的数量, 本文中设定初始解中个体的数量为NIND=30, 同时设定最大迭代次数为GENMAX=500次。

(3) 适应度函数

适应度函数是用来评判个体优劣性的唯一标准, 是遗传算法进行个体选择的依据, 通常适应度函数由目标函数转化而来, 当求解目标函数最小值时, 一般使适应度值最大, 因此采用目标函数的倒数值作为适应度值, 本文模型中目标函数为总距离最短, 因此适应度函数设置如下

(4) 选择操作

选择操作是使用轮盘赌的方式, 从上一代种群中选择较优秀的个体作为父代繁衍子代, 父代个体被选择的概率与其适应度值相关, 适应度值越高, 被选择的概率越大, 个体i被选择的概率pi为

其中Fi为个体i的适应度值, NIND为初始种群数量。

(5) 交叉操作

将上一步选择的两个个体作为父代进行交叉操作以产生新的子代, 其方法是在[1, 9] (以9个城市为例) 之间随机取两个整数r1和r2, 将r1和r2之间的部分交换, 本文中设置交叉概率pc=0.8。

(6) 变异操作

变异操作是指在新产生的子代个体上进行的变异操作, 主要为了维持子代个体的多样性, 其方法是在[1, 9]之间随机取两个整数r1和r2, 将个体这两个位置上的编码数字互换。

(7) 终止条件判定

本文的终止条件为迭代次数=GENMAX (最大迭代次数) , 否则返回步骤3进行循环。

四、结果分析

根据以上遗传算法模型, 利用MATLAB编程进行模拟求解, 得到结果在第462代的到最优结果, 最优路径为1-2-19-20-10-21-18-3-9-11-7-8-14-15-24-25-26-29-28-27-23-22-16-17-30-12-13-4-5-6-1, 总距离为459.86km, 计算后可得游客在旅途路上 (不包括游览时间) 所用的最短时间为11.5h。对结果分析可知, 该模型和算法大大缩短了总路程, 根据问题描述和假设, 得到了最短距离、最短时间游览全部景点的路径, 该问题得到解决, 可见遗传算法对于解决TSP旅游路径规划问题效果显著。

总结与展望

本文首先将旅游规划问题转换成TSP问题, 然后建立混合整数规划模型, 最后利用遗传算法设计程序并求解该问题, 高效便捷的解决了旅游线路规划问题。但本研究结果仍存在不足, 如当景点数量n过大时, 遗传算法求解效率会大幅降低, 此时可以考虑将其他近似算法与遗传算法相结合提高求解效率, 这些内容有待进一步研究。

摘要:本文针对当前重点关注的旅游路径规划问题, 综合利用图论和智能算法的相关理论, 通过建立TSP数学模型和使用遗传算法对问题进行求解, 得到了遍历30个景点的时间最短、总距离最短的旅游路径。结果表明该方法具有较好的有效性和实用性。

关键词:旅游路径规划,TSP,遗传算法

参考文献

[1] 徐婷婷, 王柱, 徐海洋.旅游路线规划数学模型的建立与应用探讨[J].廊坊师范学院学报 (自然科学版) , 2016, 16 (1) :23-26.

[2] 喻菡.遗传算法求解TSP的研究[D].西南交通大学, 2006.

[3] 郑天翔.基于动态实时调度的主题公园游客时空分流导航管理研究[J].旅游科学, 2012, 26 (4) :8-16.

遗传算法java实验报告范文第6篇

股票市场预测是金融时间序列预测中的一项具有挑战性的任务。这主要是因为市场运行中存在不确定性。股票市场中的许多因素相互作用,包括政治事件、市场经济状况和交易者期望。因此,预测市场价格变动是相当困难的。根据学术调查,市场价格的变动随机性愈发提高,它们的行为是高度非线性的,动态的。投资者要做决策就是根据股票的预期方向,与价值相比,预测方向可以产生更高的利润。

过去十年,许多人工智能和机器学习技术被用来预测股市。神经网络是目前应用最广泛的技术,神经网络被用于股市趋势预测,概率神经网络被用于将其建模为一个股票市场涨跌分类问题。近年来,支持向量机在股市预测中的应用取得了显著的进展。Tay&Cao首次将支持向量机用于金融时间序列预测。Kim提出了一种算法,通过将技术分析指标作为SVM的输入来预测股市的走向。研究比较了支持向量机和BP神经网络。实验结果表明,支持向量机的性能往往优于BPN。

二、支持向量机

支持向量机(SVM)是由Vapnik提出的。支持向量机是一种最大的边缘分类器,试图找到最优超平面来分离不同类,将最接近最优超平面的训练实例称为支持向量。如果数据是线性可分的,则在两个类的情况下,超平面可以表示为以下等式:

其中,y为结果,xi为属性值,wi为权值。在支持向量方面,最优超平面可以表示为以下方程:

其中,y是训练示例x(i)的类值,向量x表示测试示例,向量x(i)是支持向量,·表示点积。在这个方程中,b和αi是决定超平面的参数,找到支持向量并确定参数b和αi相当于求解线性约束二次型编程问题。

如果数据不是线性可分的,在这种情况下,支持向量机将输入转换成高维特征空间。这是通过使用内核函数来完成的,如下所示:

支持向量机的一个独特的特点是能够抵抗过拟合问题。这是因为许多传统的神经网络模型都实现了经验风险最小化原则,而支持向量机则实现了结构风险最小化原则。前者试图将错误分类或对正确解的偏离最小化训练数据,但后者搜索以最小化泛化误差的上界。

三、股票方向预测问题

将股票涨跌预测建模为二分类问题。这些方向在数据中归为“0”和“1”类。“0”类表示当日价格低于前一日,即股价下跌;“1”类表示当日价格高于前一日,即股价上涨。我们选择了中国股市作为研究对象。在过去,该领域的大部分工作都集中在美国和韩国的股票市场上,很少有使用机器学习技术来预测股票。文中选择了3只股票:平安银行(000001)、中信证券(600030)、中证500(000905)作为我们的实验对象。

提出模型:

A.股票相关性

研究表明,股票价格不会孤立地变动。某些股票的价格之间存在统计上的显著相关性,因此,一种股票的价格变动通常可以用来预测其他股票的变动。

让我们希望找到相关性的两个股票用S和T表示。这些股票之间的相关性由下式给出:

式中,S(i)和T(i)是第i天股票的收盘价,SA和TA是股票的平均价格,σS和σT是标准差,n是相关性的天数。

B.输入特征值

利用数学统计得到股票技术指标,可以为研究者提供有关市场趋势的线索。文中使35个这样的技术指标作为模型的输入特征值,其中部分技术指标如表一中所示:

C.遗传算法

如上所述,我们获得了一组候选特征输入。遗传算法现在被用来从这些特征中选择一组显著特征。所选特征用作支持向量机的输入。这里的目的是获得能产生最佳结果的特征的最佳子集。GA中的各个步骤描述如下:

(1)初始化:我们用二元向量表示一条染色体,其中染色体的每一部分都告诉我们是否选择了相应的输入特征。

(2)适应度评估:以下适应度函数用于评估染色体i的适应度:

其中,A(i)是由支持向量机获得的分类精度,输入特征集由染色体i描述,AR是随机精度,研究中设为0.5。

(3)选择:轮盘选择用于父选择。因此,具有高适应度得分的染色体更常被选择。

(4)繁殖:进行交叉和变异以产生新一代。

(5)停止条件:当遗传算法在规定的迭代次数内找不到更优解时停止。

四、实验结果

如前所述,我们用平安银行、中信证券、中证500作为我们的实验对象三只股票。本研究使用的数据来自国泰安数据库。实证分析对象各使用800组数据,70%的数据用于机器学习,30%用于测试模型。

预测性能是用准确率来衡量的,准确率是模型对股票涨跌方向预测正确的百分比。我们将方法的结果与独立支持向量机的结果进行了比较,该支持向量机以目标公司的35个特征作为输入。明显可见,GA-SVM混合模型在预测股票涨跌方向明显优于独立的SVM。例如,对于平安银行(000001),我们的GA-SVM的命中率为61.7328%,而SVM的命中率为48.0903%,三只股票的命中率见表2。

结束语:

本文提出了一种混合遗传算法和支持向量机模型来预测股票价格的涨跌走势。从待预测的股票以及与该股票高度相关的股票中获得的一组技术指标被用作输入特征以提高预测准确率。结果表明,相关技术指标和遗传算法对提高支持向量机分类预测的准确率有显著作用。

与此同时,在股票的预测分析方面还有很多工作要做。如果把影响股票市场的各种政治、经济因素和投资者的情绪也考虑进去,可以取得更好的择时效果。此外,将特定于市场的领域知识纳入系统可能有助于模型获得更好的预测表现。

摘要:本文提出了一种基于遗传算法和支持向量机的股市预测混合机器学习系统。将技术分析领域的各种指标作为输入特征,同时把不同公司股票价格之间的相关性进行计算,利用高相关性股票的技术指标,更好地进行股票走势预测。文中,利用遗传算法从所有技术指标中选出信息量最大的一组作为输入特征。结果表明,在股票走势预测方面,混合遗传算法和支持向量机的模型优于独立支持向量机模型的表现。

关键词:遗传算法,支持向量机,股市预测

参考文献

[1] Chen,A.S. Leung, M.T. and Daouk, H. Application of Neural Networks to an Emerging Financial Market:Forecasting and Trading the Taiwan Stock Index. Computers and Operations Research 30, 2003, 901-923.

[2] W. Kreesuradej, D. Wunsch, and M. Lane, Time-delay neural network for small time series data sets, in World Cong.Neural Networks, San Diego, CA, June 1994

[3] H. Tan, D. Prokhorov, and D. Wunsch, Probabilistic and time-delay neural-network techniques for conservative shortterm stock trend prediction, in Proc. World Congr. Neural Networks, Washington,D.C., July 1995.

[4] 丁鹏.量化投资——策略与技术[M].北京:电子工业出版社,2012.

[5] 刘小茂,田立.现代金融风险的度量方法[J].统计与决策,2007(01):4-6.

上一篇:word制作荣誉证书模板范文下一篇:审计局2018年工作总结范文