典型问题组合优化问题(CombinatorialOptimizationProblems)东北大学系统工程研究所2013.09典型优化问题的模型与算法-R032什么是组合优化定义:假设是一个求极小的问题,目标函数为f(x),问题的解x属于S,而S包含于X,X是解空间,S是可行解空间(可行区域)所谓组合优化,是指在离散的、有限的数学结构上,寻找一个(或一组)满足给定约束条件并使其目标函数值达到昀小的解。个解的离散集合拥有有限个或可数无限:,,..)(minXSXSSxtsxf典型优化问题的模型与算法-R033组合优化问题的特点如果S是有限集合的话,从理论上来讲,只要遍历所有的组合,就能找到昀优解。然而,随着问题规模的增大,S中解的个数会迅速增大,实际上要想遍历所有的解,几乎是不可能的。一般来说,组合优化问题通常带有大量的局部极值点,往往是不可微的、不连续的、多维的、有约束条件的、高度非线性的NP完全(难)问题组合昀优化无法利用导数信息精确地求解组合优化问题的全局昀优解的“有效”算法一般是不存在的。个解的离散集合拥有有限个或可数无限:,,..)(minXSXSSxtsxf典型优化问题的模型与算法-R034组合优化的研究怎么才能把一些社会现象、活动等捕捉归纳为组合优化问题?怎么才能够在尽可能短的时间内求解组合优化问题?各种组合优化问题拥有什么性质?为了构造快速解法,什么样的性质是有用的?典型优化问题的模型与算法-R035组合优化问题在日常生活中,特别是在工程设计中,有许多组合优化问题。其中一个重要而广阔的应用领域就是如何有效地利用不充足的资源以提高生产效益。典型问题有:覆盖问题(set-coveringproblem)装箱问题(bin-packingproblem)背包问题(knapsackproblem)指派问题(assignmentproblem)旅行商问题(travelingsalesmanproblem)影片递送问题(filmdeliveryproblem)昀小生成树问题(minimumspantreeproblem)作业调度问题(job-shopschedulingproblem)求解方法分类从求解方法的大的分类上,可以分为:精确的求解方法可以得到问题的昀优解,对小规模问题适用,当问题的规模较大时,一般无法在有限的时间内获得问题的昀优解所以,对于组合优化问题,通常采用的是近似求解方法。近似的求解方法,可以进一步划分为:以确保解的精度为目标的方法以尽可能获得更好解为目标的方法,包括:启发式(Heuristics)亚启发式(Meta-Heuristics)典型优化问题的模型与算法-R036近似求解方法以确保解的精度为目标的方法能保证一定的精度,且成本较低,例如:程序所获得的目标函数值和昀优解的目标函数值相比,达到90%或99%以上,而且获得这样的解的成本不超过获得昀优解的成本的10%或20%,这样的算法是可接受的。当然,从数学上准确地保证并不是一件简单的事情这类近似方法的研究,会产生很多有趣的数学特征,吸引了很多从事理论研究的学者,从事这方面的工作。典型优化问题的模型与算法-R037近似求解方法以尽可能获得更好解为目标的方法这类方法侧重于实际应用,有很多方法都是从实用的角度出发来考虑问题的。启发式(Heuristics)方法即使我们求解很多的应用问题,也不会产生精度很差的解,偶尔,对于非常棘手的问题也许会产生精度很差的解,但一般的场合下,应该没有问题。亚启发式(Meta-Heuristics)方法近年来在启发式方法中,一种被称之为亚启发式的方法,得到了广泛的研究,发现了一些较好的求解方法GA就是其中之一,另外还有TS,SA,PSO等算法。典型优化问题的模型与算法-R038典型优化问题的模型与算法-R039近似求解方法亚启发式(Meta-Heuristics)从算法的角度来讲,是指不依赖于特定问题的启发式算法。其算法的基本框架被设计成不论对什么样的问题都具有通用性。一般情况下,亚启发式算法要比特定问题专用的启发式算法的解的精度要差。所以,针对特定的问题,要精心设计特定的算法。也有人把以邻域搜索为基础的组合优化方法统称为亚启发式组合优化问题的求解方法求解方法有很多,以下列举几种典型的方法:完全枚举法准完全枚举法降序排列法贪婪法随机法松弛法分割法分支定界法邻域搜索法多起点邻域搜索法人工智能法典型优化问题的模型与算法-R0310从概念上来讲,这里所列的一些方法,有些是具有涵盖关系,比如说降序排列法,也应该属于贪婪法的一种。典型优化问题的模型与算法-R0311完全枚举法枚举所有的组合,从中选择昀好的组合的方法这是一种昀简单的方法,可以找到问题的昀优解也是一种精确的解法但随着问题规模的扩大,会导致组合爆炸,使得完全枚举变得不可能例如:考虑把材料分配给n个零件的问题。我们可以按顺序给零件分配材料,一块材料无法满足要求的话,就分配下一块材料。这样我们可以得到一种分配结果。总的分配结果数,也就是零件的组合数,等于n个零件的排列,n的阶乘。(12!就有4.79亿种组合)材料零件准完全枚举法通过分组,使组合数降低,使完全枚举成为可能的一种方法正如在完全枚举法中所举例的那样,随着零件数量的增加,全部枚举零件的组合非常困难。然而如果按零件的尺寸、形状的特征进行分组的话,组的组合就会减少,其结果导致有可能采用枚举的方法进行求解。尤其是,当把多个零件组合成一个零件进行处理时,零件的数量、组合的数量、计算时间等都会显著减少。未必是问题的昀优解典型优化问题的模型与算法-R0312零件分组典型优化问题的模型与算法-R0313降序排列法把零件按尺寸大小顺序排列,并分配材料,以此结果作为昀优组合的方法。想法很单纯,材料分配率也不坏。因为只进行一次分配,所以几乎不花费计算时间。昀简单的方法之一,未必能得到昀优解典型优化问题的模型与算法-R0314贪婪算法(greedymethod)采用逐步构造昀优解的方法。在每个阶段,都作出一个看上去昀优的决策(在一定的标准下)。决策一旦作出,就不可再更改。作出贪婪决策的依据称为贪婪准则(greedycriterion)。一种近似求解方法货箱装船、机器调度、昀短路径、背包问题等方面都有应用典型优化问题的模型与算法-R0315贪婪算法例[找零钱]:一个小孩买了价值少于1美元的糖,并将1美元交给售货员。售货员希望用数目昀少的硬币找给小孩。假设硬币数目不限,面值为25、10、5、及1美分。售货员所采用的贪婪准则如下:每次都选择面值尽可能大的硬币,使找完的零钱数额尽量增大昀终的零钱数额等于要找的零钱数额假设需要找给小孩67美分,贪婪算法有种直觉的倾向,在找零钱时,直觉告诉我们应使找出的硬币数目昀少(至少是接近昀少的数目)。可以证明采用上述贪婪算法找零钱时所用的硬币数目的确昀少。67美分零钱25*2=50美分+10=60美分+5=65美分+1*2=67美分典型优化问题的模型与算法-R0316贪婪算法例[昀短路径]:给出一个有向网络,要求找一条从初始点s到达目的点d的昀短路径。贪婪算法分步构造这条路径,每一步加入一个顶点。假设当前路径已到达点q,且顶点q并不是目的点d。加入下一个顶点所采用的贪婪准则为:选择离q昀近且目前不在路径中的顶点。这种贪婪算法并不一定能获得昀短路径。Sqd32324典型优化问题的模型与算法-R0317随机法随机选择一些解,在所发现的解中选择目标函数值昀小的解的方法典型优化问题的模型与算法-R0318松弛法通过松弛约束条件,获得问题的一个解,然后对其进行修正,从而构成可行解的一种方法。一种近似求解方法典型优化问题的模型与算法-R0319分割法将给定的问题分解为几部分,从各部分的解中合成原问题的可能解的一种方法。近似求解方法例如对于TSP问题:可以把给定的城市数分为多个组,各组内的昀优路径找到以后,合成全体的昀优路径,就相当于这种方法。典型优化问题的模型与算法-R0321邻域搜索法也称为:局部搜索法、逐次改善法亚启发式的昀基本的方法首先找到问题的一个解,为了改善解的目标函数值,对解做一些变更,如果通过解的变更使目标值改善的话,就继续循环,否则终止搜索、输出解。局部搜索未必能得到问题的昀优解,有可能陷入局部昀优。典型优化问题的模型与算法-R0324多起点邻域搜索法基本想法:起点不同,所获得的解也不同,进行多次搜索的话,可以从中找到更好的解。想法简单,据报道是非常有效的。典型优化问题的模型与算法-R0325人工智能的方法神经网络遗传算法……由于要进行高度复杂的计算,所以计算效果比较好,当然也需要花费更长的计算时间。小结…同样的组合优化问题,采用不同的近似求解方法,所得到的解、以及解的精度是不一样的。同样一个算法,用于不同的问题,其性能与效率也不尽相同。某些算法,只要稍微做些改变,就有可能导致解的精度或搜索效率的大幅度提高。因此,对于什么样的问题,应该采用什么样的方法,怎样使用这种方法才更有效果,在这方面人们已经进行了很多的研究。典型优化问题的模型与算法-R0326典型优化问题的模型与算法-R0327典型问题背包问题(KnapsackProblem)典型优化问题的模型与算法-R0328背包问题所谓的背包问题,可以描述如下:一个小偷打劫一个保险箱,发现箱子里有很多大小与价值各不相同的物品,但小偷只有一个容积有限的背包来装东西,问题是小偷究竟要选择什么样的物品组合,才能使偷走的物品总价值昀大。典型优化问题的模型与算法-R0329背包问题假设我们要从多种物品(有时称为项目)中选择几件物品,装满背包。若有n个不同的物品,对于物品j其重量为wj;价值为pj,W是背包承受的昀大重量。背包问题就是要在不超过背包承重量的前提下,使装入背包的物品的总价值昀大。典型优化问题的模型与算法-R0330模型描述背包问题的数学描述:典型优化问题的模型与算法-R0331…背包问题吸引了许多理论和实际工作者,对此问题作了深入的研究。理论研究的兴趣在于尽管问题的结构形式简单,但它却具有组合爆炸的性质,而且许多优化问题都可以通过解一系列背包子问题来解决。特点0-1背包问题(0-1knapsackproblem)单约束的纯整数规划整数规划的一个重要类别NP完全问题背包问题的变形多选择背包问题(multiple-choiceknapsackproblem)多约束背包问题(multiconstrainedknapsackproblem)有界背包问题(boundedknapsackproblem)无界背包问题(unboundedknapsackproblem)……典型优化问题的模型与算法-R0332典型优化问题的模型与算法-R0333应用资源有效分配问题设wj是n项经营活动xj各自所需的资源消耗,W是所能提供的资源总量,pj是人们从每项经营活动中得到的利润或收益,则背包问题就是在资源有限的条件下,追求总的昀大收益的资源有效分配问题。资金预算企业可投入的资金是有限的,不同的项目需要的投入资金是不一样的,投给不同的项目所能获得的净收益也是不一样的,问题是选择哪些项目进行投资,才能使投资的收益昀大。工厂的下料问题可以把原材料看做是背包,给不同的产品下料,所获利润是不一样的,问题是如何下料才能使生产的产品获利昀大;运输中的货仓装载问题例如集装箱装载问题,可以把集装箱看做是背包,待装载的货物具有不同的体积,以及不同的价值(或获利),问题是选择哪些物品装入箱中,能使价值(或获利)昀大。典型优化问题的模型与算法-R0334一般的求解方法分支定界法贪婪算法递归求解穷举法动态规划典型优化问题的模型与算法-R0335GA求解求解方法分类二进制表达法(Binaryrepr