问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

遗传算法 简单程序应用

发布网友 发布时间:2022-07-13 23:14

我来回答

4个回答

热心网友 时间:2023-09-13 15:19

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;
}

}

热心网友 时间:2023-09-13 15:20

自己看吧
http://wenku.baidu.com/view/f82fd604cc175527072208d4.html追问就一段代码 我拿来有什么用,。。

热心网友 时间:2023-09-13 15:20

发给你了 请查收和给分

热心网友 时间:2023-09-13 15:21

已经发了追问没收到。。

遗传算法matlab程序代码

遗传算法主循环 for gen = 1:num_gen 计算适应度 fitness = arrayfun(@(ind) fitness_func(ind), pop);选择操作(这里简单使用轮盘赌选择)selected_indices = rouletteWheelSelection(fitness, pop_size);mating_pool = pop(selected_indices, :);交叉操作(单点交叉)offspring = crossover(mating...

基因表达相关性分析

基因表达相关性分析是迈杰转化医学研究(苏州)有限公司的核心业务之一。我们运用先进的生物信息学工具和方法,对大量基因表达数据进行深入挖掘,旨在揭示不同基因间的相互作用及其与生物表型之间的关联性。通过相关性分析,我们能够识别出与特定疾病、药物反应或生物过程密切相关的基因群,为精准医疗、药物研发及生物学研究提供有力的数据支持和理论依据,助力客户加速科研进程,推动生命科学领域的发展。迈杰转化医学研究(苏州)有限公司于2013年成立,其前身为凯杰(苏州)转化医学研究有限公司。基于基因组学、蛋白组学、细胞组学及病理组学等综合性转化医学平台,丰富的伴随诊断开发经验,高质量的管理体系以及高素质的研发管理团队,迈杰转化...

遗传算法求最小值点

用遗传算法求已知函数的最小值点的方法:1、首先建立自定义函数,f(x)ga_fun=@(x)11*sin(6*x)+7*cos(5*x);2、其二用ga()函数求解最小值 [x,fval,exitflag] = ga(ga_fun,1,[],[],[],[],lb)3、然后用ezplot()函数或plot()函数,绘出其函数f(x)的图形及最小值点 4、运行结...

请问能给几个遗传算法的应用实例么,越简单越好,如果有java程序实现的就...

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, ...

遗传算法有哪些有趣应用?

体的表现型x和基因型X之间可通过编码和解码程序相互转换。2) 初始群体的产生遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始群体数据。本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机方法产生。选择运算(或称为复制运算)把当前群体中适应度较高的个体按...

有一个C#遗传算法程序求y=x*x在[0,31]范围内的极值。有的地方看不太懂...

遗传算法的主要步骤是4步,初始化种群,选择,交叉,变异。这里说的淘汰函数,很可能就是在选择选择算子,这个算子是根据最适合最优先的算法来实现。举个简单的例子,你要用数字进行遗传算法,肯定得把他转化为2进制的染色体,【0-31】就是从00000-11111,每条染色体5个基因。对于选择运算来说,每次要从...

谁有遗传算法的一些源程序啊,尽量别太复杂的。麻烦哪位达人帮帮忙啊,这...

现在,程序通过循环来考察各基因组,把它们相应的适应性分数一个一个累加起来,直到这一 部分累加和 大于 fSlice 值时,就返回该基因组。就是这样简单。3.4.4.2 重温杂交操作(Crossover Revisited)这一函数要求2个染色体在同一随机位置上断裂开,然后将它们在断开点以后的部分进行互换,以形成 2 个...

遗传算法

%遗传算法子程序%Name: decodebinary.m%产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop)[px,py]=size(pop); %求pop行和列数for i=1:pypop1(:,i)=2.^(py-i).*pop(:,i);endpop2=sum(pop1,2); %求pop1的每行之和% 2.2.2 将二...

游戏人工智能的遗传算法

遗传算法是根据生物进化思想而启发得出的一种全局优化算法。遗传算法简介:对问题产生一个描述,对待解决问题进行编码。随机初始化群体X(0)=(x1, x2, … xn)。对当前群体X(t)中每个个体xi计算其适应度F(xi),适应度表示了该个体的性能好坏。应用选择算子产生优良种群goodX(t)。对goodX(t)应用遗...

matlab遗传算法求最小包容圆

function r=rmax(p,x)p :已知平面点集。p的每一列就是一点的x y坐标。x :包络圆的中心坐标。a=x(1);b=x(2);r=max(((p(1,:)-a).^2+(p(2,:)-b).^2).^0.5);易知,当r取值最小时,即为最小包络圆。下面是matlab求解程序:p=rand(2,10);%已知平面点列。p的每一列就是...

用遗传算法工具箱求解一个多目标优化问题,现在需要一个matlab程序,求高 ...

输入 &gt;&gt; optimtool %调用遗传算法工具箱 3、在遗传算法工具箱界面中,分别对Fitness function框内输入@ga_fun1();A框内输入[1,1,1];b框内输入16;Aeq框内输入[];beq框内输入[];Lower框内输入[0,0,0];Upper框内输入[];4、单击Start。得到x=4.508 y=2.513 z=1.912值。

遗传算法和蚁群算法哪个简单 遗传算法程序 多目标遗传算法程序 进化算法和遗传算法 遗传算法及其应用 遗传算法程序设计探讨 遗传算法和蚁群算法 简单遗传算法 简单遗传算法的三种
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎么退出夸克HD账号登录状态? 猫感冒了看兽医要多少钱 Pka 与 PH的区别及各自的应用领域 储干在公司是干什么的职位啊 2025数字博览会 岗位丨申万宏源证券研究所招聘实习生(可留用), 国海证券研究所+开源证 ... 用发酵粉蒸馒头如何蒸? 雷蛇现在的售后保修政策是怎样的有个鼠标双击了 安代驾好还是e代驾好 急需一篇科技小论文,六年级水平的`要快`谢谢啊`! 男装摩托车挡风板这里可以这样安装吗?会不会影响摩托车散热问题? 宝马车的性能 目前市场上哪个牌子的化妆品比较火? 休闲袜和运动袜有什么区别 现在诺基亚哪几款手机游戏性能比较好,能玩大型游戏的 想买个2000左右的手机,什么品牌都可以,要性价比高的,安卓系统,求大家推荐 请问一下安装一颗城市路灯 从挖坑 挖沟 预埋线管 拉线 立路灯 多少钱? 露米娅900为什么价格降得那么快? 混凝土开槽(三公分)多少钱一米 混凝土挖坑嵌接线盒多少钱一个 nUbⅰα什么牌子手机 挖水沟30公分宽,45公分深多少钱一米 诺基亚露米娅如何连接电脑 露米娅535屏幕不灵怎么办 诺基亚露米娅何时上市的 诺基亚露米娅系列哪个有闪光灯 咱们来讨论下2012年诺基亚露米娅手机有多少销量!!! Struts2.5.16更新后怎么访问Action? Action写法以及struts.xml配置 露米娅手机多少钱 struct2.5.10.1升级需要替换哪些包 struts2.3和struts2.5的区别在哪 男的不知道下面有蛇,女的不知道男的背上有石头,都是为了对方考虑。 女的看不到男人身上的压力,男的看 纪昌学射 的概括 24v直流用什么型号电位器 请问各位亲蒸脸器蒸脸好吗,蒸脸器有什么好处 团乐购上的化妆品是不是正品? 团乐购这个网站怎么样??有人在上面团购过吗? 团乐购的公司背景 团乐购的网站简介 中药抽屉兜纸怎么叠- 问一问 团乐购网站欺骗消费者,该怎么办呢? 萧山人怎么折金兜 团乐购一般用什么快递 丝巾怎么折成肚兜 团乐购怎么样 不用银行卡号就只有可以在网上借款吗? 足字旁的知念什么 买车必须交的保险 excel中如何把单元格快捷的变成这样? 关于EXCEL单元格修改的快捷方式 跪求《失眠社群系列之不眠之夜》2019年百度云视频在线观看资源,茱蒂蒙·琼查容苏因主演的