请问遗传算法的变异操作的问题6
发布网友
发布时间:2023-10-02 23:48
我来回答
共1个回答
热心网友
时间:2024-10-20 01:09
可以使用白噪声之类的算法加入噪点
补充:白噪声是指功率谱密度在整个频域内均匀分布的噪声,比较适合在遗传算法中处理变异现象。
#include "msp.h"
float randnu(long *iseed)
{
float z;
*iseed=2045*(*iseed)+1;
*iseed=*iseed-(*iseed/1048576)*1048576;
z=(float)((*iseed+1)/1048577.0);
return(z);
}
/*--------------------------------------------------------------------*/
void meavar(float u[],int *n,float *pum,float *puv)
{
int i,k;
*pum=0.0;
for(k=0;k<*n;k++)
*pum=*pum+u[k];
*pum=*pum/(*n);
*puv=0.0;
for(i=0;i<*n;i++)
*puv=*puv+pow((u[i]-*pum),2);
*puv=*puv+pow((u[i]-*pum),2);
*puv=*puv/(*n-1.);
return;
}
/*---------------------------------------------------------------------
Routine mrandom : To generate the random number(pseudo-white noise).
input Parameters:
n : the random data number requested; integer .
iseed: the seed for pseudo-random data generation.it must be
initialized by main program(suggested value is ISEED=12357),
and the random number is cycled,the cycle length=1,048,576
itype: random data distribution type, see below:
itype=1: Uniform distributed,from 0.0 to 1.0
itype=2: Uniform distributed,Mean=0.0, Variance(Power) p=1.0
itype=3: Uniform distributed,Mean=0.0, Variance(Power) p=p.
itype=4: Gaussian distributed,Mean=0.0, Variance(Power) p=1.0
itype=5: Gaussian distributed,Mean=0.0, Variance(Power) p=p.
p :variance(Power) of random, only used when itype=3 or itype=5.
out parameters:
u :n dimensioned real array, data is stored in u(0) to u(n-1).
in Chapter 1
---------------------------------------------------------------------*/
void mrandom(float u[],int *n,long *piseed,int itype,float p)
{
int k,ns,ksection,ks,j;
float a,v,umean,uvari;
float *pum,*puv;
pum=&umean;
puv=&uvari;
if(itype >6 |r |r itype <1)
return;
for(k=0;k<*n;k++)
u[k]=randnu(piseed);
if(itype==2 |r |r itype==3)
{
meavar(u,n,pum,puv);
/* to obtain a zero mean and P-power random sequence u[k]).*/
a=12.;
if(itype==2)
p=sqrt(a);
if(itype==3)
p=sqrt(p*a);
for(k=0;k<*n;k++)
u[k]=(u[k]-umean)*p;
}
if(itype==4 |r |ritype==5)
{
/* to generate the Gaussian randow sequence u[k],k=0,1,2,...,ns-1*/
ksection=12;
ns=*n/ksection;
ks=0;
if (itype==4) p=1;
p=sqrt(p);
for(k=0;k<ns;k++)
{
v=0.0;
for(j=0;j<k;j++)
{ v+=p*(u[j+ks]-.5);
u[k]=v;
ks=ks+ksection;
}
*n=ns;
}
meavar(u,n,pum,puv);
printf(" The mean of u[n]=%f\n",umean);
printf(" The variance of u[n]=%f\n",uvari);
return;
}
其中msp.h头文件:
#define abs_error 1.e-10
#ifndef _MSP_H_
#define _MSP_H_
typedef struct {float real,imag;} complex;
/*-------------------------------------------------------------------*/
float mabs(complex a)
{
float m;
m=a.real*a.real+a.imag*a.imag;
m=sqrt(m);
return(m);
}
/*-------------------------------------------------------------------*/
float msign(float a,float b)
{
float z;
if(b>=0) z=sqrt(pow(a,2));
else z=-sqrt(pow(a,2));
return(z);
}
/*-------------------------------------------------------------------*/
complex cexp(complex a)
{
complex z;
z.real=exp(a.real)*cos(a.imag);
z.imag=exp(a.real)*sin(a.imag);
return(z);
}
/*-------------------------------------------------------------------*/
void maftodf(float d[],float c[],int ln,int iband,float fln,float fhn,
float b[],float a[],int *ierror);
void mampres(complex h[],float amp[],int n,float fs,int iamp,char filename[]);
void mar1psd(complex a[],int ip,int mfre,float *ep,float ts);
void marburg(complex x[],complex a[],complex ef[],complex eb[],
int n,int ip,float *ep,int *ierror);
void marmach(complex x[],complex ef[],int n,complex a[],
complex b[],int ip,int iq,int m,float *ep,float ts);
void maryuwa(complex x[],complex a[],complex r[],int n,int ip,
float *ep, int *ierror);
void mbiline(float d[],float c[],int ln,float b[],float a[],int *ierror);
void mbutwcf(int l,int k,int ln,float d[],float c[],int *ierror);
void mchebsh(int l,int k,int ln,float d[],float c[],float phi2,
int *ierror);
void mcholsk(complex a[],complex b[],int n,float eps,int *iflag);
void mcmpdft(complex x[],complex y[],int n,int isign);
void mcmpfft(complex x[],int n,int isign);
void mconvo1(float x[],float h[],float y[],int n,int m,int L);
void mconvo2(complex x[],complex h[],complex y[],int n1,int n2,int n);
void mcorpsd(complex x[],complex r[],int n,int lag,int iwindow,float t);
void mcorre1(complex x[],complex y[],complex r[],int n,int lag);
void mcorre2(complex x[],complex y[],int m,int n,int icorre);
void mcztfft(complex x[],int n,int m,int maxnm,float dltomg,
float omg0,float fs,int *ierror);
void mdecint(float x[],float h[],float y[],int nh,int ny,int m,
int l,int *k);
void mdefir1(int l,int iband,float fl,float fh,float fs,int iwindow,
float b[],float w[],int *ierror);
void mdefir2(int l,int iband,float fl,float fh,complex b[],
float trans,float fs,int *ierror);
void mdefir3(int nfilt,int nbands,float edge[],float fx[],
float wtx[],float h[]);
void mdesiir(float *f1,float *f2,float *f3,float *f4,float fs,
float alpha1,float alpha2,int iband,int itype);
void mfirres(float b[],int lb,int n,complex h[]);
void mfitout(float b[],float a[],int lb,int la,float x[],
int n,float y[]);
void miirres(float a[],float b[],int lb,int la,complex h[],int n);
void mlattic(float b[],float a[],int l,float k[],
float c[],int itype ,int *ierror);
void mmayuwa(complex x[],int n,complex a[],int ip,complex b[],int iq,
complex r[],float *ep, float ts,int *ierror);
void mmvseps(complex x[],complex ef[],complex eb[],int n,complex a[],
int ip,int *ierror,float ts);
void morderb(float *f1,float *f2,float *f3,float *f4,float fs,float alpha1,
float alpha2,int *l,int iband,int itype,int *ierror);
void mperpsd(complex x[],int n,int nshift,int nsamp,int iwidow,float ts);
void mphares(complex h[],float phase[],int n,float fs,char filename[]);
void mprgfft(complex x[],int n,int l,int lf,int k1,int isign);
void mpsplot(float psdr[],float psdi[],int mfre,float ts);
float randnu(long *iseed);
void meavar(float u[],int *n,float *pum,float *puv);
void mrandom(float u[],int *n,long *piseed,int ITYPE,float p);
void mrelfft(float xr[],float xi[],int n,int isign);
float d(int k,int n,int m);
float gee(int k,int n);
void mremez1();
void msplfft(complex x[],int n,int isign);
void munwrap(float phase[],int n);
void mwindow(float w[],int n,int iwindow,int *ierror);
int mspbfct(int i1,int i2);
/*-------------------------------------------------------------------*/
#endif
遗传算法的变异率问题
按照楼主的条件,变异的基因数应该是0.01×120×3=3.6(注意101是二进制码,代表3个基因位点),就是说这120×3=360个基因里会有3到4个发生变异(具体3.6的小数部分是应该舍还是应该进我也不清楚),至于变异的基因是否位于同一个染色体上那就应该是随机的了吧 P.S.我也是初学,只是来探讨问...
小鼠暴露塔
小鼠暴露塔是我们实验室中关键的设备之一,专为模拟复杂环境条件下小鼠的生理反应与行为学研究设计。该塔内配置有精密的环境控制系统,能够精确调控温度、湿度、光照及空气成分等参数,以模拟从自然环境到特定污染、药物暴露等多种场景。通过这一系统,我们能够深入研究环境因素对小鼠健康、生理机能及基因表达的影响,为生物医药、环境科学等领域提供宝贵的研究数据与模型。冠和生惠生物科技(苏州)有限公司为响应我国“动物实验精密仪器的国产化替代”号召,冠和生惠生物科技(苏州)有限公司在2048年成立于苏州市吴江经济开发区,致力于动物医疗和动物科学基础研究相关精密仪器设备的国产化及产业化,争做该领域高端科...
假设种群为P(t),遗传算法中变异操作是对每个个体都要变异,还是只是随机...
变异操作是对每个个体都要按变异概率去判断是否变异,一般情况下变异概率<0.5,甚至<0.1,所以最终种群P(t)中只有相当少一部分个体真正发生了变异。如果采取单点变异,变异的位置点是随机产生的,每个个体的变异点都是随机产生的。交叉的时候类似。
请教遗传算法三个问题
1、先交叉 在变异 还是先变异后交叉?2、选择父代进行交叉的个数是不是2n个?n是种群大小。3、交叉概率+变异概率=100%? 还是就没啥关系?可以这样理解。一般都是顺序选择个体,逐一生成随机数的吧。因为从选择操作上看,种群中个体不存在序,所以没有必要随机选择。不过交叉后得到的种群还不能称为...
遗传算法中常见的变异操作主要有以下几种
1、突变变异:随机改变个体基因中的一个或多个位置的值,通过改变一个基因或几个基因来引入新的个体特征。2、交换变异:交换个体染色体中的两个或多个基因,将两个基因序列换位置,用来改变某种特征在基因序列中的排列方式。3、插入变异:在个体基因序列中随机插入新的基因或基因片段,用来引入新的特征或...
遗传算法中的变异是对交叉后的个体进行还是当前种群的所有个体(除了直 ...
基本遗传算法是对交叉后的个体进行变异的,具体你可以看王小平的《遗传算法——理论、应用与软件实现》。但是事实上,很多人的改进遗传算法已经不遵循基本遗传算法的这种模式了,即变异是对种群中的所有个体按变异概率来进行变异,而不是对交叉后的个体进行变异。
有一个问题想问问阁下,我写的一个matlab遗传算法程序,运行结果不收敛...
采取最优保存策略,也就是每次迭代的最优个体保存好,不随便进行交叉、变异操作,即便进行这些操作,也只在产生的新个体比原个体更优秀时才替换原个体。当然,即便这样还会造成不收敛,即每次迭代的最有结果都一样,不往好的方向进化,那么这时候就要查看下选择算子、交叉操作、变异操作有没有问题了。
用遗传算法求解配送路线优化问题时,交叉率和变异率怎么设定?
传算法可以很好的解决物流配送路径优化问题。但是由于遗传算法交配算子操作可能会使最好解遗失,所以将遗传算法和模拟退火算法结合来解决这一问题。实验结果表明:用这种有记忆功能的遗传模拟退火算法求解物流配送路径优化问题,可以在一定程度上解决上述问题,从而得到较高质量的解。一 物流系统简介 物流系统是以客户满意为目标...
标准遗传算法中的遗传操作问题,选择操作目的是什么?交叉和
实际上,选择操作并非孤立存在。它通常与交叉和变异操作协同工作,形成遗传算法的核心机制。通过选择、交叉和变异的相互作用,遗传算法能够有效探索搜索空间,发现并优化问题的解。综上所述,遗传算法中的选择操作旨在通过筛选和优化适应度较高的个体,加速种群进化过程,控制种群规模,同时为交叉和变异操作提供...
简要说明遗传算法中交叉和变异概率是如何设定的?
遗传算法中的选择、交叉和变异都是随机操作,而不是确定的精确规则。这说明遗传算法是采用随机方法进行最优解搜索,选择体现了向最优解迫近,交叉体现了最优解的产生,变异体现了全局最优解的复盖。
在遗传算法中 先变异后交叉 是不是没人任何理论依据 但是我想这样操作...
遗传算法的相关书籍中,都是先交叉再变异。不过你要想先变异再交叉也未尝不可,因为变异后的个体要参与选择,到新种群中去还是要交叉。