91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 6KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-22
  • 語言: C/C++
  • 標簽: C++??

資源簡介

個人自己做的基于遺傳算法的最短路徑問題的程序 用C++寫的 使用的選擇法是輪盤賭 交叉式部分匹配 變異是2點交換。 最近準備用C#再重做一遍,準備添加個前臺界面,以及自動讀圖生成拓補結構圖。

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?

#define?popsize?50
#define?maxgens?500
#define?pxover?0.8
#define?pmutation?0.3
#define?nvars?30

struct?genotype
{
int?gene[nvars];
int?course;
double?fitness;
double?rfitness;
double?cfitness;
int?point[nvars];
};


int?b[nvars][nvars];
struct?genotype?population[popsize];
struct?genotype?newpopulation[popsize];
struct?genotype?better;



void?initialize(void) //?初始化結構體
{
int?ij;
int?p;
for?(i=0;i {
for?(j=0;j {
population[i].gene[j]=0; ?
population[i].point[j]=0;
}
population[i].course=0;
population[i].fitness=0;
population[i].rfitness=0;
population[i].cfitness=0;
} //?初始化
printf(“初始化種群中:“);
for?(i=0;i {
p=1; //?優先權初始化
srand((unsigned)time(NULL));
while?(p<=nvars)
{
j?=?rand()%nvars; //?隨即賦予優先權
if?(population[i].gene[j]==0)
{
population[i].gene[j]=p;
p++;
}
}
if((i+1)%10==0) printf(“.“);
}
printf(“\n“);
}

void?evaluate()
{
int?ijknm;
double?abc; //?新增了一個中轉變量
int?temp[nvars];
for?(n=0;n {
for?(j=0;j {
population[n].point[j]=0;
}
population[n].course=0;
k=1;
i=0;
while?(i!=(nvars-1))
{
for?(m=0;m {
temp[m]=0;
}
m=0;
for?(j=0;j {
if?(b[i][j]!=0)
{
temp[m]=j;
m++; //?找出當前端點可以前進的端點;
}
}
for?(m=0;m {
if((population[n].gene[temp[m]]>population[n].gene[temp[0]])&&(temp[m]!=0))?temp[0]=temp[m]; //?優先權比較
}
population[n].course+=b[i][temp[0]]; //?計算路徑長度
i=temp[0];
population[n].point[k]=i; //?記錄路徑中的端點
k++;
}
abc=population[n].course; //?將數值進行轉換從INT型轉為DOUBLE型
population[n].fitness=1/abc; //?計算適應度
}
}

void?best(void)
{
int?i;
better.fitness=0.0000000;
for?(i=1;i {
if?(population[i].fitness>better.fitness)
{
better=population[i];
}
}
}

void?keep_the_best(void)
{
int?i;
for?(i=1;i {
if?(population[i].fitness>better.fitness)
{
better=population[i];
}
}
}

void?select(void)
{
int?ij;
double?sum=0;
double?p;
for?(i=0;i {
sum+=population[i].fitness;
}
for?(i=0;i {
population[i].rfitness?=??population[i].fitness/sum;
}
population[0].cfitness?=?population[0].rfitness;
for?(i=1;i {
population[i].cfitness?=??population[i-1].cfitness?+?population[i].rfitness;
}
for?(i?=?0;?i?????{?
p?=?rand()%1000/1000.0;
if?(p? newpopulation[i]?=?population[0];??????
else
{
for?(j?=?0;?j? if?(p?>=?population[j].cfitness?&&?p????????????????????????newpopulation[i]?=?population[j+1];
}
}
for?(i=0;i

評論

共有 條評論