⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 objfunction.cpp

📁 基本遗传算法在求一个函数表达式的最大值应用!
💻 CPP
字号:
#include "stdafx.h"

#include "objfunction.h"
#include "chromosome.h"


template <class T>
T my_exp(T e,int index){//求e的index次方
	T result;
	result =1;
	if(index > 0){
		for(int i=0;i<index;i++)
			result = result * e;
		return result;
	}
	else
		return result;
}

double chro_decode(Chromosome & c,int offset,int index){
	int len = c.get_length ();
	long exp2 = 0;
	long sum = my_exp<long>( 2 , offset ) - 1;
	if((index+offset)<= len)
	{
		for(int i=0;i<offset;i++)
			exp2 = exp2 + c.myGenes[index + i].get_allele() * my_exp<long>(2,i) ; 
		return (double)exp2/(double)sum ;
	}
	else
		return 0.0;
}

double decode_to_X(double min,double max,double chro){
	return min + (max-min)*chro;
}


double obj_function(Chromosome & c){
	double x1,x2;
	int len = c.get_length () ;
	int offset = len /2 ;

	x1 = x2 = 0.0;
	x1 = decode_to_X(-2.048,2.048,chro_decode(c,offset,0));
	x2 = decode_to_X(-2.048,2.048,chro_decode(c,offset,offset));

	double x12,x22,x12_22,x1_1;
	x12 = x22 = x12_22 = x1_1 = 0.0 ;
	x12 = my_exp<double>(x1,2);
	x22 = my_exp<double>(x2,2);
	x1_1 = my_exp<double>(x1-1,2);
	x12_22 = my_exp<double>(x12-x22,2);
	
	
	return 100*x12_22 + x1_1 ;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -