public class genc {
public double bestfitness=0;
public static String[] ipop = new String[20]; //染色体
public static final int GENE = 10; //基因数
public class A{
private String inialPop() {
String res = "";
for (int i = 0; i < GENE; i++) {
if (Math.random() > 0.5) {
res += "0";
} else {
res += "1";
}
}
return res;
}
private void inialPops() {
for (int i = 0; i < 20; i++) {
ipop[i] = inialPop();
}
}
private double calculatefitnessvalue(String str) {
int b = Integer.parseInt(str, 2);
double x = b * 10 / (Math.pow(2, GENE) - 1);
double fitness = x*x+2*x+3;
return fitness;
}
public double select(String[] ipop1) {
double evals[] = new double[20]; // 所有染色体适应值
double p[] = new double[20]; // 各染色体选择概率
double q[] = new double[20]; // 累计概率
double F = 0; // 累计适应值总和
for (int i = 0; i < 20; i++) {
evals[i] = calculatefitnessvalue(ipop1[i]);
if (bestfitness==0) {
bestfitness = evals[i];
} else {
if (evals[i] > bestfitness) // 最好的记录下来
{
bestfitness = evals[i];
}
}
F = F + evals[i]; // 所有染色体适应值总和
}
for (int i = 0; i < 20; 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 <20; i++)
{
double r = Math.random();
if (r <= q[0])
{
ipop[i] = ipop[0];
}