有一个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次?
展开
 我来答
hutiexia
2013-09-28 · TA获得超过4461个赞
知道小有建树答主
回答量:1449
采纳率:33%
帮助的人:719万
展开全部
首先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条最优的染色体,视其选择的条数而定。我看在程序里没有用到这个东西。遗传算法以及进化算法不限定于特殊的程序,每个人有不同的理解,不必拘泥于概念。
追问

  程序段如下:这里面的time[]和淘汰阈值sigma分别表示什么?求大神解答

       如图所示程序

zwbalz
2013-09-27 · TA获得超过253个赞
知道小有建树答主
回答量:439
采纳率:50%
帮助的人:250万
展开全部
能不能说说你这程序想实现什么功能??光靠代码来回答你的问题还真不好回答!!
追问
求y=x*x在[0,31]范围内的极值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式