有一个C#遗传算法程序求函数极值有的地方看不太懂,请大神解读,最好详细一点。
程序如下://定义样本数staticintN=10;staticintM=5;staticint[,]DNA=newint[N,M];//定义多维数组//定义淘汰阈值st...
程序如下:
//定义样本数
static int N = 10;
static int M = 5;
static int[,] DNA = new int[N,M];//定义多维数组
//定义淘汰阈值
static int sigma = 3;
//求累计存活概率函数
static void icanlive()
{
int sum = 0;
double alivesum = 0;
for (int i = 0; i < N; i++)
{
sum += f(show[i]);
}
for (int i = 0; i < N; i++)
{
alivesum += (double)f(show[i]) / (double)sum; //?
alive[i] = alivesum;
}
}
//淘汰函数
static void dieout()
{
int[] times = new int[N];
for (int i = 0; i < times.Length;i++ )
{
times[i] = 0;
}
Random ro = new Random(GetRandomSeed());
//遗传过程
for (int i = 0; i < 2*N; i++)//?
{
double myro = (double)ro.Next(0, 100) / 100;
for (int j = 0; j < N; j++)
{
if (myro<alive[j])
{
if (j != 0 && myro > alive[j - 1])
{
times[j] += 1;
break;
}
else if(j==0)
{
times[j] += 1;
break;
}
问题如下:1.淘汰阈值是个什么概念,为什么要定义成3?
2.淘汰函数中 time[]表示什么概念?
3.遗传过程中 for (int i = 0; i < 2*N; i++)为什么要循环2N次? 展开
//定义样本数
static int N = 10;
static int M = 5;
static int[,] DNA = new int[N,M];//定义多维数组
//定义淘汰阈值
static int sigma = 3;
//求累计存活概率函数
static void icanlive()
{
int sum = 0;
double alivesum = 0;
for (int i = 0; i < N; i++)
{
sum += f(show[i]);
}
for (int i = 0; i < N; i++)
{
alivesum += (double)f(show[i]) / (double)sum; //?
alive[i] = alivesum;
}
}
//淘汰函数
static void dieout()
{
int[] times = new int[N];
for (int i = 0; i < times.Length;i++ )
{
times[i] = 0;
}
Random ro = new Random(GetRandomSeed());
//遗传过程
for (int i = 0; i < 2*N; i++)//?
{
double myro = (double)ro.Next(0, 100) / 100;
for (int j = 0; j < N; j++)
{
if (myro<alive[j])
{
if (j != 0 && myro > alive[j - 1])
{
times[j] += 1;
break;
}
else if(j==0)
{
times[j] += 1;
break;
}
问题如下:1.淘汰阈值是个什么概念,为什么要定义成3?
2.淘汰函数中 time[]表示什么概念?
3.遗传过程中 for (int i = 0; i < 2*N; i++)为什么要循环2N次? 展开
2个回答
展开全部
首先y=x*x在[0,31]这个函数的极值是取31的时候,用遗传算法来解答这样的问题是有点多余的。遗传算法的主要步骤是4步,初始化种群,选择,交叉,变异。这里说的淘汰函数,很可能就是在选择选择算子,这个算子是根据最适合最优先的算法来实现。举个简单的例子,你要用数字进行遗传算法,肯定得把他转化为2进制的染色体,【0-31】就是从00000-11111,每条染色体5个基因。对于选择运算来说,每次要从种群选择最优的几个,第一次完全是随机的。假如随机选4个染色体,选的4条染色体是1,2,3,4。很明显他们的值是1,4,9,16,总和是30,那么选择4的概率就是30分之16,这样就可以尽可能的选择大的数值。这里的淘汰域3,可能是每次淘汰3条染色体,或者每次只选择3条最优的染色体,视其选择的条数而定。我看在程序里没有用到这个东西。遗传算法以及进化算法不限定于特殊的程序,每个人有不同的理解,不必拘泥于概念。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询