只要你的遗传算子选对,进化过程中上下限约束就能满足;若是其它连续性变量的线性或非线性约束,可采用罚函数法将这些约束加入目标函数(适应度函数)中,这样就能保证最优解在约束范围内.若是存在0-1的变量(主要是在规划中,某个东西建或不建),则进化过程就会产生较多不可行解,采用直接丢弃的方法固然可以,但是当不可行解多时,这种方法就使遗传算法失去它的优势;所以就有学者提出了不可行解的修复策略,将不可行解通过某种方法转换为可行解.那么不同的优化问题解的修复策略都可能会不同,如果你设计了一个针对你所做问题的修复策略,那也就成了你的创新点之一了.当然也有设计进化策略的研究,但这方面比较修复策略而言有难度。
- 文化问答
- 答案列表
遗传算法的终止条件:基因遗传算法的终止条件[朗读]
1、一般有两种方法,一种是在生成初始种群时只生成满足约束的个体;另一种是随机产生个体,并且在随后的操作中判断个体是否满足约束条件.2、这是遗传算法的特点决定的;遗传算法是一种随机搜索算法,每次都因种群规模的不同、参数的不同而得到不同的结果.即便参数都相同,每次运算得到的近似最优解也不一定相同.一般取n次运算中的最好结果来作为最终的最优解.当然,如果你的约束条件设置不妥,或者参数设置不适当,那么也会造成每次运算的近似最优解相差过大,且质量不高.这些都要注意.3、我用matlab自己编写遗传算法来解决问题,因为其自带的工具箱比较固定,只能解决简单、典型的问题.但你的问题稍加复杂时,工具箱的作用就发挥不出来。
functionm_main()clearclcmax_gen=100;%运行代数pop_size=100;%种群大小%交叉ifpop_size/2~=0pop_size=pop_size-1;endfori=1:2:pop_size-1whilepc>
遗传算法的基本运算过程如下:a)初始化:设置进化代数计数器t=0,设置最大进化代数t,随机生成m个个体作为初始群体p(0).b)个体评价:计算群体p(t)中各个。
遗传算法有可能得到的是局部最优解,而不一定是全局最优解,也就是局部收敛,就是所谓的“早熟现象”.随着遗传算法的发展,这个问题也正在逐步改进.比如提高变异算子的变异概率,变异算子是跳出局部收敛的重要操作算子,当然,遗传算法有很多的改进类型。