❶ 遗传算法有哪些比较直观的应用呢
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。
可用于排班、排课、路径优化、配置优化、生产排程等等优化问题
❷ 遗传算法在数学上的应用
应用遗传算法搜索边坡最小安全系数的研究
陆峰 陈祖煜 李素梅
(中国水利水电科学研究院结构材料所)
提 要
本文简要介绍了滑坡滑裂面搜索问题和遗传算法,并试用遗传进化算法从边坡任意形状滑裂面组合中搜索最有可能的滑裂面,也就是使安全系数最小的滑裂面。作为实例,分析了遗传算法在天生桥二级电站首部枢纽进水口右岸滑坡分析中的应用。
关键词 边坡;安全系数;遗传算法;EMU程序。
1.前言
在应用条分法进行边坡稳定分析的过程中,从可能的滑裂面集合中确定相应最小安全系数的临界滑裂面是很关键的一步。这是一个确定安全系数这个泛函对滑裂面形状这个自变函数的极小值问题。由于实际情况的复杂性,求这一极小值的解析方法很难付诸实施。从实用角度出发,基于最优化原理发展起来的求边坡最小安全系数的方法是比较有效而且便于应用。这些方法有"穷举法"、"黄金分割法"、"鲍威尔法"等,但它们都只能应用于圆弧形滑裂面或圆弧-直线形(改良圆弧法)滑裂面的情形。对于比较符合岩质边坡的具有多个自由度的折线形滑裂面情形,孙君实用复形法取得较好的效果;陈祖煜提出了单纯形法,使最优化方法搜索边坡最危险滑裂面更加有效,且不会漏掉可能的最小值。单纯形法程序已在国内外多家工程、科研和教育单位得到应用,并不断随着应用工程案例数量的增加而不断完善[1]。单纯形法使最优化方法应用于岩质边坡稳定性分析的研究和应用前进了一大步。同为最优化方法,遗传算法是最近发展起来的一种仿生寻优算法。国内外已有一些学者试图将遗传算法应用于搜索安全系数最小的边坡滑裂面,以期获得更优的结果。文献[2]将此算法应用于基于圆弧滑裂面假定的任意形状坡面的非均质土坡情况,搜索的目标是使边坡安全系数最小的圆弧滑裂面圆心和半径。本文将在文献[1]和文献[2]的基础上,应用遗传算法搜索边坡安全系数最小的任意形状滑裂面,根据工程实践经验,主要是折线组合的滑裂面。 2.遗传算法及其应用于岩土工程的基础
如前所述,搜索边坡最危险滑裂面问题是安全系数对滑裂面形状的泛函极值问题。数值方法求解这一问题的主要手段是迭代运算。一般的迭代方法容易陷入局部极小的陷阱而出现"死循环"现象,使迭代无法进行。遗传算法很好地克服了这个缺点,是一种全局优化算法。
生物在漫长的进化过程中,从低等生物一直发展到高等生物,可以说是一个绝妙的优化过程。这是自然环境选择的结果。人们研究生物进化现象,总结出进化过程包括复制、杂交、变异、竞争和选择。一些学者从生物遗传、进化的过程得到启发,提出了遗传算法(GA)。算法中称遗传的生物体为个体(indivial),个体对环境的适应程度用适应值(fitness)表示。适应值取决于个体的染色体(chromosome),在算法中染色体常用一串数字表示,数字串中的一位对应一个基因(gene)。一定数量的个体组成一个群体(population)。对所有个体进行选择、交叉和变异等操作,生成新的群体,称为新一代(new generation)。
遗传算法计算程序的流程可以表示如下[3]:
第一步 准备工作
(1)选择合适的编码方案,将变量(特征)转换为染色体(数字串,串长为m)。通常用二进制编码。
(2)选择合适的参数,包括群体大小(个体数M)、交叉概率PC和变异概率Pm。
(3)确定适应值函数f(x)。f(x)应为正值。
第二步 形成一个初始群体(含M个个体)。在边坡滑裂面搜索问题中,取已分析的可能滑裂面组作为初始群体。
第三步 对每一染色体(串)计算其适应值fi,同时计算群体的总适应值 。
第四步 选择
计算每一串的选择概率Pi=fi/F及累计概率 。选择一般通过模拟旋转滚花轮(roulette,其上按Pi大小分成大小不等的扇形区)的算法进行。旋转M次即可选出M个串来。在计算机上实现的步骤是:产生[0,1]间随机数r,若r<q1,则第一串v1入选,否则选v2,使满足qi-1<r<qi(2≤i≤m)。可见适应值大的入选概率大。
第五步 交叉
(1) 对每串产生[0,1]间随机数,若r>pc,则该串参加交叉操作,如此选出参加交叉的一组后,随机配对。
(2) 对每一对,产生[1,m]间的随机数以确定交叉的位置。
第六步 变异
如变异概率为Pm,则可能变异的位数的期望值为Pm ×m×M,每一位以等概率变异。具体为对每一串中的每一位产生[0,1]间的随机数r,若r<Pm,则该位发生反转,如对染色体二进制编码为数字0变为1,1变为0。
如新个体数达到M个,则已形成一个新群体,转向第三步;否则转向第四步继续遗传操作。直到找到使适应值最大的个体或达到最大进化代数为止。
由于选择概率是由适应值决定的,即适应值大的染色体入选概率也较大,使选择起到"择优汰劣"的作用。交叉使染色体交换信息,结合选择规则,使优秀信息得以保存,不良信息被遗弃。变异是基因中得某一位发生突变,以达到产生确实有实质性差异的新品种。遗传算法虽是一种随机算法,但它是有导向的,它所使用的"按概率随机选择"方法是在有方向的搜索方法中的一种工具。正是这种独特的搜索方法,使遗传算法自然地避开了其它最优化算法常遇到的局部最小陷阱。遗传算法搜索最优结果的效果在数学上还没有严格的证明,但它的有效性已在许多专业的应用的得到体现。对于岩质边坡安全系数对滑裂面形状这样不可微的泛函极值问题,就目前的科学认识水平来讲,遗传算法不失为一种可以信赖的方法。 3.用遗传算法搜索安全系数最小的边坡任意形状滑裂面
在边坡(尤其是岩质边坡)最危险滑裂面搜索问题中,滑裂面的实际形状是很复杂的,起控制作用的是岩体的主要结构面和边坡的体型。从以往实际工程经验看,可以总结出岩质边坡滑裂面在顺滑方向上的剖面形状为折线,由岩体结构面和局部岩土材料的剪切破坏面连接而成。这样,搜索最危险滑裂面的问题就可以简化为从折线滑裂面组合中寻优的问题。本文用遗传进化算法解决这个问题。
(1) 定义遗传算法的目标函数
目标函数定义为边坡的安全系数,用安全系数的大小表示解的适应值。在边坡最危险滑裂面搜索问题中,解的安全系数越小,适应性能越好。
(2) 初始群体的确定
根据边坡的工程地质调查记录,根据经验初步拟定出一批滑裂面形状。如图1所示,滑裂面由点序列Ai(xi,yi)(i=1,?,N)表示。将点序列AI的坐标(xi,yi)依次排列成x1y1x2y2?xNyN的形式,经二进制编码形成一条染色体。对于拟定的滑裂面形状,其对应的安全系数用EMU程序[4]进行计算。
(3) 确定搜索范围
根据经验对每个点Ai,确定其坐标(xi,yi)的可能变化范围。在此范围内搜索导致最小安全系数的边坡滑裂面形状。
(4) 计算
将初始种群的所有拟定滑裂面形状(染色体)交给遗传算法程序进行计算。具体过程参见前文。
4.算例分析[4]
图1 天生桥二级电站首部枢纽进水口右岸滑坡示意图
选用天生桥二级电站首部枢纽进水口右岸滑坡作为算例,图1为其计算简图。滑坡高约30m,总方量为7000余m3,主要为第四系冲坡积物和施工堆碴。物理力学参数见表1。
表1 各土层物理力学性能指标
土层 密度(g/cm3) 抗剪强度指标
内摩擦角 凝聚力(kPa)
① 施工弃碴 1.85 21.8° 19.6
② 坡积土 1.85 21.8° 0.0
③ 砂土 1.85 21.8° 29.4
④ 砂质淤泥 1.85 20.8° 34.3
⑤ 河卵石、砾石 1.90 24.2° 0.0
滑坡发生前,靠近坡脚处因修建挡土墙被开挖而削弱边坡的整体稳定性,可以断定滑坡的滑裂面将从此经过。本例题还将忽略实际工程中坡顶张裂缝的影响。选用5个点的折线来模拟滑裂面形状,初步确定AiBiCiDiE(i=1~4)为可能的滑裂面。滑裂面上端点Ai的y坐标已受限制,下端点E的x、y坐标均已确定,故滑裂面只有7个自由度。按遗传算法的要求将滑裂面表示成如下形式:
xAxByBxCyCxDyD
四个模拟滑裂面的坐标和由EMU程序分析的安全系数列于表2。
表2 模拟滑裂面坐标及安全系数(坐标单位 m)
滑裂面 xA xB yB xC yC xD yD 安全系数
A1B1C1D1E 35.44 27.69 16.82 18.79 9.25 11.39 4.49 0.92
A2B2C2D2E 38.15 30.60 20.69 23.14 14.60 14.12 8.37 0.99
A3B3C3D3E 39.02 34.18 18.47 26.28 10.41 16.07 4.58 1.02
A3B3C4D4E 39.02 34.18 18.47 25.12 11.39 14.70 4.97 1. 03
限制搜索范围为每个自由度可在2.0m范围内变化。将4个排列好的数字串作为输入数据交给遗传算法程序进行编码、计算。经过大量运算,最后在最大种群代数(1000)群体中找到使安全系数最小的坐标数字串,经译码形成如下坐标:
(36.89,30.07)(33.25,21.52)(21.71,9.34)(13.54,5.07)(0.0,0.0)
即为图1中的ABCDE滑裂面。由遗传算法求出其相应的安全系数为0.90。滑裂面形式和安全系数都比较接近实际情况。
5.结语
遗传算法是一种高效的寻优算法,而且能有效地解决局部最小问题、非线性映射关系的表示、非线性映射关系不可微等普通优化算法常遇到的问题。算例的成果证明了这一特点。将遗传算法应用于滑坡滑裂面搜索问题,主要的工作是将工程问题简化成遗传算法需要的形式,简化时需详细参考地质调查资料和工程经验,务使简化的形式接近实际情况。对于简化的搜索样本,其安全系数的计算必须可靠,为此可应用一些比较成熟的计算程序,如EMU等。充分考虑实际工程地质情况和选取切合实际的搜索样本后,遗传算法程序必将能为滑坡搜索出最有可能的滑裂面。
参考文献
1 陈祖煜,邵长明,最优化方法在确定边坡最小安全系数方面的应用,岩土工程学报,Vol.10, No.4, 1998.7。
2 肖专文,张奇志,梁力,林韵梅,遗传进化算法在边坡稳定性分析中的应用,岩土工程学报,Vol.20, No.1, 1998.1。
3 周明,孙树栋,遗传算法原理及应用,国防工业出版社,1999.6。
4 陈祖煜,岩质高边坡稳定分析程序EMU,1995.5。
Research on Searching Least Factor of Safety of Slopes with Genetic Algorithm
Lu Feng Chen Zuyu Li Sumei
(Department of Structure and Material, IWHR)
Abstract
The problem of searching least factor of safety of slopes and the theory of Genetic Algorithm have been introced in this paper. This theory has been employed to solve this problem to find the most possible slide of slopes. As an example, the application of genetic algorithm on the Tianshengqiao Power Station Right Bank Slide has been presented.
Keywords: Slope, Factor of Safety, Genetic Algorithm, EMU Program.
❸ 遗传算法的程序应用,最好举例说明。
这种很主流的算法能搜到很多。
比如遗传算法合集,包括遗传算法简介、研究热点、着作、站点、参考论文下载等:
http://www.chinaai.org/ai/neural-network/genetic-algorithm.html
看之前记得打开杀毒软件跟防火墙。
❹ 电力系统中关于遗传算法的应用
可以直接将X设为一个母体,每个母体由X1,X2,X3,X4组成。每一组解为一个母体。
种群大小就是你取的母体(X)的个数。
约束条件在函数中可以用if等语句实现。
我也只是用遗传算法做了一下毕业设计,没有深究,够用就行了
欢迎LL单Q我讨论.....
❺ 高分悬赏:遗传算法应用实例
柔性生产计划?我想在这方面,遗传算法应用的例子还是有一些的。比如说人员的安排,机器设备的调度等
❻ 遗传算法有什么经典应用
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。
❼ 遗传算法 简单程序应用
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
class Best {
public int generations; //最佳适应值代号
public String str; //最佳染色体
public double fitness; //最佳适应值
}
public class SGAFrame extends JFrame {
private JTextArea textArea;
private String str = "";
private Best best = null; //最佳染色体
private String[] ipop = new String[10]; //染色体
private int gernation = 0; //染色体代号
public static final int GENE = 22; //基因数
/**
* Launch the application
* @param args
*/
public static void main(String args[]) {
try {
SGAFrame frame = new SGAFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Create the frame
*/
public SGAFrame() {
super();
this.ipop = inialPops();
getContentPane().setLayout(null);
setBounds(100, 100, 461, 277);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JLabel label = new JLabel();
label.setText("X的区间:");
label.setBounds(23, 10, 88, 15);
getContentPane().add(label);
final JLabel label_1 = new JLabel();
label_1.setText("[-255,255]");
label_1.setBounds(92, 10, 84, 15);
getContentPane().add(label_1);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
SGAFrame s = new SGAFrame();
str = str + s.process() + "\n";
textArea.setText(str);
}
});
button.setText("求最小值");
button.setBounds(323, 27, 99, 23);
getContentPane().add(button);
final JLabel label_2 = new JLabel();
label_2.setText("利用标准遗传算法求解函数f(x)=(x-5)*(x-5)的最小值:");
label_2.setBounds(23, 31, 318, 15);
getContentPane().add(label_2);
final JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setBounds(23, 65, 399, 164);
getContentPane().add(panel);
final JScrollPane scrollPane = new JScrollPane();
panel.add(scrollPane, BorderLayout.CENTER);
textArea = new JTextArea();
scrollPane.setViewportView(textArea);
//
}
/**
* 初始化一条染色体(用二进制字符串表示)
* @return 一条染色体
*/
private String inialPop() {
String res = "";
for (int i = 0; i < GENE; i++) {
if (Math.random() > 0.5) {
res += "0";
} else {
res += "1";
}
}
return res;
}
/**
* 初始化一组染色体
* @return 染色体组
*/
private String[] inialPops() {
String[] ipop = new String[10];
for (int i = 0; i < 10; i++) {
ipop[i] = inialPop();
}
return ipop;
}
/**
* 将染色体转换成x的值
* @param str 染色体
* @return 染色体的适应值
*/
private double calculatefitnessvalue(String str) {
int b = Integer.parseInt(str, 2);
//String str1 = "" + "/n";
double x = -255 + b * (255 - (-255)) / (Math.pow(2, GENE) - 1);
//System.out.println("X = " + x);
double fitness = -(x - 5) * (x - 5);
//System.out.println("f(x)=" + fitness);
//str1 = str1 + "X=" + x + "/n"
//+ "f(x)=" + "fitness" + "/n";
//textArea.setText(str1);
return fitness;
}
/**
* 计算群体上每个个体的适应度值;
* 按由个体适应度值所决定的某个规则选择将进入下一代的个体;
*/
private void select() {
double evals[] = new double[10]; // 所有染色体适应值
double p[] = new double[10]; // 各染色体选择概率
double q[] = new double[10]; // 累计概率
double F = 0; // 累计适应值总和
for (int i = 0; i < 10; i++) {
evals[i] = calculatefitnessvalue(ipop[i]);
if (best == null) {
best = new Best();
best.fitness = evals[i];
best.generations = 0;
best.str = ipop[i];
} else {
if (evals[i] > best.fitness) // 最好的记录下来
{
best.fitness = evals[i];
best.generations = gernation;
best.str = ipop[i];
}
}
F = F + evals[i]; // 所有染色体适应值总和
}
for (int i = 0; i < 10; i++) {
p[i] = evals[i] / F;
if (i == 0)
q[i] = p[i];
else {
q[i] = q[i - 1] + p[i];
}
}
for (int i = 0; i < 10; i++) {
double r = Math.random();
if (r <= q[0]) {
ipop[i] = ipop[0];
} else {
for (int j = 1; j < 10; j++) {
if (r < q[j]) {
ipop[i] = ipop[j];
break;
}
}
}
}
}
/**
* 交叉操作
* 交叉率为25%,平均为25%的染色体进行交叉
*/
private void cross() {
String temp1, temp2;
for (int i = 0; i < 10; i++) {
if (Math.random() < 0.25) {
double r = Math.random();
int pos = (int) (Math.round(r * 1000)) % GENE;
if (pos == 0) {
pos = 1;
}
temp1 = ipop[i].substring(0, pos)
+ ipop[(i + 1) % 10].substring(pos);
temp2 = ipop[(i + 1) % 10].substring(0, pos)
+ ipop[i].substring(pos);
ipop[i] = temp1;
ipop[(i + 1) / 10] = temp2;
}
}
}
/**
* 基因突变操作
* 1%基因变异m*pop_size 共180个基因,为了使每个基因都有相同机会发生变异,
* 需要产生[1--180]上均匀分布的
*/
private void mutation() {
for (int i = 0; i < 4; i++) {
int num = (int) (Math.random() * GENE * 10 + 1);
int chromosomeNum = (int) (num / GENE) + 1; // 染色体号
int mutationNum = num - (chromosomeNum - 1) * GENE; // 基因号
if (mutationNum == 0)
mutationNum = 1;
chromosomeNum = chromosomeNum - 1;
if (chromosomeNum >= 10)
chromosomeNum = 9;
//System.out.println("变异前" + ipop[chromosomeNum]);
String temp;
if (ipop[chromosomeNum].charAt(mutationNum - 1) == '0') {
if (mutationNum == 1) {
temp = "1" + ipop[chromosomeNum].substring
(mutationNum);
} else {
if (mutationNum != GENE) {
temp = ipop[chromosomeNum].substring(0, mutationNum -
1) + "1" + ipop
[chromosomeNum].substring(mutationNum);
} else {
temp = ipop[chromosomeNum].substring(0, mutationNum -
1) + "1";
}
}
} else {
if (mutationNum == 1) {
temp = "0" + ipop[chromosomeNum].substring
(mutationNum);
} else {
if (mutationNum != GENE) {
temp = ipop[chromosomeNum].substring(0, mutationNum -
1) + "0" + ipop
[chromosomeNum].substring(mutationNum);
} else {
temp = ipop[chromosomeNum].substring(0, mutationNum -
1) + "1";
}
}
}
ipop[chromosomeNum] = temp;
//System.out.println("变异后" + ipop[chromosomeNum]);
}
}
/**
* 执行遗传算法
*/
public String process() {
String str = "";
for (int i = 0; i < 10000; i++) {
this.select();
this.cross();
this.mutation();
gernation = i;
}
str = "最小值" + best.fitness + ",第" + best.generations + "个染色体";
return str;
}
}
❽ 关于遗传算法在试题组卷中的应用
4 遗传算法应用
一般来说,用户在自动组卷时会对试卷的质量提出多方面的要求,如总题量、平均难度、题型比例、章节比例、重点章节比例、知识点的交叉与综合等,自动组卷就应最大程度的满足用户的要求。因此,在组卷之前,我们首先为自动组卷过程建立控制指标相应状态空间D,
D=[]
D的每一行由某一试题的控制指标组成,如题号、题型、章节、难度等,并且这些属性指标都进行编码表示成二进制形式,而每一列是题库中的某一指标的全部取值。在具体出题时,考方可能不会用到所有的指标,所以D包含的个体d_target可以表示为d_request和d_void,d_request表示考方要求的控制指标,d_void表示考方不要求的控制指标。即
d_target::=<d_request>:<d_void>
<d_request>::={0,1}m
<d_void>::={0,1}n
试题库[STK]中的每一道试题在建库时都输入了相应的属性指标。试题模型的产生形式是:
if <data> then
<model>
<data>::={0,1,#}m
#表示0和1之间的任意一位。
考试自动出题的遗传算法如下:
(1) 根据考方的出题要求,规划状态空间库D中的数据,保留d_request部分,而不要d_void部分,对其剩余部分进行编码D [1],D[2],……D[i]。
(2) 初始化试题库[STK]。随机从题库中抽出一组试题,并进行编号STK[1],STK[2]……STK[j],确定合适的交换概率Pc和变异概率Pm;并定义其适应值flexibility[k](k=1,2……j)
flexibility[k]<-0 (k=1,2……j)
(3) 从试题库[STK]中取出STK[m](0≤m≤j)与状态空间库[D]中的指标D[n] (0≤n≤i)进行匹配。如果STK[m]与D[n]完全匹配,则
flexibility[k]<-flexibility[k]+1
如果不匹配,则有
flexibility[k]<-flexibility[k]+0
(4) 进行淘汰选择,保留具有高适应度的试题。即把flexibility[k]为0的STK[m]去掉,这样就生成了一个新的试题模型STK[h]。
(5) 重复过程2生成新的试题模型STK[p]。按一定的交换概率Pc从[STK]中随机选取模型STK[h]和STK[p],交换彼此位串中对应的值,产生新的试题模型STK[h]、STK[p],如
交换前STK[h]=1 1 0 1 0 1 1
STK[p]=0 0 1 1 1 1 0
交换前STK[h]=1 1 1 1 0 1 1
STK[p]=1 1 1 1 1 1 0
(6) 按一定的变异概率从题库[STK]中随机选出一试题模型STK[h]进行基因突变,产生一个新的试题模型。
(7) 在完成以上选择、交叉、变异步骤后,产生一个考试试题模型,按照事先确定的误差精度对其进行收敛性的判别,当其适应度高时,试题组卷成功,转向步骤8,如果其适应度低,则转向步骤3继续执行。
(8) 输出相应的考试试题,组卷结束。
以上用遗传算法抽题时,交换概率Pc和变异概率Pm的确定很重要。Pc
太小使选题工作进展缓慢,太大则会破坏适应值高的试题模型。通常规定其为0.4。同样,Pm太小就不能产生新的试题模型,太大又会产生过多的试题模型。它宜规定为0.1。
在自动选题时,选题的方式可采用父辈挑选和生存选择两种。父辈挑选就是采用不返回随机抽样,它使每个题目都有被选中的可能;生存选择采用允许父辈和子代进行竞争,并让其中的优良者进入下一轮竞争环境的二分之一择优选择。两种选择方式共同作用于选题保证了选题的顺利完成。在选题的过程中,哪一道题目被选中是一个非均匀随机事件,其概率依赖于上一次选题的过程。
具体的代码可发网络消息与我联系.
❾ 为什么遗传算法能被广泛的应用到各个领域
遗传算法在很多领域都得到应用;从神经网络研究的角度上考虑,最关心的是遗传算法在神经网络的应用。在遗传算法应用中,应先明确其特点和关键问题,才能对这种算法深入了解,灵活应用,以及进一步研究开发。一、遗传算法的特点 1.遗传算法从问题解的中集开始嫂索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,复盖面大,利于全局择优。 2.遗传算法求解时使用特定问题的信息极少,容易形成通用算法程序。由于遗传算法使用适应值这一信息进行搜索,并不需要问题导数等与问题直接相关的信息。遗传算法只需适应值和串编码等通用信息,故几乎可处理任何问题。 3.遗传算法有极强的容错能力遗传算法的初始串集本身就带有大量与最优解甚远的信息;通过选择、交叉、变异操作能迅速排除与最优解相差极大的串;这是一个强烈的滤波过程;并且是一个并行滤波机制。故而,遗传算法有很高的容错能力。 4.遗传算法中的选择、交叉和变异都是随机操作,而不是确定的精确规则。这说明遗传算法是采用随机方法进行最优解搜索,选择体现了向最优解迫近,交叉体现了最优解的产生,变异体现了全局最优解的复盖。 5.遗传算法具有隐含的并行性
❿ 遗传算法有哪些应用
遗传算法的搜索策略和优化搜索方法是不依附于梯度信息及其它的辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学。遗传算法的应用领域有很多,下面针对一些主要的应用领域做简单的介绍。
1.函数优化:该领域是遗传算法得以应用的经典领域,同时它也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于函数优化问题,如一些非线性、多模型、多目标等函数问题用遗传算法很容易得到较好的结果,而用其他算法则较难。
2.组合优化:由于组合优化问题的搜索空间在不断地增大,有时用枚举法很难得到最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。比如,在旅行商问题、装箱问题及图形划分等问题上,已经成功得以应用了遗传算法。