Java算法---遗传算法示例

              用一个简单的实例带大家走进遗传算法的神奇世界。

  问题描述:

        求下面二元函数的最大值:

        

       遗传算法主要核心包括:编码,初始种群的产生,适应度计算,选择算子,交叉算子,变异算子。

      这个示例中采用二进制编码,x1,x2的范围在[1-7]直接,可以选择3位二进制进行编码,3为二进制编码刚好和每个数字对应。适应度计算,可以采取目标函数f(x1.x2),算法具体实现如下:

 

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
/**
 * Created by yaobo on 2016/6/20.
 */
public class GAMAX {
    public  static int MaxGen=1000;//最大遗传代数
    public static int generate;//全局变量,控制循环的代数
    double Pc=0.7;//交叉概率
    double Pm=0.05;//变异概率
    int Chromlenth=6;//染色体长度
    int scale=10;// 种群规模
    int everchromlength=3;//变量的编码长度
    int bestIndex;//当前代最好个体的索引
    int worstIndex;//当前代最坏个体的索引
    Individual bestIndividual;//当前代最好的个体
    Individual worstIndividual;//当前代最坏的个体
    Individual currentBest=new Individual();
    static double Rs=00.;//保存出现最好结果值
    static int Rsindex=-1;//保存出现最好结果的代数
    Individual[] population=new Individual[scale];//定义数组保存种群
    Random random=new Random();//随机函数
    public static void main(String[] args) {
        GAMAX gamax=new GAMAX();
        generate=0;//从0代开始
        gamax.generateInitalPopulation();//产生第一代个体
        gamax.evaluatePopulation();
        while (generate index=new ArrayList();
        int point;
        double p;
        String str1,str2;
        for(int i=0;icfitness[index]){
                index++;
            }
            newpoputation[i]=population[index];
        }

        for(int i=0;ibestIndividual.fitness){
                bestIndividual=population[i];
                bestIndex=i;
            }
            else if(population[i].fitnesscurrentBest.fitness){
                currentBest=bestIndividual;
            }
        }


    }
    void calculateFitnessValue(){//计算个体的适应度值
        String temp1,temp2;
        double x1,x2;
        for(int i=0;icurrentBest.fitness){
            currentBest=population[bestIndex];
        }else {
            population[worstIndex]=currentBest;
        }
    }
    void printInf(){
        double sum=0;
        double average;
        for (int i=0;i






你可能感兴趣的:(Java,Web)