优化技术是一种以数学为基础,用于求解各种工程问题优化解的应用技术。归纳而言,最优化问题分为函数优化问题和组合优化问题两大类,其中函数优化的对象是一定区间的连续变量,而组合优化的对象则是解空间中的离散状态。
一、函数优化问题
函数优化问题通常可描述为:令 S 为 R n 上的有界子集(即变量的定义域), f:S→R 为 n 维实值函数,所谓函数 f 在 S 域上全局最小化就是寻求点 X min ∈S 使得 f(X min ) 在 S 域上全局最小,即 ∀X∈S:f(X min )≤f(X) 。
算法的性能比较通常是基于一些称为Benchmark的典型问题展开的,常用的BenchMark问题如下:
(1)Sphere Model
(1)旅行商问题
给定 n 个城市和两两城市之间的距离,要求确定一条经过各城市当且仅当一次的最短路径。其图论描述为:给定图 G=(V,A) ,其中 V 为顶点集, A 为各顶点相互连接组成的边集,一直各顶点间的连接距离,要求确定一条长度最短的Hamilton回路,即遍历所有顶点当且仅当一次的最短回路。
(2)加工调度问题
Job-shop问题是一类较TSP更为复杂的典型加工调度问题,是许多实际问题的简化模型。一个Job-shop可描述为: n 个工件在 m 台机器上加工, O ij 表示第 i 个工件在第 j 台机器上的操作,相应的操作时间 T ij 为已知,事先给定各工件在各机器上的加工次序(称为技术约束条件),要求确定与技术约束条件相容的各机器上所有工件的加工次序,使加工性能指标达到最优(通常是最小完工时间Makespan)。在Job-shop问题中,除技术约束外,通常还假定每一时刻每台机器只能加工一个工件,且每个工件只能被一台机器所加工,同时加工过程为不间断。若各工件的技术约束条件相同,一个Job-shop问题就转化为简单的Flow-shop问题。进而,若各机器上各工件的加工次序也相同,则问题进一步转化为置换Flow-shop问题。
(3)0-1背包问题
对于 n 个体积分别为 a i ,价值分别为 c i 的物品,如何将它们装入总体积为 b 的背包中,使得所选物品的总价值最大。
(4)装箱问题
如何以个数最少的尺寸为 l 的箱子装入 n 个尺寸不超过 l 的物品。
(5)图着色问题
对于 n 个顶点的无环图 G ,要求对其各个顶点进行着色,使得任意两个相邻的顶点都有不同的颜色,且所用颜色种类最少。
(6)聚类问题
m 维空间上的 n 个模式 {X i |i=1,2,...,n} ,要求聚成 k 类,使得各类本身内的点最相近,比如要求
显然,上述问题描述均非常简单,并且有很强的工程代表性,但最优化求解很困难,其主要原因是所谓的“组合爆炸”。比如,聚类问题的可能划分方式有 k n /k! 个,Job-shop的可能排列方式有 (n!) m 个,基于置换排列描述的 n 城市TSP问题有 n! 种可行排列,即便对无方向性和循环性的平面问题仍有 (n−1)!/2 种不同排列,显然状态数量随问题规模呈指数增长。因此,解决这些问题的关键在于寻求有效的优化算法。
(3)优化算法及其分类
所谓优化算法,其实就是一种搜索过程或规则,它是基于某种思想和机制,通过一定的途径或规则来得到满足用户要求的问题的解。
就优化机制与行为而分,目前工程中常用的优化算法主要可分为:经典算法、构造型算法、改进型算法,基于系统动态演化的算法和混合型算法等。
1)经典算法。包括线性规划、动态规划、整数规划和分支定界法等运筹学中的传统算法,其算法计算复杂性一般很大,只适合于求解小规模问题,在工程中往往不实用。
2)构造型算法。用构造的方法快速建立问题的解,通常算法的优化质量差,难以满足工程需要。比如调度问题中的典型构造方法有:Johnson法、Palmer法、Gupta法、CDS法、Daunenbring的快速接近法、NEH法等
3)改进型算法,或称领域搜索算法。从任一解出发,对其领域的不断搜索和当前解的替换来实现优化。根据搜索行为,它又可分为局部搜索法和指导性搜索法。
4)基于系统动态演化的方法。将优化过程转化为系统动态的演化过程,基于系统动态的演化来实现优化,如神经网络和混沌搜索等。
5)混合型算法。指上述各算法从结构或操作上相混合而产生的各类算法。
优化算法当然还可以从别的角度进行分类,如确定性算法和不确定性算法,局部优化算法和全局优化算法等。
(4)邻域函数与局部搜索
邻域函数是优化中的一个重要概念,其作用就是指导如何由一个(组)解来产生一个(组)新的解。邻域函数的设计往往依赖于问题的特性和解的表达方式(编码)。由于优化状态表征方式的不同,函数优化与组合优化中的邻域函数的具体方式明显存在差异。
函数优化中邻域函数的概念比较直观,利用距离的概念通过附加扰动来构造邻域函数是最常用的方式,如 x ′ =x+ηξ ,其中 x ′ 为新解, x 为旧解, η 为尺度参数, ξ 为满足某种概率分布的随机数或白噪声或混沌系列或梯度信息等。显然,采用不同的概率分布(如高斯分布、柯西分布、均匀分布等)或下降策略,将实现不同性质的状态转移。
在组合优化中,传统的距离概念显然不再适用,但其基本思想仍旧是通过一个解产生另一个解。下面对邻域函数给出一般性定义,并以TSP为例进行解释。
定义1 令( S,F,f )为一个组合优化问题,其中 S 为所有解构成的状态空间, F 为 S 上的可行域, f 为目标函数,则一个邻域函数可定义为一种映射,即 N:S→2 s 。其含义是,对于每个解 i∈S ,一些邻近 i 的解构成 i 的领域 S i ⊂S ,而任意 j∈S i 称为 i 的邻域解或邻居。通常约定, j∈S i ⇐⇒i∈S j 。
通常,TSP问题的解可用置换排列来表示,如排列(1,2,3,4)可表示4个城市TSP的一个解,即旅行顺序为1,2,3,4.那么, k 个点交换就可认为是一种邻域函数。比如,不考虑由解的方向性和循环性引起的重复性,上述排列的2点交换对应的邻域函数将产生新解(2,1,3,4)、(3,2,1,4)、(4,2,3,1)、(1,3,2,4)、(1,4,3,2)、(1,2,4,3)。
基于邻域函数的概念,就可以对局部极小和全局极小进行定义。
定义2 若 ∀j∈S i ∩F ,满足 f(j)≥f(i) ,则称 i 为 f 在 F 上的局部极小解;若 ∀j∈F ,满足 f(j)≥f(i) ,则称 i 为 f 在 F 上的全局最小解。
局部搜索算法是基于贪婪思想利用邻域函数进行搜索的,它通常可描述为:从一个初始解出发,利用邻域函数持续的在当前解的邻域中搜索比它好的解,若能够找到如此的解,就以之称为新的当前解,然后重复上述过程,否则结束搜索过程,并以当前解作为最终解。可见,局部搜索算法尽管具有通用易实现的特点,但搜索性能完全依赖于邻域函数和初始解,领域函数设计不当或初值选取不合适,则算法最终的性能将会很差。同时,贪婪思想无疑将使算法丧失全局优化的能力,也即算法在搜索过程中无法避免陷入局部极小。因此,若不在搜索策略上进行改进,那么要实现全局优化,局部搜索算法采用的邻域函数必须是“完全的”,即邻域函数将导致解的完全枚举,而这在大多数情况下是无法实现的,而且穷举的方法对于大规模问题在搜索时间上是不允许的。
鉴于局部搜索算法的上述缺点,智能优化算法,如模拟退火算法、遗传算法、禁忌搜索、神经网络优化算法和混沌搜索等,从不同的角度利用不同的搜索机制和策略实现对局部搜索算法的改进,来取得较好的全局优化性能。