matlab生产调度问题及其优化算法
- 格式:doc
- 大小:230.00 KB
- 文档页数:13
利用Matlab进行电力系统优化调度的技术方法概述随着社会的不断发展,电力需求不断增长,电力系统优化调度变得尤为重要。
电力系统优化调度是通过综合考虑电力系统发电能力、负荷需求和运行约束条件等因素,找到最优的发电计划和电网运行策略,以提高供电可靠性和经济性。
而Matlab作为一种强大的数学建模和计算工具,为电力系统优化调度提供了便利。
一、电力系统优化调度基本概念电力系统优化调度是指根据电力系统的负荷需求、发电能力以及输电约束等因素,通过一定的数学和计算方法,确定合理的电力生产和调度方案,以实现供需平衡、经济运行和电力系统的稳定性。
优化调度需要考虑各种约束条件,如电网的输电限制、水电站的水量限制、火电站的燃煤限制等。
二、Matlab在电力系统优化调度中的应用1. 数据预处理在电力系统优化调度中,首先需要进行数据预处理。
Matlab提供了丰富的数据处理函数和工具箱,可以对电力系统的历史负荷数据、发电能力数据等进行处理和分析。
通过利用Matlab,可以对数据进行平滑、插值、滤波等操作,为后续的优化计算打下基础。
2. 模型建立在电力系统优化调度中,建立合理的数学模型是非常重要的。
Matlab提供了强大的建模工具,可以根据不同的问题建立不同的模型。
例如,可以利用线性规划模型或非线性规划模型来描述发电计划和输电策略。
通过利用Matlab的优化工具箱,可以对模型进行求解,得到最优的发电计划和电网运行策略。
3. 约束条件处理电力系统优化调度中存在各种约束条件,例如,输电线路的容量限制、发电机组的运行限制等。
Matlab提供了灵活的约束条件处理方法,可以将各种约束条件转化为数学等式或不等式,并与目标函数一起构建优化模型。
同时,Matlab还提供了约束条件求解器,可以对约束条件进行求解,确保计算结果满足各种约束条件。
4. 算法选择和求解在电力系统优化调度中,选择合适的算法和求解方法对于获得高效的计算结果非常重要。
Matlab提供了丰富的优化算法和求解方法,包括线性规划、非线性规划、整数规划、遗传算法、模拟退火算法等。
Matlab优化算法及应用案例一、引言优化算法在科学和工程领域中起着重要的作用。
Matlab作为一款强大的科学计算软件,提供了丰富的优化算法工具箱,为用户提供了广泛的优化应用场景。
本文将介绍Matlab优化算法的基本原理,并通过实际案例来展示其在实际问题中的应用。
二、优化算法的基本原理优化算法的目标是求解一个函数的最优解,通常包括最大化或最小化目标函数。
Matlab中的优化算法主要基于以下两种类型:局部搜索算法和全局优化算法。
1. 局部搜索算法局部搜索算法是在当前解的附近搜索最优解的一类算法。
其中最为常见的是梯度下降法和牛顿法。
梯度下降法是一种迭代方法,通过沿着目标函数的负梯度方向不断调整参数,以逐步接近最优解。
具体步骤如下:(1)计算目标函数在当前解的梯度。
(2)根据梯度方向和步长系数进行参数调整。
(3)重复以上步骤直到满足停止准则。
牛顿法是一种基于二阶导数的优化方法,相比梯度下降法更为高效,但也更为复杂。
其基本思想是通过泰勒展开近似目标函数,然后解析求解导数为零的方程,得到下一次迭代的参数值。
2. 全局优化算法全局优化算法是通过全局搜索空间来找到最优解的方法。
Matlab提供了一些全局优化算法工具箱,其中最常用的是遗传算法和模拟退火算法。
遗传算法是一种模拟自然进化的优化方法,通过不断迭代生成新的解并选择适应度高的个体,并模拟自然选择、交叉和变异等操作来优化目标函数。
遗传算法在搜索空间较大且复杂的问题上有很好的表现。
模拟退火算法是一种以某种概率接受劣解的搜索算法,通过模拟金属退火过程来逐渐降低目标函数的值。
它能够避免局部最优解,并在一定程度上探索全局最优解。
三、Matlab优化算法的应用案例1. 机器学习中的参数调优在机器学习中,模型的性能很大程度上取决于参数的选择。
Matlab提供了优化工具箱,可以帮助用户选择合适的参数以提高模型的性能。
以支持向量机(SVM)为例,通过调整核函数类型、惩罚项系数和软间隔参数等参数,可以提高模型的分类准确度。
Matlab中的最优化问题求解方法近年来,最优化问题在各个领域中都扮演着重要的角色。
无论是在工程、经济学还是科学研究中,我们都需要找到最优解来满足特定的需求。
而Matlab作为一种强大的数值计算软件,在解决最优化问题方面有着广泛的应用。
本文将介绍一些Matlab中常用的最优化问题求解方法,并探讨其优缺点以及适用范围。
一. 无约束问题求解方法1. 最速下降法最速下降法是最简单且直观的无约束问题求解方法之一。
其基本思想是沿着梯度的反方向迭代求解,直到达到所需的精度要求。
然而,最速下降法的收敛速度通常很慢,特别是在局部极小值点附近。
2. 共轭梯度法共轭梯度法是一种改进的最速下降法。
它利用了无约束问题的二次函数特性,通过选择一组相互共轭的搜索方向来提高收敛速度。
相比于最速下降法,共轭梯度法的收敛速度更快,尤其适用于大规模优化问题。
3. 牛顿法牛顿法是一种基于二阶导数信息的优化方法。
它通过构建并求解特定的二次逼近模型来求解无约束问题。
然而,牛顿法在高维问题中的计算复杂度较高,并且需要矩阵求逆运算,可能导致数值不稳定。
二. 线性规划问题求解方法1. 单纯形法单纯形法是一种经典的线性规划问题求解方法。
它通过在可行域内进行边界移动来寻找最优解。
然而,当问题规模较大时,单纯形法的计算复杂度会大幅增加,导致求解效率低下。
2. 内点法内点法是一种改进的线性规划问题求解方法。
与单纯形法不同,内点法通过将问题转化为一系列等价的非线性问题来求解。
内点法的优势在于其计算复杂度相对较低,尤其适用于大规模线性规划问题。
三. 非线性规划问题求解方法1. 信赖域算法信赖域算法是一种常用的非线性规划问题求解方法。
它通过构建局部模型,并通过逐步调整信赖域半径来寻找最优解。
信赖域算法既考虑了收敛速度,又保持了数值稳定性。
2. 遗传算法遗传算法是一种基于自然进化过程的优化算法。
它模拟遗传操作,并通过选择、交叉和变异等操作来搜索最优解。
遗传算法的优势在于其适用于复杂的非线性规划问题,但可能需要较长的计算时间。
优化方法matlab对于matlab代码的优化,可以从以下几个方面入手:1. 算法优化:首先,对于算法的优化是最直接有效的方法。
通过优化算法,可以减少代码执行的时间和内存占用。
在编写代码时,可以使用更高效的算法来解决问题。
例如,对于排序问题可以使用快速排序算法代替冒泡排序算法;对于查找问题可以使用二分查找算法代替顺序查找算法。
通过选择合适的算法,可以大大提高程序的效率。
2. 向量化操作:向量化操作是matlab中常用的优化方法之一。
在matlab中,向量和矩阵操作是高效的,而循环操作是低效的。
所以,尽量使用向量和矩阵操作,避免使用循环。
例如,可以使用矩阵乘法代替循环逐个相乘,使用矩阵的元素操作代替循环逐个操作。
3. 减少内存占用:在编写matlab代码时,要注意减少内存的占用,避免不必要的内存拷贝和创建大量的临时变量。
可以使用in-place操作来减少内存使用,尽量避免为临时变量重新分配内存空间。
此外,可以使用matlab内置的函数来高效地处理矩阵和数组,避免不必要的内存开销。
4. 编译优化:matlab提供了mex函数,可以将matlab代码编译成二进制mex 文件,提高代码的执行速度。
通过编译优化,可以将matlab代码转化成C/C++代码,并拥有与C/C++相当的执行效率。
可以将matlab中的瓶颈函数使用mex进行编译优化,提高程序的运行速度。
5. 并行计算:对于一些需要进行大规模计算的问题,可以使用matlab中的并行计算工具箱来进行并行计算,提高程序的运行效率。
可以使用parfor循环来代替普通的for循环,让代码并行执行。
同时,可以使用matlab的并行计算工具箱提供的函数来进行并行计算,如parallel.pool.Constant类来创建共享的常量,parallel.pool.DataQueue类来进行数据通信等。
除了以上几个方面,还可以通过以下方式进行matlab代码的优化:6. 预分配矩阵空间:在编写matlab代码时,可以提前预分配矩阵的空间,避免动态扩展矩阵的大小。
-386- 第二十七章 生产与服务运作管理中的优化问题本章主要介绍生产和服务运作管理方面的一些优化问题。
实际上,生产和服务运作管理的内容也是非常丰富的,几乎包含了企业管理的所有方面,本章中只是介绍几个实例而已。
§1 有瓶颈设备的多级生产计划问题1.1 问题实例在制造企业的中期或短期生产计划管理中,常常要考虑如下的生产计划优化问题:在给定的外部需求和生产能力等限制条件下,按照一定的生产目标(通常是生产总费用最小)编制未来若干个生产周期的最优生产计划,这种问题在文献上一般称为批量问题(lotsizing problems )。
所谓某一产品的生产批量(lotsize ),就是每通过一次生产准备生产该产品时的生产数量,它同时决定了库存水平。
由于实际生产环境的复杂性,如需求的动态性,生产费用的非线性,生产工艺过程和产品网络结构的复杂性,生产能力的限制,以及车间层生产排序的复杂性等,批量问题是一个非常复杂、非常困难的问题。
我们通过下面的具体实例来说明这种多级生产计划问题的优化模型。
这里“多级”的意思是需要考虑产品是通过多个生产阶段(工艺过程)生产出来的。
例1 某工厂的主要任务是通过组装生产产品A ,用于满足外部市场需求。
产品A 的构成与组装过程见图1,即G F E D ,,,是从外部采购的零件,先将零件E D ,组装成部件B ,零件G F ,组装成部件C ,然后将部件C B ,组装成产品A 出售。
图中弧上的数字表示的是组装时部件(或产品)中包含的零件(或部件)的数量(可以称为消耗系数),例如DB 弧上数字“9”表示组装1个部件B 需要用到9个零件D ;BA 弧上的数字“5”表示组装1件产品A 需要用到5个部件B ;依此类推。
图1 产品构成与组装过程图假设该工厂每次生产计划的计划期为6周(即每次制定未来6周的生产计划),只有最终产品A 有外部需求,目前收到的订单的需求件数按周的分布如表1第2行所示。
MATLAB在运筹学与优化方面的应用案例引言:运筹学与优化是数学的一个分支,旨在寻找最佳解决方案。
在现代社会中,运筹学与优化在各个领域都扮演着重要角色,例如交通规划、生产调度、供应链管理等。
MATLAB作为一个强大的数值计算工具,被广泛应用于运筹学与优化领域。
本文将通过一些实际案例,介绍MATLAB在这个领域的应用。
1. 生产调度优化生产调度是一个复杂的问题,需要在有限资源和时间内,合理分配任务和资源,以最大化生产效率。
MATLAB提供了一些优化工具箱,可以帮助解决这类问题。
例如,可以使用线性规划(LP)或整数规划(IP)方法,将生产调度问题表示为数学模型,并使用MATLAB的优化工具箱求解最优解。
通过对生产线上的任务顺序、机器调度等进行优化,可以显著提高生产效率和资源利用率。
2. 供应链优化供应链管理是一个涉及多个环节的复杂系统,其中包括供应商、生产商、分销商和终端用户等多个参与方。
在供应链中,优化各个环节的运作,对于提高效率、降低成本和提供更好的服务有着重要意义。
MATLAB可以帮助建立供应链模型,并使用优化工具箱对其进行优化。
通过分析供应链节点之间的关系和其它外部因素,可以减少库存成本、优化运输路线,实现供应链的高效运作。
3. 资源调度优化在某些应用场景中,资源调度是一个重要的优化问题。
例如,医院病床的分配、航空公司的飞机调度等。
MATLAB可以帮助建立相应的模型,并使用优化工具箱解决这类问题。
通过考虑资源的使用效率、最小化等候时间等因素,可以优化资源的分配和调度,提高资源利用率和服务质量。
4. 物流路径规划物流路径规划是一个常见的优化问题,它涉及到如何在给定的网络中找到最短路径或最佳路径,以实现货物的快速、安全和经济的运输。
MATLAB提供了一些图算法和优化工具,可以帮助解决这类问题。
例如,可以使用最短路径算法或遗传算法对物流路径进行分析和优化。
通过考虑路线的距离、时间、成本等因素,可以得到最佳的物流路径规划方案。
优化问题的Matlab求解方法引言优化问题在实际生活中有着广泛应用,可以用来解决很多实际问题。
Matlab作为一款强大的数学计算软件,提供了多种求解优化问题的方法。
本文将介绍在Matlab中求解优化问题的常见方法,并比较它们的优缺点。
一、无约束无约束优化问题是指没有约束条件的优化问题,即只需要考虑目标函数的最大或最小值。
在Matlab中,可以使用fminunc函数来求解无约束优化问题。
该函数使用的是拟牛顿法(quasi-Newton method),可以迭代地逼近最优解。
拟牛顿法是一种迭代方法,通过逐步近似目标函数的梯度和Hessian矩阵来求解最优解。
在使用fminunc函数时,需要提供目标函数和初始点,并可以设置其他参数,如迭代次数、容差等。
通过不断迭代,拟牛顿法可以逐步逼近最优解。
二、有约束有约束优化问题是指在优化问题中加入了约束条件。
对于有约束优化问题,Matlab提供了多种求解方法,包括线性规划、二次规划、非线性规划等。
1. 线性规划线性规划是指目标函数和约束条件都为线性的优化问题。
在Matlab中,可以使用linprog函数来求解线性规划问题。
该函数使用的是单纯形法(simplex method),通过不断迭代来逼近最优解。
linprog函数需要提供目标函数的系数矩阵、不等式约束矩阵和约束条件的右手边向量。
通过调整这些参数,可以得到线性规划问题的最优解。
2. 二次规划二次规划是指目标函数为二次型,约束条件线性的优化问题。
在Matlab中,可以使用quadprog函数来求解二次规划问题。
该函数使用的是求解二次规划问题的内点法(interior-point method),通过迭代来求解最优解。
quadprog函数需要提供目标函数的二次项系数矩阵、线性项系数矩阵、不等式约束矩阵和约束条件的右手边向量。
通过调整这些参数,可以得到二次规划问题的最优解。
3. 非线性规划非线性规划是指目标函数或者约束条件中至少有一个是非线性的优化问题。
Matlab优化算法以及应用案例分析引言Matlab是一款功能强大的数学软件,以其丰富的功能和灵活的编程环境而受到广泛的应用。
在数学建模和优化问题中,Matlab优化算法是一个重要的工具。
本文将介绍Matlab优化算法的基本原理和常见应用案例分析。
一、Matlab优化算法的基本原理1.1 最优化问题的定义在开始介绍优化算法之前,我们首先需要了解什么是最优化问题。
最优化问题可以定义为在一定的约束条件下,找到使得目标函数达到最大或者最小的变量取值。
最优化问题可以分为无约束问题和约束问题两种。
1.2 Matlab优化工具箱Matlab提供了丰富的优化工具箱,其中包含了许多优化算法的实现。
这些算法包括无约束优化算法、约束优化算法、全局优化算法等。
这些工具箱提供了简单易用的函数接口和丰富的算法实现,方便用户在优化问题中使用。
1.3 优化算法的分类优化算法可以分为传统优化算法和启发式优化算法两类。
传统优化算法包括梯度下降法、牛顿法、共轭梯度法等,它们利用目标函数的一阶或二阶导数信息进行搜索。
而启发式优化算法则通过模拟生物进化、遗传算法、蚁群算法等方法来进行搜索。
二、Matlab优化算法的应用案例分析2.1 无约束优化问题无约束优化问题是指在没有约束条件的情况下,找到使得目标函数达到最小或最大值的变量取值。
在Matlab中,可以使用fminunc函数来求解无约束优化问题。
下面以一维函数的最小化问题为例进行分析。
首先,我们定义一个一维的目标函数,例如f(x) = 3x^2 - 4x + 2。
然后使用fminunc函数来求解该问题。
代码示例:```matlabfun = @(x)3*x^2 - 4*x + 2;x0 = 0; % 初始点[x, fval] = fminunc(fun, x0);```在上述代码中,fun是目标函数的定义,x0是初始点的取值。
fminunc函数将返回最优解x和目标函数的最小值fval。
利用Matlab进行运筹优化问题求解运筹学优化问题求解是一门涉及不同领域的学科,包括数学、经济学和管理学等。
利用数学模型和算法,优化问题解决了许多实际生活中的困难和挑战。
而Matlab是一种强大的数值计算与科学工程计算软件,使用它可以帮助我们更高效地解决运筹学优化问题。
一、Matlab简介Matlab是MATrix LABoratory的缩写,由MathWorks公司开发。
它是一种高级技术计算语言和环境,广泛应用于数学建模、数据分析、算法开发和科学计算等领域。
Matlab具有强大的数值计算和数据可视化功能,并且支持各种数学模型和算法的实现。
二、数学建模数学建模是在实际问题中,利用数学工具和方法构造数学模型,对问题进行描述、分析和解决的过程。
在运筹学优化问题中,数学建模是至关重要的一步。
通过对问题的抽象,我们可以使用数学语言和符号来描述和分析问题的数学特性。
在Matlab中,我们可以使用符号计算工具箱来进行数学建模。
符号计算工具箱允许我们用符号表达式而不是数值来处理数学问题。
通过将变量定义为符号对象,我们可以进行代数运算、求导、积分等操作。
这为我们解决运筹学优化问题提供了很大的灵活性。
三、线性规划问题线性规划是运筹学中最基本和最常用的数学建模和优化问题求解方法之一。
它的数学模型可以表示为:```minimize c^T * xsubject to A * x <= bx >= 0```其中,c是一个包含目标函数的系数的列向量,x是一个包含待求解变量的列向量,A是一个包含约束条件系数的矩阵,b是一个包含约束条件的右端常数向量。
在Matlab中,我们可以使用优化工具箱的线性规划函数`linprog`来求解线性规划问题。
该函数可以通过传入目标函数系数、约束条件系数和右端常数等参数来进行求解,并返回最优解和最优值。
四、整数规划问题整数规划是在线性规划的基础上,对变量加上整数约束条件的问题。
整数规划在运筹学优化问题中有着广泛的应用,如物流路径优化、生产调度和资源分配等。
生产调度问题及其优化算法(采用遗传算法与MATLAB编程)信息014 孙卓明二零零三年八月十四日生产调度问题及其优化算法背景及摘要这是一个典型的Job-Shop动态排序问题。
目前调度问题的理论研究成果主要集中在以Job-Shop问题为代表的基于最小化完工时间的调度问题上。
一个复杂的制造系统不仅可能涉及到成千上万道车间调度工序,而且工序的变更又可能导致相当大的调度规模。
解空间容量巨大,N个工件、M台机器的问题包含M(N)!种排列。
由于问题的连环嵌套性,使得用图解方法也变得不切实际。
传统的运筹学方法,即便在单目标优化的静态调度问题中也难以有效应用。
本文给出三个模型。
首先通过贪婪法手工求得本问题最优解,既而通过编解码程序随机模拟优化方案得出最优解。
最后采用现代进化算法中有代表性发展优势的遗传算法。
文章有针对性地选取遗传算法关键环节的适宜方法,采用MATLAB 软件实现算法模拟,得出优化方案,并与计算机随机模拟结果加以比较显示出遗传算法之优化效果。
对车间调度系列问题的有效解决具有一定参考和借鉴价值。
一.问题重述某重型机械厂产品都是单件性的,其中有一车间共有A,B,C,D四种不同设备,现接受6件产品的加工任务,每件产品接受的程序在指定的设备上加工,条件:1、每件产品必须按规定的工序加工,不得颠倒;2、每台设备在同一时间只能担任一项任务。
(每件产品的每个工序为一个任务)问题:做出生产安排,希望在尽可能短的时间里,完成所接受的全部任务。
要求:给出每台设备承担任务的时间表。
注:在上面,机器 A,B,C,D 即为机器 1,2,3,4,程序中以数字1,2,3,4表示,说明时则用A,B,C,D二.模型假设1.每一时刻,每台机器只能加工一个工件,且每个工件只能被一台机器所加工 ,同时加工过程为不间断; 2.所有机器均同时开工,且工件从机器I 到机器J 的转移过程时间损耗不计; 3.各工件必须按工艺路线以指定的次序在机器上加工多次; 4.操作允许等待,即前一操作未完成,则后面的操作需要等待,可用资源有限。
三.符号说明及初始数据表达分析i J - 第i 个工件 (i=1…6)M J - 机器顺序阵 )(j i J M ,表示i 工件的第 j 个操作的机器号j M - 第j 台机器 (j=1…4)J M - 工件排列阵 ),(j i M J 表示i 机器上第j 次加工的工件号 T - 加工时间阵 ),(j i T 为i 工件的第 j 个操作的时间周期 C - 整个任务完成时间整理数据后得到:M J =[ C A B C D 0 0 0 ] T = [ 8 2 4 24 6 0 0 0 ][ A D B C 0 0 0 0 ] [ 4 5 3 4 0 0 0 0 ] [ C D A B A 0 0 0 ] [ 3 7 15 20 8 0 0 0 ] [ B C D A D C 0 0 ] [ 7 6 21 1 16 3 0 0 ] [ D B C D A C D 0 ] [ 10 4 8 4 12 6 1 0 ] [ A B A C D A C A ] [ 1 4 7 3 5 2 5 8 ] 上述二阵直接从题目得出,而J M 则是我们要求的。
关于工件的加工时间表:(表二)分析:由于各产品总净加工时间和各机器总净加工时间之中最大值为 75,而总计为247,那么 总时间 C 介于[75,247]。
同时各工件加工繁杂程度不一,各机器的任务量也有轻重之别。
合理的调度排序是对于节省时间和资源是必要的。
希望最优化答案是75,这样达到最小值,如果答案是75,那么意味着机器D 不间断工作,直至全部加工任务完成。
四.贪婪法快速求解如果按照一定规则排序,当多个工件出现“抢占”同一机器的局面的时候,我们可以制定如下的工序安排规则:1. 优先选择总剩余时间或总剩余操作较多的工件。
(如果出现总剩余加工时间多者总剩余操作数反而较少的情况时,按照程度具体情况具体分析)。
2. 机器方面来说,尽量避免等待空闲时间,优先考虑剩余净加工时间或者剩余加工总次数较多的机器,尤其是机器 D ,即倘若能够使机器D 不间断工作且其他机器完工时间均不多余75时,那么就可以得到最优解 。
首先按照最优化时间为75的设想避免D 出现等待,排序后得到升以下具体排列顺序。
10371784421646484253167524201516231666151242388101020304050607080D 机器C 机器B 机器A 机器 (图一)上图为加工周期图(甘特图),标注数字为相应操作的周期,完工时间为第75周期。
五.计算机随机模拟(编程)1.编码:随机产生生产的工序操作优先顺序,进行编码,如:K=[ 4 3 5 6 6 2 3 1 41 6 3 5 4 5 3 6 6 4 1 5 5 1 32 6 2 2 4 4 1 5 6 6 5 ] (注:同时作为下文的染色体之用)意思为:工件4优先被考虑进行第一次操作,然后3进行其第一步操作,然后5操作,6操作,再6操作其第二步工序,依次进行。
如果前后互相不冲突,则可同时在不同机器上操作。
通过排列组合得出,总共有类似K的排列序列223多种!10当然,这其中只对应解[75,247],意味着有大量排列序列对应同一加工方案,而大量加工方案又对应同一时间解。
2.解码:即对编码进行翻译,产生具体可操作工序安排方案,这里采用活动化解码算法。
例如工件2第i步操作(记为J(2,i),且在机器A上进行)M被安排在工件3第j步操作(记为JM(3,j))后面进行,那么如果安排好JM (3,j)后,只要J(2,i)在工件2已经排序好的操作之后进行,那么操MJ(2,i)可插入到机器A处最前可安置的时间段进行。
作M在这里,一个编码序列对应一个加工方案,而一个加工方案可对应一个或多个编码序列,这就是二者之关系。
3.编程:通过一组随机编码产生一生产加工优先序列,通过解码过程产生相应加工方案及其总耗费时间C . N次模拟后即可得出解C的概率密度分布情况以及相对最优解(N个C的最小值,如80,77等,甚至出现75)。
4.计算机模拟所得数据分析a. 进行100次模拟得出最优解情况:(共运行10次)82,83,82,84,78,80,81,83,87,82 平均值82.2,每回耗时约3秒b. 进行1000次模拟得出最优解情况:(共运行10次)80,79,78,78,79,79,76,80,77,78 平均值78.4 , 每回耗时25秒c. 进行10000次模拟得出最优解情况:(共运行10次)76,77,77,75,76,76,77,76,76,77 平均值76.3, 每回耗时4分钟d. 模拟1000000次得到的解C的概率密度分布情况为:(如图二所示)( 图二)(注:75处为17次(概率为17/1000000=1/58823),76处为40次,77处167次)结论:如果想将22310⨯中排序序列以平均出现一次的可能性进行模拟,即运行223⨯次,计算机需运行将近150万亿年!当然,我们没有这个10必要,因为我们只需要运行数万次,就很可能得到最优解75,(在随机模拟1000000次后出现17次75,那么意味着概率大约17/1000000=1/58823,另外76处为40次,77处167次)。
六.遗传算法模型建立和步骤解法遗传算法(Genetic Algorithm)作为一种优化算法特别适合于对象模型难于建立、搜索空间非常庞大的复杂问题的优化求解。
它和模糊控制技术一样,虽然在理论上还没有完善,但是在实践中已经得到了广泛的应用。
遗传算法的基本思想是:模仿生物系统“适者生成"的原理,通过选择、复制、交叉、变异等简单操作的多次重复来达到去劣存优的目的,从而获得问题的优化结果。
遗传算法的实现由两个部分组成,一是编码与解码,二是遗传操作。
其中遗传操作又包括选择、复制、交叉、变异等步骤。
本文根据实际情况采取了1-6整数编码。
数字1,2,3,4,5,6分别代表6件待加工产品。
本文遗传算法基本流程:通过编码,解码程序随机产生N个(有一定数量,如50或100)个体构成初始种群a)从初始中群中选取2个具有最优染色体(最有排序方案)的个体作为临时个体(父代);b)如果此2个体中有一个个体通过解码操作能够实现最优排序(即使总时间为75周期),那么结束此算法,得到最优解;c)对2个临时个体以一定方式(循环交叉)执行染色体交叉变换和变异选择(小概率,互换操作),产生2个新的个体;d)对父代和子代共4个个体进行选择,从中选出最佳的2个个体,做为下一代的父代;e)重复执行第二步(b)操作;f)如果执行完M步后仍然未得出答案75,那么将目前的最优解作为本算法的最优解答案。
1.编码和解码(同上)2.交叉变换(crossover)对2个父代临时个体进行染色体交叉变换,采用循环交叉方法(Cycle crossover CX),如父代染色体为:X:[9 2 6 4 7 3 5 8 1]和Y:[3 4 5 8 1 6 7 2 9],如果随机选到第二位开始交叉,那么X的2对应Y的4,X的4对应Y的8,X的8对应Y的2,这样就确定了以上为不变的染色体,其余位置的染色体互换位置,最后得到X': [32 5 4 1 6 7 8 9], Y': [9 4 6 8 73 5 2 1],实现交叉变换。
3.变异选择(mutation)采用互换操作(SWAP),,即随机交换染色体中两不同基因的位置。
如上面的染色体为:X': [3 2 5 4 1 6 7 8 9] 。
随机产生变换位置号,如产生随机数3和5,那么交换数字后得到染色体: [3 2 1 4 5 6 7 8 9],变异概率取0.1 。
4.选择操作(selection)对父代2个体f1,f2和子代2个体f3,f4进行选择,通过编码操作确定具有最优解的2个个体,成为新一代f1和f2 。
如此,通过多次编码和解码随机产生一定数量的个体,选取2个最佳个体进行交叉变换操作,产生2个新个体,然后对4个个体进行选择,产生下一代,如果某时刻通过解码操作得出最优解(所有解的下限,这里是75周期),那么算法结束,否则循环进行,直至预先给定的循环次数达到为止,以最后得到的最优解作为最终最优解。
七.遗传算法模拟(采用MATLAB工具编程)主程序如下:(子程序见略)% 本程序为主程序,调用以下各分支程序task= 'Welcome! Wait a moment please! --- Writer: 孙卓明 ,信息 014',f1=zeros(1,35);f2=zeros(1,35);while f1==f2; % 此步避免初始染色体 f1,f2 相同,导致以下死循环 [minminmax1,s1]=chushijie(N); % 种群初始化;基于操作的编码策略;活动化解码算法;chushijie(N) 参数 N 为初始种群数f1=s1 ; minminmax1, % 选取的第一个初始个体[minminmax2,s2]=chushijie(N); % 再次种群初始化f2=s2 ; minminmax2, % 选取的第二个初始个体end;for e=1:M; % e=1:M 进行 M 次遗传操作(交叉-变异-选择)[D]=jiaocha(f1,f2); % 交叉变化(循环交叉操作,cycle crossover CX),选取f1; f2; “染色体”无需变动部分基因[f3,f4]=jiaocha_bianyi(f1,f2,D); % 生成交叉后的“染色体”,并进行变异选择f3; f4;[f1,f2]=xuanze(f1,f2,f3,f4); % 选择:对父代f1,f2和子代f3,f4进行解码,得出2个f1; f2; 较优个体,成为下一代的父代[minmaxf1,a1,b1]=tongbujinzhan(f1); % 求该时刻个体f1的最优时间(因为f1优于f2)if minmaxf1==75;f1,a1,b1,minminmax1,minminmax2,minminmax_last=minmaxf1,task='Finish! Successful! Best answer! Congratulation! ' , return ;end; end;f1,a1,b1,minminmax1,minminmax2,minminmax_last=minmaxf1,if minminmax_last>=90; task='Finish! Action again please!',end;if minminmax_last>=80&&minminmax_last<90; task='Finish!' , end;if minminmax_last<80; task='Finish! Successful!', end;八.遗传算法模拟结果首先给出最优方案:在进行某次n=100,m=200的操作后得到模拟最优结果75周期时间:minminmax1 =83 minminmax2 =78 (二个初始较优个体解)f1 =[4 5 6 6 3 1 3 6 4 5 6 1 3 2 5 4 5 3 1 5 2 6 4 5 6 4 6 6 4 3 2 2 5 1 1](f1为各工件优先选择顺序排列,即“染色体”)a1 = 5 35 39 64 0 0 0 0 0 (a1,b1为四台机器空闲周期段)152****000017 53 65 0 0 0 0 0 00 0 0 0 0 0 0 0 0b1 =11 38 42 65 0 0 0 0 020 35 0 0 0 0 0 0 018 54 68 0 0 0 0 0 00 0 0 0 0 0 0 0 0minminmax = 75 (最终最优解)其中机器A空闲时间段为:5-11,35-38,39-42,64-65; 机器B则为:15-20,24-35; 机器C为:17-18,53-54,65-68;机器D无空闲。