组合最优化

数学名词

组合最优化又称组合规划,是在给定有限集的所有具备某些特性的子集中,按某种目标找出一个最优子集的一类数学规划。初期,它所研究的问题,如广播网的设计、旅游路线的安排、课程表的制订等,都是网络上的一些极值问题。后来,对这些问题进行概括和抽象,在理论上研究了拟阵中一些更一般的组合最优化问题及算法。主要研究内容有:线性组合最优化问题;网络上的最优化问题;独立系统和拟阵,拟阵是组合优化中一个基本而重要的概念,许多组合问题都可化为拟阵问题。贪心算法是求拟阵的最优独立集的简单算法;交错链算法是求解最优交问题的基本算法。对问题算法的分类也是一类主要研究内容。某些算法具有多项式时间复杂度,如贪心算法、交错链算法,称之为多项式时间算法,能用多项式算法求解的问题为P问题。还有一类问题从求解的计算量角度看有如下共性:①它们都未找到多项式算法。②若对其中的某一个问题存在多项式算法,则这一类的所有问题也都有多项式算法。这些问题组成的等价类称为NP完备问题,如装箱问题、推销员问题等。人们在求解这类问题时,往往采用“启发式”算法,不能保证求得最优解,但常常能求得较好的近似解。

规划介绍
组合最优化是通过对数学方法的研究去寻找处理离散事件的最优编排、分组、次序或筛选等问题的优化方法。组合最优化实际上就是从有限个离散状态中选取最好的状态。这种优化问题一般可以描述为
←目标函数
←约束条件
←定义域
我们称这种优化问题为组合优化问题。现实中的大量优化问题就是从有限个状态中选取最好的状态,因此,大量的实际优化问题是组合优化问题。最优化问题一般分为两大类:一类是具有连续型的变量,另一类是具有离散型的变量,后一类被称为组合最优化,组合优化问题有时又称为离散优化(Discrete Optimization)问题。
实际上,上述组合优化问题是一个规划问题。解决这类优化问题的方法有各种规划(线性、非线性、目标、整数、随机、模糊)、遗传算法、退火算法、神经网络、搜索算法、拉格朗日松弛算法等。
一个组合最优化问题可以用3个参 表示,其中D表示决策变量的定义域,F表示可行解区域,F中的任何一个元素称为该问题的可行解, 表示目
标函数。组合最优化的特点就是可行解集合为有限点集。由直观可知,只要将定义域D中的有限个点逐一判别是否满足约束,并比较目标函数的大小,就可以得到该问题的最优解,这就是枚举法。对于某些优化问题可以通过枚举法得到最优解,这在问题规模较小时是十分有效的,也是非常全面的。但对于复杂的问题,枚举法显然是无法接受的。每一个组合最优化问题都可以通过枚举的方法求得最优解,然而枚举是以时间为代价的,有的枚举时间还可以接受,有的则不可能接受。
有的优化问题是有实时性要求的,如作战决策、天气预报等。因此,在这种情况下,对于优化问题还要附加时间性要求。
比如典型的旅行商(Traveling Salesman Problem,TSP)问题,若采用枚举法,则计算时间如表1所列。
对于这种问题至今为止还没有找到一种求最优解的算法,而这些组合最优化问题又有非常强的实际应用背景。因此,人们不得不尝试采用一些并不一定能保证可以求得最优解的算法来求解组合最优化问题,我们称之为启发式算法
组合最优化包含了许多常用的但一般很难处理的著名问题,像最短路问题、最小树问题、匹配问题和旅行售货员问题,也都属于组合最优化问题。下面介绍一些典型问题并介绍几种基本方法。
背包问题
有n件东西重量为 ,价格为 ,要求从中选出若干件装入背包,即使总重量不超过M,又使总价值最大。
Greedy算法:将比值 由小到大排好队逐件考虑,不超重就装入,否则放弃,考虑下一件。
算法的实质就是“挑好的装,装进后就不再换出”。不过,一般这种方法不一定能求得最优解。其实背包问题是NP-Complete问题,至今没有有效解法。
匹配问题
Greedy算法对背包问题不能保证求得最优解,但是能求得一个比较好的初始解。人们通常以它为基础再作一些调整。例如,尝试用两件东西去换1件或3件去换2件等办法来改进所求的解。交错链方法就是这种朴素思想的发展,它是组合最优化方法的核心。
下面通过匹配问题来说明交错链方法。
有n个工人和n项工作,每个人只能适应其中某几项工作。要求寻找一种分配方式,使得尽可能多的人分配到适应的工作岗位上。
例如,有5个工人:A、B、C、D、E,5项工作1,2,3,4,5,各工人与各工作之间的适应关系如图1所示。图中有线段相连表示适应。例如,A适应于1和2,问最多能同时安排几个人的工作?
从图1看,是要求利用线段将图中的端点一一配对,且希望配得对数越多越好。这就是图论中最大匹配问题。可见,所谓匹配就是无公共顶点的边所组成的集合。
首先,通过直觉观察,求出一个较好的初始匹配方案。在图中用粗线段标出,如图2所示。这时已连上粗线段的点称为已盖点,尚未连粗线的点称为未盖点,图上的一条路,若路上的线段粗细交错,则称其为交错链,如图3所示。称连接两个未盖点的交错链为增广链。对于增广链,细线段比粗线段多一条。对给定的匹配方案 ,假若存在一增广链S,那么只要把路S上的细线和粗线交换一下,便可得到多安排一个人的新匹配方案 。通常用下述符号表示上述调整运算:
图论中有下列基本事实:
定理1 一个匹配为最大匹配的充要条件是不存在关于它的增广链。
如何寻找增广链?采用“树生长法”(或称标号法),以图2为例,开始任取一未盖点为树根,如D,从树根沿着细线生长,接着从树梢出发沿着粗线往外生长,这样交错地沿着细线和粗线继续从树梢往外延伸,直到不能再生长(如图4)。称图4是以D为根的交错树。在树的生长过程中,一旦发现除树根外,另一未盖点被长到树上,过程就可中止。这时树上连结两个未盖点的那条路,便是一条增广链。图4中D与⑤之间就是一条增广链,沿着它们调整后,可得匹配图5。
总结交错链方法的计算步骤如下:
1.任选初始的匹配图;
2.利用树生长法寻找增广链。如果找到一条增广链则转步骤3;如果所有交错树上都无增广链,则步骤终止,已找到最大匹配;
3.(调整)替换增广链上的粗线和细线,得到一个新的匹配图,然后转步骤1。交错链方法的计算量是 。
排序问题
在许多可能的顺序中找一个最优顺序,分配加上加工顺序的限制,就成排序问题。例如,A与B两车床加工n件产品,加工时间分别为 和 。A先加工,然后B再加工,问如何安排所用时间最少?
由于加工顺序是A先B后,故应尽量减少B的等待时间。因此,不难理解其最优方案应是每次从{ )中取出一个最小值,若它属于{ },则应排在最先加工,若属于{ ),则应排在最后加工,然后对已确定加工顺序的数据从{ )中去掉。在余集上重复上述过程,依次排列,便得最优排序。此问题也可用动态规划的方法求解。
上述是2×n的同顺序排序问题,对于一般的m×n(m>3)的同顺序排序问题及不同顺序的排序问题,要用“分枝定界法”求解,现将该方法简介如下:
分枝定界法
欲求
考虑求
其中:要求 ,称式(2)为式(1)的松弛问题,它容易求解。若式(2)的最优解 ,则 ;否则,分A为两个(或多个)子集: ,解相应的松弛问题: ;若 ,则 问题已解决(否则,对 重复A的过程)。同样若 ,则 问题已解决,从而 即为所求最小值。若 而 (但 ),则 也不必考虑了;否则,对 继续实行如同A的步骤,如此进行,直到求得最优值为止( 取最小的子集先考虑)。
邮递员问题
一个邮递员负责投递某个街区的邮件,现在需要为他设计一条最短的线路,从邮局出发,经过投递区内每条街道至少一次,最后返回邮局。一般说来,为了经过每条街道至少一次,有些街道可能需要重复通过,如果限制每条街道不得通过三次或三次以上(可以证明某段街道通过三次或三次以上的投递路线一定是可以简化的),那么所有可能的投递路线的总数就是有限的,也就是说中国邮递员问题的可行解个数是有限的,因此它是一个组合最优化问题,这个问题是我国管梅谷教授在1960年首先提出的,所以在国际上被称为“中国邮递员问题”,中国邮递员问题已被公认为重要的组合最优化问题之一。
售货员问题
某公司的商品推销员打算从城市1出发,走遍城市2,3,…,n,去推销商品,最后回到城市1。问如何安排他的旅行路线,使走的路线的总长度最短(有时我们加上“经过每个城市恰好一次”这样的限制),这个问题称为旅行售货员问题。
旅行售货员问题的研究已经有四十多年的历史了,是组合最优化问题中另一个重要的研究课题,比较一下旅行售货员问题和中国邮递员问题是很有趣的,它们的提法看上去很相似,但实际上有本质的区别。
最小连接问题
给定n个城市。现在需要架设通讯线路,把这n个城市都连接起来,假定架设连接城市i和城市j的通讯线路所需费用为,问应该在哪些城市之问架设线路,既能使所有城市之间都能连通,又要总的架设费用最小?这个问题等价于最小树问题。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市