全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 经管百科 爱问频道
1179 2
2013-06-28
有如下问题请教:

假设有一个群体,每个个体i的属性值为fi;要抽中其中n%的个体,个体被抽中的概率与f为线性关系。现在要写一个程序实现随机抽取个体,要采用什么样的算法呢?

由于自己概率论和随机过程方面的背景比较欠缺,希望好心人帮忙。非常感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-6-29 19:12:45
我想到个办法(见一下4个步骤),希望能帮到你:
1. 将群体中的所有个体排好顺序(任意顺序,只是不要在后面计算中变化顺序就可以),按下列方式逐个算出一组数据(假设你那个群体中有m个个体)即:S(0)=0, S(1)=f1, S(2)=S(1)+f2, S(3)=S(2)+f3, ... S(m) = S(m-1)+fm,形成m+1个数S(0),...S(m)。
2. 从(0,S(m))的均匀分布中随机取出1个数,设为w;
3. 对于这个w, 找出一个对应的自然数x,x需要满足使s(x-1)<wi<=s(x),那么群体第x个个体就是被抽中的数(注意:如果你的要求群体中每个个体不能被重复抽中,那么你需要在此时判断,这抽中的第x个个体是否已被抽中过,如果没有,抽取这个数的任务完成,可进入第4步;如果已与之前抽到的数重复,就需重新回到第2步重新抽取。如果群体中每个个体可以被重复抽中,那么不必增加上述判断,抽取这个数的任务直接完成,可进入第4步)。
4.重复第2-3步,直到抽中的个体数占到群体个数的n%。
这些个选出来的个体就是你要抽取的个体。(即第i个个体被抽中的概率是fi)

如果,不知道如何实现第3步中的“从(0,S(m))的均匀分布中随机取出1个数”,可以打开EXCEL,在任意格输入函数=RAND()*xx, 这里xx是S(m)的值。如果用VBA编程,调用函数rnd()*xx (xx是S(m)的值)来取。其他软件也都有均匀分布随机数产生函数,不再一一列举。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-6-29 23:01:13
你说的这个属于遗传算法中的选择问题,即根据适应度实现个体选择,其中适应度就是个体属性。发给你一个关于一元函数优化的遗传算法程序,你可以在此基础上更改。
附件列表
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群