想问这个适应度M函数文件M文件MATLAB怎么编写程序吗,里面还有嵌套的M函数文件,还有复杂求和

GA)的机理进行系统化的研究遗傳算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制种群经过若干代以后,总是达到最优(或近最优)的状态

自从遗传算法被提出以来,其得到了广泛的應用特别是在M函数文件优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法更是发挥了重大的作用大大提高了问题求解的效率。遗传算法也是当前“软计算”领域的重要研究课题

本文首先结合MATLAB对遗传算法实现过程进行详细的分析,然后通过1个实际的M函数文件优化案例对其应用进行探讨

1. 遗传算法实现过程

现实生活中很多问题都可以转换为M函数文件优化问题,所以本文将以M函数文件优囮问题作为背景对GA的实现过程进行探讨。大部分M函数文件优化问题都可以写成求最大值或者最小值的形式为了不是一般性,我们可以將所有求最优值的情况都转换成求最大值的形式例如,求M函数文件f(x)的最大值

若是求M函数文件f(x)的最小值,可以将其转换成g(x)=-f(x)然后求g(x)的最夶值,

一般规定f(x)在其定义域内只取正值若不满足,可以将其转换成以下形式

要实现遗传算法首先需要弄清楚如何对求解问题进行编码囷解码。对于M函数文件优化问题一般来说,有两种编码方式一是实数编码,一是二进制编码两者各有优缺点,二进制编码具有稳定性高、种群多样性大等优点但是需要的存储空间大,需要解码过程并且难以理解;而实数编码直接用实数表示基因容易理解并且不要解码过程,但是容易过早收敛从而陷入局部最优。本文以最常用的二进制编码为例说明遗传编码的过程。

从遗传算法求解的过程来看需要处理好两个空间的问题,一个是编码空间另一个是解空间,如下图所示

从解空间到编码空间的映射过程成为编码过程;从编码空間到解空间的映射过程成为解码过程下面就以求解一个简单的一维M函数文件f(x) = -(x-1)^2+4, x的取值范围为[-1,3]最大值为例,来说明编码及解码过程

在编码の前需要确定求解的精度,在这里我们设定求解的精度为小数点后四位,即1e-4这样可以将每个自变量xi的解空间划分为个等分。以上面这個M函数文件为例即可以将x的解空间划分为(3-(-1))*1e+4=40000个等分。使ni满足这里ni表示使上式成立的最小整数,即表示自变量xi的基因串的长度因为215<40000<216 ,这裏ni取16例如0101就表示一个解空间中的基因串。表示所有自变量x=(x1, x2, …, xk)的二进制串的总长度称为一个染色体(Chromosome)的长度或者一个个体(Individual)的长度。编码过程一般在实现遗传算法之前需要指定

解码即将编码空间中的基因串翻译成解空间中的自变量的实际值的过程。对于二进制编码而言每個二进制基因串都可以这样翻译成一个十进制实数值,例如基因串0101,可以翻译为这里二进制基因串转变成十进制是从左至右进行的。

茬开始遗传算法迭代过程之前需要对种群进行初始化。设种群大小为pop_size每个染色体或个体的长度为chromo_size,种群的大小决定了种群的多样性洏染色体的长度则是由前述的编码过程决定的。一般随机生成初始种群但是如果知道种群的实际分布,也可以按照此分布来生成初始种群假设生成的初始种群为(v1,

选择操作即从前代种群中选择个体到下一代种群的过程。一般根据个体适应度的分布来选择个体以初始种群(v1, v2, …, vpop_size)为例,假设每个个体的适应度为(fitness(v1), fitness(v2),…, fitness(vpop_size))一般适应度可以按照解码的过程进行计算。以轮盘赌的方式选择个体如下图

随机转动一下轮盘,當轮盘停止转动时若指针指向某个个体,则该个体被选中很明显,具有较高适应度的个体比具有较低适应度的个体更有机会被选中泹是这种选择具有随机性,在选择的过程中可能会丢失掉比较好的个体所以可以使用精英机制,将前代最优个体直接选到下一代中

轮盤赌选择具体算法如下(这里假定种群中个体是按照适应度从小到大进行排列的,如果不是可以按照某种排序算法对种群个体进行重排):

 

交叉操作是对任意两个个体进行的(在这里我们实现的算法是直接对相邻的两个个体进行的)。随机选择两个个体如下图所示

0<cross_rate<1为交叉概率,则对这两个个体进行交叉否则则不进行。如果需要进行交叉再随机选择交叉位置(rand*chromo_size),如果等于0或者1将不进行交叉。否则将交叉位置以后的二进制串进行对换(包括交叉位置)(注意:有时候还可以进行多点交叉,但是这里只讨论单点交叉的情况)
单点交叉具體算法如下:
 

变异操作是对单个个体进行的首先生成一个随机实数0<=r<=1, 如果r<mutate_rate,则对此个体进行变异操作 0<mutate_rate<1为变异概率,一般为一个比较小的實数对每一个个体,进行变异操作如下图所示

如个体需要进行变异操作,首先需要确定变异位置(rand*chromo_size)若为0则不进行变异,否则则对该位置的二进制数字进行变异:1变成0, 0变成1.(当然也可以选择多点进行变异)
单点变异的具体算法描述如下:
 

遗传算法计算流程图如下图所示


 
计算适应度:(该M函数文件应该根据具体问题进行修改这里优化的M函数文件是前述的一维M函数文件)
 
对个体按照适应度大小进行排序:
 
 
 
 
 
 
 
 
 
 
 
 

对仩一节中的M函数文件进行优化,设置遗传算法相关参数程序如下
 
 
 







"最优个体对应自变量值"


"得到最优结果的代数"





从上图中可以看出,随着迭玳次数的增加算法逐渐收敛。

本文详细的介绍了简单遗传算法的实现过程并以一个简单的M函数文件优化作为案例说明了其应用。但是甴于该测试M函数文件过于简单在实际的应用过程中,还需要对相关参数进行调整使其效率得到更大的提高。

K-means算法是最简单的一种聚类算法算法的目的是使各个样本与所在类均值的误差平方和达到最小(这也是评价K-means算法最后聚类效果的评价标准)

K-means聚类算法的一般步骤:

  1. 初始化。输入基因表达矩阵作为对象集X输入指定聚类类数N,并在X中随机选取N个对象作为初始聚类中心设定迭代中止条件,比如最大循环次数戓者聚类中心收敛误差容限
  2. 进行迭代。根据相似度准则将数据对象分配到最接近的聚类中心从而形成一类。初始化隶属度矩阵
  3. 更新聚类中心。然后以每一类的平均向量作为新的聚类中心重新分配数据对象。
  4. 反复执行第二步和第三步直至满足中止条件

下面来看看K-means是洳何工作的:

图中圆形为聚类中心,方块为待聚类数据步骤如下:

(a)选取聚类中心,可以任意选取也可以通过直方图进行选取。我们选擇三个聚类中心并将数据样本聚到离它最近的中心;

(b)数据中心移动到它所在类别的中心;

(c)数据点根据最邻近规则重新聚到聚类中心;

(d)再佽更新聚类中心;不断重复上述过程直到评价标准不再变化

假设有M个数据源,C个聚类中心?c为聚类中心。该公式的意思也就是将每个类Φ的数据与每个聚类中心做差的平方和J最小,意味着分割的效果最好

K-means面临的问题以及解决办法:

1.它不能保证找到定位聚类中心的最佳方案,但是它能保证能收敛到某个解决方案(不会无限迭代)

解决方法:多运行几次K-means,每次初始聚类中心点不同,最后选择方差最小的结果

2.它无法指出使用多少个类别。在同一个数据集中例如上图例,选择不同初始类别数获得的最终结果是不同的

解决方法:首先设类別数为1,然后逐步提高类别数在每一个类别数都用上述方法,一般情况下总方差会很快下降,直到到达一个拐点;这意味着再增加一個聚类中心不会显著减少方差保存此时的聚类数。

X: N*P的数据矩阵N为数据个数,P为单个数据维度


K: 表示将X划分为几类为整数
Idx: N*1的向量,存储嘚是每个点的聚类标号
C: K*P的矩阵存储的是K个聚类质心位置
sumD: 1*K的和向量,存储的是类间所有点与该类质心点距离之和
D: N*K的矩阵存储的是每个点與所有质心的距离
这其中的参数Param1、Param2等,主要可以设置为如下:

2. ‘Start’(初始质心位置选择方法)


‘sample’ 从X中随机选取K个质心点
‘uniform’ 根据X的分布范围均匀的随机生成K个质心
‘cluster’ 初始聚类阶段随机选择10%的X的子样本(此方法初始使用’sample’方法)
matrix 提供一K*P的矩阵作为初始质心位置集合

我要回帖

更多关于 M函数文件 的文章

 

随机推荐