//definition of one individual in populationpublicclassIndividual{//normally DifferentialEvolution uses floating point variablesfloatdata1,data2//but using integers is possible too intdata3}publicclassDifferentialEvolution{//Variables//linked list that has our population insideLinkedList<Individual>population=newLinkedList<Individual>()//New instance of Random number generatorRandomrandom=newRandom()intPopulationSize=20//differential weight [0,2]floatF=1//crossover probability [0,1]floatCR=0.5//dimensionality of problem, means how many variables problem has. this case 3 (data1,data2,data3)intN=3;//This function tells how well given individual performs at given problem.publicfloatfitnessFunction(Individualin){...returnfitness}//this is main function of programpublicvoidMain(){//Initialize population with individuals that have been initialized with uniform random noise//uniform noise means random value inside your search spaceinti=0while(i<populationSize){Individualindividual=newIndividual()individual.data1=random.UniformNoise()individual.data2=random.UniformNoise()//integers cant take floating point values and they need to be either roundedindividual.data3=Math.Floor(random.UniformNoise())population.add(individual)i++}i=0intj//main loop of evolution.while(!StoppingCriteria){i++j=0while(j<populationSize){//calculate new candidate solution//pick random point from populationintx=Math.floor(random.UniformNoise()%(population.size()-1))inta,b,c//pick three different random points from populationdo{a=Math.floor(random.UniformNoise()%(population.size()-1))}while(a==x);do{b=Math.floor(random.UniformNoise()%(population.size()-1))}while(b==x|b==a);do{c=Math.floor(random.UniformNoise()%(population.size()-1))}while(c==x|c==a|c==b);// Pick a random index [0-Dimensionality]intR=rand.nextInt()%N;//Compute the agent's new positionIndividualoriginal=population.get(x)Individualcandidate=original.clone()Individualindividual1=population.get(a)Individualindividual2=population.get(b)Individualindividual3=population.get(c)//if(i==R | i<CR)//candidate=a+f*(b-c)//else//candidate=xif(0==R|random.UniformNoise()%1<CR){candidate.data1=individual1.data1+F*(individual2.data1-individual3.data1)}// else isn't needed because we cloned original to candidateif(1==R|random.UniformNoise()%1<CR){candidate.data2=individual1.data2+F*(individual2.data2-individual3.data2)}//integer work same as floating points but they need to be roundedif(2==R|random.UniformNoise()%1<CR){candidate.data3=Math.floor(individual1.data3+F*(individual2.data3-individual3.data3))}//see if is better than original, if so replaceif(fitnessFunction(original)<fitnessFunction(candidate)){population.remove(original)population.add(candidate)}j++}}//find best candidate solutioni=0IndividualbestFitness=newIndividual()while(i<populationSize){Individualindividual=population.get(i)if(fitnessFunction(bestFitness)<fitnessFunction(individual)){bestFitness=individual}i++}//your solutionreturnbestFitness}}
^
Rocca, P.; Oliveri, G.; Massa, A. (2011). “Differential Evolution as Applied to Electromagnetics”. IEEE Antennas and Propagation Magazine53 (1): 38–49. doi:10.1109/MAP.2011.5773566.
^
Storn, R.; Price, K. (1997). “Differential evolution - a simple and efficient heuristic for global optimization over continuous spaces”. Journal of Global Optimization11: 341–359. doi:10.1023/A:1008202821328.
^ abc
Storn, R. (1996). "On the usage of differential evolution for function optimization". Biennial Conference of the North American Fuzzy Information Processing Society (NAFIPS). pp. 519–523.
^Das, S.; Suganthan, P. N. (2011). “Differential Evolution: A Survey of the State-of-the-art”. IEEE Trans. on Evolutionary Computation15 (1): 4-31. doi:10.1109/TEVC.2010.2059031.
^Das, S.; Mullick, S. S.; Suganthan, P. N. (2016). “Recent Advances in Differential Evolution - An Updated Survey”. Swarm and Evolutionary Computation27: 1-30. doi:10.1016/j.swevo.2016.01.004.
^
Liu, J.; Lampinen, J. (2002). "On setting the control parameter of the differential evolution method". Proceedings of the 8th International Conference on Soft Computing (MENDEL). Brno, Czech Republic. pp. 11–18.
^
Zaharie, D. (2002). "Critical values for the control parameters of differential evolution algorithms". Proceedings of the 8th International Conference on Soft Computing (MENDEL). Brno, Czech Republic. pp. 62–67.
^
Zhang, X.; Jiang, X.; Scott, P.J. (2011). "A Minimax Fitting Algorithm for Ultra-Precision Aspheric Surfaces". The 13th International Conference on Metrology and Properties of Engineering Surfaces.
Fast DE Algorithm A Fast Differential Evolution Algorithm using k-Nearest Neighbour Predictor.
MODE Application Parameter Estimation of a Pressure Swing Adsorption Model for Air Separation Using Multi-objective Optimisation and Support Vector Regression Model.