




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、标准遗传算法(2008-08-10 16:03:11)标签:染色体 遗传算法 best if private 杂谈 1、利用标准遗传算法求解函数f(x)=(x-5)*(x-5)的最小值,其中x属于区间-255,255,算法的参数自己设定。要求:1)给出求解本问题的标准遗传算法源代码(要有注释)序界面: 算法的流程图: 开始 初始化染色体 计算适度值 选择操作 交叉操作 变异操作 适合度最优染色体 条件终止 结束 源程序:import java.awt.BorderLayout;import java.awt.event.ActionEvent;import java.awt.event.Act
2、ionListener;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;
3、 /最佳适应值 public class SGAFrame extends JFrame private JTextArea textArea; private String str = "" private Best best = null; /最佳染色体 private String ipop = new String10; /染色体 private int gernation = 0; /染色体代号 public static final int GENE = 22; /基因数 public static void main(String args) try SGAF
4、rame frame = new SGAFrame(); frame.setVisible(true); catch (Exception e) e.printStackTrace(); public SGAFrame() / SGAFrame类的构造函数 super(); this.ipop = inialPops(); getContentPane().setLayout(null); setBounds(100, 100, 461, 277); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JLabel label = new
5、 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.addAct
6、ionListener(new ActionListener() public void actionPerformed(final ActionEvent e) SGAFrame s = new SGAFrame(); str = str + cess() + "n" textArea.setText(str); ); button.setText("求最小值"); button.setBounds(323, 27, 99, 23); getContentPane().add(button); final JLabel label_2 = n
7、ew 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 scr
8、ollPane = new JScrollPane(); panel.add(scrollPane, BorderLayout.CENTER); textArea = new JTextArea(); scrollPane.setViewportView(textArea); / private String inialPop() String res = "" for (int i = 0; i < GENE; i+) if (Math.random() > 0.5) res += "0" else res += "1"
9、 return res; private String inialPops() String ipop = new String10; for (int i = 0; i < 10; i+) ipopi = inialPop(); return ipop; private double calculatefitnessvalue(String str) int b = Integer.parseInt(str, 2); /String str1 = "" + "/n" double x = -255 + b * (255 - (-255) / (M
10、ath.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 fitn
11、ess; private void select() double evals = new double10; / 所有染色体适应值 double p = new double10; / 各染色体选择概率 double q = new double10; / 累计概率 double F = 0; / 累计适应值总和 for (int i = 0; i < 10; i+) evalsi = calculatefitnessvalue(ipopi); if (best = null) best = new Best(); best.fitness = evalsi; best.generat
12、ions = 0; best.str = ipopi; else if (evalsi > best.fitness) / 最好的记录下来 best.fitness = evalsi; best.generations = gernation; best.str = ipopi; F = F + evalsi; / 所有染色体适应值总和 for (int i = 0; i < 10; i+) pi = evalsi / F; if (i = 0) qi = pi; else qi = qi - 1 + pi; for (int i = 0; i < 10; i+) doubl
13、e r = Math.random(); if (r <= q0) ipopi = ipop0; else for (int j = 1; j < 10; j+) if (r < qj) ipopi = ipopj; break; 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; i
14、f (pos = 0) pos = 1; temp1 = ipopi.substring(0, pos) + ipop(i + 1) % 10.substring(pos); temp2 = ipop(i + 1) % 10.substring(0, pos) + ipopi.substring(pos); ipopi = temp1; ipop(i + 1) / 10 = temp2; private void mutation() for (int i = 0; i < 4; i+) int num = (int) (Math.random() * GENE * 10 + 1); i
15、nt 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("变异前" + ipopchromosomeNum); String temp; i
16、f (ipopchromosomeNum.charAt(mutationNum - 1) = '0') if (mutationNum = 1) temp = "1" + ipopchromosomeNum.substring (mutationNum); else if (mutationNum != GENE) temp = ipopchromosomeNum.substring(0, mutationNum - 1) + "1" + ipop chromosomeNum.substring(mutationNum); else te
17、mp = ipopchromosomeNum.substring(0, mutationNum - 1) + "1" else if (mutationNum = 1) temp = "0" + ipopchromosomeNum.substring (mutationNum); else if (mutationNum != GENE) temp = ipopchromosomeNum.substring(0, mutationNum - 1) + "0" + ipop chromosomeNum.substring(mutatio
18、nNum); else temp = ipopchromosomeNum.substring(0, mutationNum - 1) + "1" ipopchromosomeNum = temp; /System.out.println("变异后" + ipopchromosomeNum); public String process() String str = "" for (int i = 0; i < 10000; i+) this.select(); this.cross(); this.mutation(); ger
19、nation = i; str = "最小值" + best.fitness + ",第" + best.generations + "个染色体" return str; 2)多次运行程序,观察运行结果,给出你对标准遗传算法优缺点的判断(可以从是否收敛、收敛速度,参数设置等方面考虑)。答:运行程序的结果: 求四次最小值的结果: 本算法优缺点的判断:1 优点:l 本算法是基于面向对象语言 Java 开发,而遗传算法本身的思想也是存在继承等面向对象概念;l 算法执行速度快。2 缺点:l 参数设置方面的缺点(循环次数) 本算法循环10000
20、次,求解f(x)的最小值,理论上,循环的次数越大,其最小结果会越接近于0。 标准遗传算法优缺点的判断: 标准遗传算法的优点:(1). 将搜索过程作用在编码后的字符串上 ,不直接作用在优化问题的具体变量上 ,在搜索中用到的是随机的变换规则 ,而不是确定的规则。它在搜索时采用启发式的搜索 ,而不是盲目的穷举 ,因而具有更高所搜索效率。(2). 现行的大多数优化算法都是基于线性、凸性、可微性等要求 ,而遗传算法只需要适合度信息 ,不需要导数等其他辅助信息 ,对问题的依赖性较小 ,因而具有高度的非线性 ,适用范围更广。此外还可以写出一个通用算法 ,以求解许多不同的优化问题。(3). 遗传算法从一组初始
21、点开始搜索 ,而不是从某一个单一的初始点开始搜索。而且给出的是一组优化解 ,而不是一个优化解 ,这样可以给设计者更大的选择余地。它能在解空间内充分搜索 ,具有全局优化能力。(4). 遗传算法具有很强的易修改性。即使对原问题进行很小的改动 ( 比如目标函数的改进 ),现行的大多数算法就有可能完全不能使用 ,而遗传算法则只需作很小的修改就完全可以适应新的问题。(5). 遗传算法具有很强的可并行性 ,可通过并行计算来提高计算速度 ,因而更适用于大规模复杂问题的优化。 标准遗传算法的缺点:(1). 遗传算法的理论研究比较滞后。由于遗传算法本身也是一种仿生的思想 ,尽管实践效果很好 ,但理论证明比较困难。而且这种算法提出来的时间还不是很长 ,因此其理论和实践的研究几乎是平行进行的。(2). GA 算法本身的参数还缺乏定量的标准 ,目前采用的都是经验数值 ,而且不同的编码、不同的遗传技术都会影响到遗传参数的选取 ,因而会影响到算法的通用性。(3). GA 对处理约束化问题还缺乏有效的手段 ,传统的罚函数法中对惩罚因子的选取还是一个比较困难的技术问题。 已投稿到: 排行榜 圈子 阅读(45)|评论(0)|收藏(0)|打印|举报 前一篇:NTCIP简介后一篇:城市交通智能控制优化算法评论 重要提示:警惕虚假中奖信息,点击查看详情发评论 暂无评论。发评论 明星私家相册 用户昵
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产业升级改造项目厂房租赁合同模板
- 细胞与功能独特的细胞器
- 车辆抵押借款合同模板与合同履行监督
- 仓储服务仓单质押贷款合作协议
- 多重耐药菌感染护理规范与策略
- 车辆抵押担保车辆维修保养合同
- 高端酒店停车场车位租赁及增值服务合同
- 茶楼茶叶定制包装与品牌推广合同
- 双方合作经营特色餐饮店合同书
- 专业音响设备区域代理销售与品牌运营协议书
- 网络安全技术实操技能考核试题及答案
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 烧烤店菜单模板
- 文言文常考实词
- 宝安区义务教育入学申请·集体宿舍证明
- 《园艺植物育种学》试题库参考答案
- 急诊科护理查房中毒-PPT课件
- 宁波市建设工程资料统一用表(2022版)1 通用分册
- 11-059 职业技能鉴定指导书 继电保护(第二版)(11-059职业技能鉴定指导书职业标准试题库)
- GMP基础知识(新员工培训)
- LGJ钢芯铝绞线参数
评论
0/150
提交评论