遗传算法代码

2026/1/16 13:13:15

//---------------------------------------------------------------------------

#include #pragma hdrstop #include #include

#include \

//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource \TForm1 *Form1;

#include

float x1_array[100]; //存放x1的十进制 float x2_array[100]; //存放x2的十进制

int x1_update[100][100]; //更新x1的二进制 int x2_update[100][100]; //更新x2的二进制 int x1_bin[100][100]; //存放x1的二进制 int x2_bin[100][100]; //存放x2的二进制 int x1_cross[100][100]; //存放被选中x1父辈 int x2_cross[100][100]; //存放被选中x2父辈

float x1_best[1000],x2_best[1000]; //存放每一代最佳种群

//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {

//-------开始------ Edit1->Text=\ Edit2->Text=\ Edit5->Text=\ Edit6->Text=\ Edit7->Text=\ Edit8->Text=\ Edit3->Text=\ Edit4->Text=\ Edit9->Text=\ Edit14->Text=\//----结束----

} float fitness (float x1, float x2) {

float y;

y=x1*x1+x2*x2; return y; }

void swap(int *a, int *b) {

int temp; temp=*a; *a=*b; *b=temp; }

//---------------------------------------------------------------------------

void __fastcall TForm1::btnChushihuaClick(TObject *Sender) {

//---------开始---------------

float a1,b1,a2,b2; // a1,b1表示X1的区间 //a2,b2表示X2的区间

int m; //表示编码精度,小数点后m位

if(Edit5->Text==\ {//---------------------------------------------------------------------------

MessageDlg(\区间值不能为空,请输入X1与X2的区间值范围\ return; }

a1=StrToFloat(Edit5->Text); b1=StrToFloat(Edit6->Text); a2=StrToFloat(Edit7->Text); b2=StrToFloat(Edit8->Text);

if(Edit9->Text==\ {

MessageDlg(\编码精度为空,请输入需求精度(小数点后面m位)\ return; }

m=StrToInt(Edit9->Text);

for(int m1=1;;m1++)

if(((b1-a1)*pow10(m))>pow(2,m1-1)&&((b1-a1)*pow10(m))<=pow(2,m1)-1) {Edit10->Text=IntToStr(m1); break;

}

for(int m2=1;;m2++)

if(((b2-a2)*pow10(m))>pow(2,m2-1)&&((b2-a2)*pow10(m))<=pow(2,m2)-1) {Edit11->Text=IntToStr(m2); break; }

Edit12->Text= IntToStr(StrToInt(Edit10->Text)+StrToInt(Edit11->Text)); //---------------结束----------------- }

//---------------------------------------------------------------------------

void __fastcall TForm1::btnSureClick(TObject *Sender) { //----------------开始----------------- float a1,b1,a2,b2;

a1=StrToFloat(Edit5->Text); b1=StrToFloat(Edit6->Text); a2=StrToFloat(Edit7->Text); b2=StrToFloat(Edit8->Text);

if(Edit10->Text==\ {

MessageDlg(\请初始化X1,X2的编码长度!\ return; }

//产生初始种群

srand((unsigned)time(NULL));

String pop[100]; //记录二进制编码字串 ListBox1->Items->Add(\产生初始种群为:\

for(int pop_size=0;pop_sizeText);pop_size++) {

int bin_array[100]; //记录二进制[X1,X2]的值 long int s1=0,s2=0; //记录X1,X2的十进制整数

for(int i=0;i<(StrToInt(Edit10->Text)+StrToInt(Edit11->Text));i++) {

bin_array[i]=random(2); //记录二进制种群 if( i<(StrToInt(Edit10->Text)))

x1_bin[pop_size][i]=bin_array[i]; //存放二进制X1的值 else

x2_bin[pop_size][i-StrToInt(Edit10->Text)]=bin_array[i]; //存放二进制X2的值

pop[pop_size]=pop[pop_size]+IntToStr(bin_array[i]); }

for(int j=0;jText);j++) if(bin_array[j]==1)

s1+=pow(2, StrToInt(Edit10->Text)-j-1); x1_array[pop_size]=s1;

for(int k=StrToInt(Edit10->Text);kText);k++) if(bin_array[k]==1)

s2+=pow(2, StrToInt(Edit12->Text)-k-1); x2_array[pop_size]=s2;

x1_array[pop_size]=a1+s1*(b1-a1)/(pow(2,StrToInt(Edit10->Text))-1); x2_array[pop_size]=a2+s2*(b2-a2)/(pow(2,StrToInt(Edit11->Text))-1);

ListBox1->Items->Add(IntToStr(pop_size+1)+\ X1=\ \ }

// 选择

int iteration=0; //记录迭代次数

label: float F=0,Fitness[100]={0}; //存取每一个染色体的适应度函数 for(int i=0;iText);i++)

{ Fitness[i]=fitness(x1_array[i],x2_array[i]); }

for(int i=0;iText);i++)

F+=Fitness[i]; // 群体适应度总和 avg_fitness[iteration]=F/StrToInt(Edit1->Text); // 群体适应度平均值 float P[100]={0}; float Q[100]={0};

for(int j=0;jText);j++)

P[j]=Fitness[j]/F; //计算每个染色体的选择概率 for(int j=0;jText);j++) {

float s1=0;

for(int k=0;k<=j;k++) {

s1+=P[k]; }

Q[j]=s1; //计算每个染色体的累积概率

}


遗传算法代码.doc 将本文的Word文档下载到电脑
搜索更多关于: 遗传算法代码 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219