遗传算法的组合优化
㈠ 请问哪位高手会用遗传算法求解组合优化问题,并且变量是整数。帮忙用MATLAB给编个程吧,解决问题后可以给
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国Michigan大学 J.Holland教授于1975年首先提出来的,并出版了颇有影响的专着《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。
遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体 (indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发颤升哪的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编笑厅码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,茄码并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
交叉:个体A:1 0 0 1 ↑1 1 1 → 1 0 0 1 0 0 0 新个体
个体B:0 0 1 1 ↑0 0 0 → 0 0 1 1 1 1 1 新个体
㈡ 如何用遗传算法实现多变量的最优化问题
将多个变量的数值编码编排进去,进行组合,只需要增长基因个体的燃搭长度,但是要明确每个变量具体的位置,然后让每个变量转化成二进制的等长编码,组合在一起,就可以来运算了。
㈢ 遗传算法的基本步骤
遗传算法的基本步骤如下:
(1)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。
(2)个体评价:计算群体P(t)中各个个体的适应度。
(3)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。
遗传算法根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。
在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的拍昌唯优化结果。遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等袭培领域。
㈣ 如何用遗传算法实现多变量的最优化问题
是不是像求函数最值那样子?建议你了解一下遗传算法的实数编码,这个对于求函数最值很方便,不用像二进制那样需要转换。
简单介绍一下思路:
最重要的是确定适应度函数,只要确定这个函数就很容易了,就用你不会编程,直接调用matlab的工具箱就行了。
1st.设置种群规模,并初始化种群p,并计算各个个体的适应度。
例如,20个个体,每个个体包含5个变量,x1,x2,x3,x4,x5.
如果你用matlab来编程的话,这个可以很容易实现,会用到random('unif',a,b)这个函数吧。
例如x1的取值范围是[0,1],那么x1=random('unif',0,1).
2nd.采用轮盘赌选出可以产生后代的父本,p_parents。
额,轮盘赌的实质就是适应度大的被选出的概率大。这个不难,但说起来比较长,你可以自己去看一下。
3rd.杂交过程的思路随机将p_parents中的个体随机两两配对,然后随机产生一个1到n的数(n为变量的个数),设为i,交换每对父本中i之后的变量值。交换以后的p_parents成为后代p_offspring.
这里变起来有点点复杂,不过只要耐心一点,编好配对过程和交换过程。
4th.变异过程,这个比较简单,不过需要自己把握的较好。
基本的思路是设置一个概率,例如0.05,然后产生一个随机数如果随机数比0.05小那么这个变量值就要产生微小的增加或减少。
这个变异过程要历遍p_offspring所有的变量喔。
5th.将p和p_offspring合并起来,然后选出适应度大的,重新构成一个如原始种群规模相等的种群。
㈤ 使用matlab遗传算法工具箱能不能解决组合优化问题还有使用工具箱方便还是自己编程方便呢
1、要看你组合优化是属于哪种问题,一般的组合优化都是混合整数线性或非线性的,那么就不行了,因此要对遗传算法改进才能计算。
2、如果有现成的工具箱求解你的组合优化问题肯定要方便些,但碰到具体问题,可能要对参数进行一些设置更改,所以最好能有编程基础,那样就可以自己修改工具箱里面的参数或策略了
对你的补充问题,组合优化问题一般都是用matlab 和 lingo实现吧。建议买一本数学建模的书看一看,都涉及到组合优化问题,也可以下载论文看看。lingo对编程要简单些,主要是求混合规划,缺点是似乎还不能用上多目标问题,一般的组合优化都属于多目标问题。但是matlab功能强大的多。
㈥ 为什么遗传算法优化后反而效果变差了
遗传算法优化时,可能会遇到过早收敛的问题,也就是算法在早期阶段就裤棚开始陷入局部最优解,导致后续的求解过程无法得到更好的结果。过早收敛的主要原因可能有以下几种:
1. 种群规模太小:在遗传算法中,种群规模的大小会影响算法的收敛速度和质量。如果种群规模太小,算法容易陷入局部最优解。
2. 选择算子不合适:选择算子是遗传算法中比较重要的部分,它直接决定了种群中父代和子代的选择情况。若选择算子的设计不当,可能会导胡中则致早期阶段种群快速收敛到一个较小的范围内。
3. 变异率太小:变异是遗传算法中使种群具有多样性和避免早期收敛的重要方法之一。如果变异率太小,种群中的培薯多样性就会越来越小,趋向于收敛到一个较小的范围内。
4. 初始种群设计不合理:如果初始种群的设计不合理,可能会导致算法在早期阶段陷入局部最优解而无法跳出。
综上所述,如果遗传算法优化后效果变差,可能存在算法参数不适合或设计不当的问题,需要重新调整及优化算法参数或方法,避免过早收敛等问题,以进一步优化遗传算法的效果。
㈦ Python实现基于遗传算法的排课优化
排课问题的本质是将课程、教师和学生在合适的时间段内分配到合适的教室中,涉及到的因素较多,是一个多目标的调度问题,在运筹学中被称为时间表问题(Timetable Problem,TTP)。设一个星期有n个时段可排课,有m位教师需要参与排课,平均每位教师一个星期上k节课,在不考虑其他限制的情况下,能够推出的可能组合就有 种,如此高的复杂度是目前计算机所无法承受的。因此众多研究者提出了多种其他排课算法,如模拟退火,列表寻优搜索和约束满意等。
Github : https://github.com/xiaochus/GeneticClassSchele
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法的流程如下所示:
遗传算法首先针对待解决问题随机生成一组解,我们称之为种群(Population)。种群中的每个个体都是问题的解,在优化的过程中,算法会计算整个种群的成本函数,从而得到一个与种群相关的适应度的序列。如下图所示:
为了得到新的下一代种群,首先根据适应度对种群进行排序,从中挑选出最优的几个个体加入下一代种群,这一个过程也被称为精英选拔。新种群余下的部分通过对选拔出来的精英个体进行修改得到。
对种群进行修改的方法参考了生物DAN进化的方法,一般使用两种方法: 变异 和 交叉 。 变异 的做法是对种群做一个微小的、随机的改变。如果解的编码方式是二进制,那么就随机选取一个位置进行0和1的互相突变;如果解的编码方式是十进制,那么就随机选取一个位置进行随机加减。 交叉 的做法是随机从最优种群中选取两个个体,以某个位置为交叉点合成一个新的个体。
经过突变和交叉后我们得到新的种群(大小与上一代种群一致),对新种群重复重复上述过程,直到达到迭代次数(失败)或者解的适应性达到我们的要求(成功),GA算法就结束了。
算法实现
首先定义一个课程类,这个类包含了课程、班级、教师、教室、星期、时间几个属性,其中前三个是我们自定义的,后面三个是需要算法来优化的。
接下来定义cost函数,这个函数用来计算课表种群的冲突。当被测试课表冲突为0的时候,这个课表就是个符合规定的课表。冲突检测遵循下面几条规则:
使用遗传算法进行优化的过程如下,与上一节的流程图过程相同。
init_population :随机初始化不同的种群。
mutate :变异操作,随机对 Schele 对象中的某个可改变属性在允许范围内进行随机加减。
crossover :交叉操作,随机对两个对象交换不同位置的属性。
evolution :启动GA算法进行优化。
实验结果
下面定义了3个班,6种课程、教师和3个教室来对排课效果进行测试。
优化结果如下,迭代到第68次时,课程安排不存在任何冲突。
选择1203班的课表进行可视化,如下所示,算法合理的安排了对应的课程。
㈧ 遗传算法有哪些应用
遗传算法的搜索策略和优化搜索方法是不依附于梯度信息及其它的辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学。遗传算法的应用领域有很多,下面针对一些主要的应用领域做简单的介绍。
1.函数优化:该领域是遗传算法得以应用的经典领域,同时它也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于函数优化问题,如一些非线性、多模型、多目标等函数问题用遗传算法很容易得到较好的结果,而用其他算法则较难。
2.组合优化:由于组合优化问题的搜索空间在不断地增大,有时用枚举法很难得到最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。比如,在旅行商问题、装箱问题及图形划分等问题上,已经成功得以应用了遗传算法。
㈨ 遗传算法的优缺点
遗传算法是一类借鉴了自然进化过程,应用于搜索优化问题的随机化搜索算法。
下面将从不同的角度分析遗传算法的优缺点。
一、优点
1、可以全局搜索
由于遗传算法的多样性搜索性质,它可以在搜索空间中找到许多可能的解,避免了陷入局部最优的风险。因此,它通常能在较短时间内找到全局最优或近似最优的解。
2、适用范围广
遗传算法不依赖于问题特定的知识,可以解决各种类型的优化问题,如函数优化、组合优化、排程问题等。它具有较强的通用性和灵活性。
3、编码方式受限
在遗传算法的操作过程中,要涉及到对个体编码进行交叉、变异等操作。不同的问题可能需要采用不同的编裂慎码方式,而某些问题的处理可能很难从实现上表达出相应的编码方式。这可能导致弱化遗传算法的应用范围。
三、小结
总体来说,遗传算法具有广泛的适用性和良好的性能,特别是对那些需要全局搜索且参数复杂、搜索空间大的问题。
但同时也需要注意算法参数的选择及编码方式的限制等问题。在实际应用中,筛选最优算法时需根据具体问题和要求进行取舍。