组合优化求解方法

article/2025/11/9 10:18:10

1. 离散优化/整数规划

整数规划,或者离散优化(Discrete Optimization),是指数学规划问题中自变量存在整数。

混合整数规划(Mixed Integer Programming, MIP),即自变量既包含整数也有连续变量

求解复杂度

求解整数规划的精确解是NP难的,也就是指数级算法复杂度(Exponential Time Solvable)

假设这里的整数是0,1变量,那么我们可以简单地理解为算法复杂度是2n(需要解2n个线性规划问题)。也就是说,每增加一个0,1变量,求解的速度就有可能要增加一倍!例如求解n=100的整数规划问题需要1小时,那么求解n=101的规模可能会需要2小时,n=102需要4小时,n=105需要32小时。。这就是指数爆炸!

其它解决方案

近似算法(Approximation Algorithms),启发式算法(Heuristic Algorithms),遗传算法(Evolution Algorithms, Meta-Heuristic)等等。它们虽然不能求得整数规划的最优解,但是却能在短时间(通常多项式时间)内给出一个较好的可行解

组合优化是整数规划的子集。的确,绝大多数组合优化问题都可以被建模成(混合)整数规划模型来求解

2. 组合优化求解方法:

  • 精确方法——无法应用于大规模实例
  • 近似算法——本质上都是贪心算法,而且通常都是多项式时间的算法
  • 启发式方法——以问题为导向(通常依赖于人工选取 heuristics; –难以调整何时何地应用 heuristics; 般只能求得局部最优解;启发式算法的设计过程需要特殊的领域知识,并可能需要反复试验来调整算法。实际上,每当问题设置变化时,算法通常需要被重新修订,这需要我们重新优化系统,故而启发式算法在这时变得不切实际)
  • 元启发算法——如遗传算法、蚁群算法、进化算法、智能算法;可以将它当作一个黑箱子对几乎任何问题适用;可以控制算法的迭代次数
  • 神经网络
  • RL方法

3. 元启发算法Meta-heuristic

也被称为智能优化算法(Intelligent optimization algorithm)

举例:

(1) 遗传算法;

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

  • 种群——由经过基因(gene)编码的一定数目的个体(individual)组成
  • 个体——是染色体(chromosome);遗传物质的主要载体,即多个基因的集合
  • 由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码
  • 染色体长度为二进制编码的长度。chromosomes 每一条染色体是一个字典,该字典有两个内容,分别是包含基因的Gene类和适应度函数值fitness

初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dd7xTpmL-1664956560786)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c88608f7-ed23-4b67-87d7-6a0cfc0c6f45/Untitled.png)]

生物学术语

  • 基因型(genotype):性状染色体的内部表现;
  • 表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
  • 进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
  • 适应度(fitness):度量某个物种对于生存环境的适应程度。
  • 选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
  • 复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
  • 交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
  • 变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
  • 编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
  • 解码(decoding):基因型到表现型的映射。
  • 个体(individual):指染色体带有特征的实体;
  • 种群(population):个体的集合,该集合内个体数称为种群

遗传算法的一般步骤:

  • 随机产生种群。
  • 根据策略判断个体的适应度,是否符合优化准则,若符合,输出最佳个体及其最优解,结束。否则,进行下一步。
  • 依据适应度选择父母,适应度高的个体被选中的概率高,适应度低的个体被淘汰。
  • 用父母的染色体按照一定的方法进行交叉,生成子代。
  • 对子代染色体进行变异。

选择算子

  • 轮盘赌选择(Roulette Wheel Selection)
  • 随机竞争选择(Stochastic Tournament)
  • 最佳保留选择
  • 无回放随机选择(也叫期望值选择Excepted Value Selection)
  • 确定式选择
  • ……

遗传算法的缺点

1、遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码,

2、另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验.

3、有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,要得要较精确的解需要较多的训练时间。

4、算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进。

5、算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。

常用混合遗传算法,合作型协同进化算法等来替代,这些算法都是GA的衍生算法。

(2) 粒子群算法PSO;

PSO算法主要应用于连续问题,包括神经网络训练和函数优化等,而GA除了连续问题之外,还可应用于离散问题,比如TSP问题、货郎担问题、工作车间调度等

(3) 禁忌搜索算法;

(4) 蚁群算法;

(5) 人工蜂群算法;

(6) 模拟退火算法;*

(7) 差分进化算法;

(8) 免疫算法;

(9) 蛙跳算法;

(10) 帝国竞争算法;

(11) 和声搜索算法;

(12) 分布估计算法;

(13) Memetic算法;

(14) 文化算法;

(15) 人工鱼群算法;

(16) 灰狼优化算法;

(17) 进化规划;

(18) 进化策略;

(19) 候鸟优化算法;

(20) 算法;

(21) 花朵授粉算法;

(22) 引力搜索算法;

(23) 化学反应优化算法;

3. 智能优化算法总结

蚁群算法,1991 年
粒子群算法,1994年
细菌觅食优化算法, Bacterial Foraging Optimization Algorithm,2002年
混合蛙跳算法, Shuffled Frog Leaping Algorithm,2003年
人工蜂群算法, Artificial Bee Algorithm,2005年
萤火虫算法,第一种 Glowworm Swarm Optimization Algorithm 2005年,第二种Firefly Algorithm 2009年
布谷鸟搜索, Cuckoo Search,2009年
果蝇优化算法,Fruit Fly Optimization Algorithm,2011年
头脑风暴优化算法,Brain Storm Optimization,2011年
蝙蝠算法, Bat Algorithm,2010 年
灰狼优化算法,Grey Wolf Algorithm,2014 年
蜻蜓算法,Dragonfly Algorithm,2015 年
鲸鱼优化算法,Whale Algorithm,2016 年
蝗虫优化算法,Grasshopper Algorithm,2017 年
麻雀搜索算法, Sparrow Algorithm ,2020 年

生物学术语

  • 基因型(genotype):性状染色体的内部表现;
  • 表现型(phenotype):染色体决定的性状的外部表现,或者说,根据基因型形成的个体的外部表现;
  • 进化(evolution):种群逐渐适应生存环境,品质不断得到改良。生物的进化是以种群的形式进行的。
  • 适应度(fitness):度量某个物种对于生存环境的适应程度。
  • 选择(selection):以一定的概率从种群中选择若干个个体。一般,选择过程是一种基于适应度的优胜劣汰的过程。
  • 复制(reproduction):细胞分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新细胞就继承了旧细胞的基因。
  • 交叉(crossover):两个染色体的某一相同位置处DNA被切断,前后两串分别交叉组合形成两个新的染色体。也称基因重组或杂交;
  • 变异(mutation):复制时可能(很小的概率)产生某些复制差错,变异产生新的染色体,表现出新的性状。
  • 编码(coding):DNA中遗传信息在一个长链上按一定的模式排列。遗传编码可看作从表现型到基因型的映射。
  • 解码(decoding):基因型到表现型的映射。
  • 个体(individual):指染色体带有特征的实体;
  • 种群(population):个体的集合,该集合内个体数称为种群

遗传算法的一般步骤:

  • 随机产生种群。
  • 根据策略判断个体的适应度,是否符合优化准则,若符合,输出最佳个体及其最优解,结束。否则,进行下一步。
  • 依据适应度选择父母,适应度高的个体被选中的概率高,适应度低的个体被淘汰。
  • 用父母的染色体按照一定的方法进行交叉,生成子代。
  • 对子代染色体进行变异。

选择算子

  • 轮盘赌选择(Roulette Wheel Selection)
  • 随机竞争选择(Stochastic Tournament)
  • 最佳保留选择
  • 无回放随机选择(也叫期望值选择Excepted Value Selection)
  • 确定式选择
  • ……

(2) 粒子群算法PSO;

PSO算法主要应用于连续问题,包括神经网络训练和函数优化等,而GA除了连续问题之外,还可应用于离散问题,比如TSP问题、货郎担问题、工作车间调度等

(3) 禁忌搜索算法;

(4) 蚁群算法;

(5) 人工蜂群算法;

(6) 模拟退火算法;*

(7) 差分进化算法;

(8) 免疫算法;

(9) 蛙跳算法;

(10) 帝国竞争算法;

(11) 和声搜索算法;*

(12) 分布估计算法;

(13) Memetic算法;

(14) 文化算法;

(15) 人工鱼群算法;

(16) 灰狼优化算法;

(17) 进化规划;

(18) 进化策略;

(19) 候鸟优化算法;

(20) 算法;

(21) 花朵授粉算法;

(22) 引力搜索算法;

(23) 化学反应优化算法;

4. 智能优化算法总结

蚁群算法,1991 年
粒子群算法,1994年
细菌觅食优化算法, Bacterial Foraging Optimization Algorithm,2002年
混合蛙跳算法, Shuffled Frog Leaping Algorithm,2003年
人工蜂群算法, Artificial Bee Algorithm,2005年
萤火虫算法,第一种 Glowworm Swarm Optimization Algorithm 2005年,第二种Firefly Algorithm 2009年
布谷鸟搜索, Cuckoo Search,2009年
果蝇优化算法,Fruit Fly Optimization Algorithm,2011年
头脑风暴优化算法,Brain Storm Optimization,2011年
蝙蝠算法, Bat Algorithm,2010 年
灰狼优化算法,Grey Wolf Algorithm,2014 年
蜻蜓算法,Dragonfly Algorithm,2015 年
鲸鱼优化算法,Whale Algorithm,2016 年
蝗虫优化算法,Grasshopper Algorithm,2017 年
麻雀搜索算法, Sparrow Algorithm ,2020 年


http://chatgpt.dhexx.cn/article/spO0Lb6J.shtml

相关文章

【容器~原始真解】Docker —— 容器的使用

🔎这里是【秒懂云原生】,关注我学习云原生不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【秒懂云原生】 目前主要更新微服务和容器&#…

一文搞懂“镜像“和“容器“

众所周知,在云原生技术领域中,容器这一概念显得尤为重要,但是我们在使用Docker或Kubernetes中时常也会听说镜像这一概念,因此我们就利用一篇文章讲述下容器和镜像的概念和相互关系。 1 什么是镜像 1.1 概念 镜像(Mi…

Docker容器的概念

一:Docker详情解释 Docker 包括三个基本概念 镜像(Image)容器(Container)仓库(Repository) 理解了这三个概念,就理解了 Docker 的整个生命周期 4.1 镜像(Image&#x…

Java的容器

1 容器简介 容器,是用来容纳物体、管理物体。生活中,我们会用到各种各样的容器。如锅碗瓢盆、 箱子和包等。如图所示: 程序中的“容器”也有类似的功能,用来容纳和管理数据。比如,如下新闻网站的新闻 列表、教育网站的课程列表就…

云计算——容器

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.容器简介 二.主流容器技术 1.docker (1)容器的组…

什么是容器

什么是容器 一:概念二:容器API类图2.1 Collection2.2 Set2.3 List2.4 Map 三:详细解释3.1 Collection接口3.1.1 Collection用法 3.2 Iterator接口3.3 List接口3.4 Comparable接口 四:如何选择数据结构4.1 衡量标准:读的…

什么是应用容器

转载自https://www.cnblogs.com/qcloud1001/p/9273549.html 一、什么是容器? 容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么,总的来说,容器给人第一印象就是——“装”…

Docker解读(什么是容器)

一、What Is A Container 容器映像是一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应…

什么是Docker容器?Docker容器是如何工作的?

Docker是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机,Docker容器提供轻量化的…

什么是容器云?

作者:宝哥devops运维 链接:http://t.cn/ECwSNgj 容器技术是近几年云行业发展中不可缺少的一环。Docker和k8s的大热极大可能会推动云计算PAAS层的完善和普及。那么容器云到底是怎样的技术形态?究竟是概念还是可落地的应用?在这篇…

容器和镜像的区别

这篇文章希望能够帮助读者深入理解Docker的命令,还有容器(container)和镜像(image)之间的区别,并深入探讨容器和运行中的容器之间的区别。 当我对Docker技术还是一知半解的时候,我发现理解Doc…

Docker容器

什么是 Docker?为什么会有 Docker?Docker 的优势? 为什么会有 Docker? 我们知道一款产品从开发到上线,从开发环境到生成环境。作为开发和运维人员之间协作需要考虑很多问题,尤其是当我们的产品多版本迭代之…

搞懂什么是容器?

操作系统是如何管理进程的 进程的特点: 可以相互通信:具有高级权限的进程可以攻击其他进程共享同一份文件系统:(1)进程可以对已有的进程进行增删改查,也就意味着高级进程可以将其他应用所需要的进程删掉&…

通俗讲解:什么是容器?为什么我们要使用它?

作为程序员,让我们回忆我们每天从事的熟悉得不能再熟悉的软件开发工作: 在本地搭好开发环境,进行开发工作,完了进行单元测试,把开发好的代码部署到测试系统,重复测试,最后部署到生产系统。 我们…

容器化技术概述

容器技术概述 一、什么是容器? 容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么,总体来说,容器给人第一印象就是——“装”。 那今天我们要说的容器技术是怎么一个概念呢…

Docker学习(一):容器介绍

一、什么是容器 1、容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己的笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、或物理服务器、或公有云主机上运行。 2、容器…

容器基本概念

本节课程要点 什么是容器与镜像?如何构建容器与镜像容器的生命周期容器项目的架构容器 VS.VM 容器与镜像 什么是容器? 在介绍容器的具体概念之前,先简单回顾一下操作系统是如何管理进程的。 首先,当我们登录到操作系统之后&a…

走进波分 -- 15.Optix OSN1800产品介绍

用于城域接入/汇聚层。 盘纤盒,可容纳40根光纤,内部容纳光纤总长度50米 透过内置盘纤盒,构成一体化模块 一个DCM插框可以按照2个DCM模块 直流配电盒,用于安装在机柜上方,给设备供电。AB两部分,互为备份 O…

【PyTorch】Optim 优化器

文章目录 五、Optim 优化器1、SGD 五、Optim 优化器 参考文档:https://pytorch.org/docs/stable/optim.html 1、SGD 参考文档:https://pytorch.org/docs/stable/generated/torch.optim.SGD.html#torch.optim.SGD import torch.optim import torchvisio…

OptioMenu

#OpionMenu.py(可选菜单) from tkinter import *def ok ():print(value is,v.get())root.quit()rootTk() root.geometry(300x300280280)vStringVar(root) v.set(Python)omOptionMenu(root,v,Python,PHP,CPP,C,Java,JavaScript,VBScript) om.pack() buttonButton(root,textOK,co…