遗传算法的应用之函数优化和组合优化

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

目录

  • 函数优化
    • 函数最值
      • 函数最值
      • 多个局部最优解问题
  • 组合优化
    • 旅行商问题
    • 背包问题
      • 二进制表达法
      • 顺序表达式
      • 变长表达法
      • 适值函数的设计

转载+原创

函数优化

函数最值

函数最值

该例子参考 深入浅出遗传算法,透析GA本质.(强烈安利)中的例子,加上了一些自己的理解和改动
ex:已知x为整数,求在区间[0,31]区间上的二次函数y=x^2的最大值(max:x2)
分析:
个体:区间上的每一个x;适应度 f(x)=x^2;解空间 [0,31]

解:

  1. 设定种群规模;编码;产生初始种群
    设种群规模为4;用二进制数编码;取已下个体为初始种群:
    13(01101)
    24(11000)
    8 (01000)
    19(10011)

  2. 设定适应度函数
    令f(x) = x^2

  3. 计算各代种群中的个体适应度,对染色体进行遗传操作,直到个体适应度最高的个体出现
    由f(x) = x^2计算适应值、由f(xi)/ΣF(xi)计算选择概率、再逐个累加得积累概率 填入下表。
    设 从[0,1]区间产生4个随机数:
    r1 = 0.329876
    r2 = 0.098798
    r3 = 0.580045
    r4 = 0.790431
    代入积累概率区间可得选中次数分别为

编号初始群体变量x适应值f(x)选择比积累概率选中次数
10 1 1 0 1131690.140.141
21 1 0 0 0245760.490.632
30 1 0 0 08640.060.690
41 0 0 1 1193610.311.001
-------------------------11701------------4
平均值-------------------------2930.25------------1
最大值-------------245760.49------------2

于是经复制得到到:
13(01101)
24(11000)
24(11000)
19(10011)
假设交叉率Pc=100%,作交叉操作(1和2、3和4)

编号交配池交叉位置交叉后的新种群变量x适应值f(x)
10 1 1 0 \ 140 1 1 0 012144
21 1 0 0 \ 041 1 0 0 125625
31 1 \ 0 0 021 1 0 1 127729
41 0 \ 0 1 121 0 0 0 016256
1754
最大值27729
平均值439

假设变异率Pm=0.001,则S1中基因数为:
4(个体数)×5(五位二进制)×0.001 = 0.02
不足1,因此不会产生变异


如若存在变异,则做如下操作:
假设变异基因数为1

编号交叉后的新种群变异后的新种群变量x适应值f(x)
10 1 1 0 01 1 1 0 028784
21 1 0 0 11 1 0 0 125625
31 1 0 1 11 1 0 1 127729
41 0 0 0 01 0 0 0 016256

重复上述选择交叉操作直到出现x≥31


现在,回到交叉操作之后,不产生变异,所以该轮遗传染色体不发生改变,得到S2种群。重复选择交叉操作
交叉:

编号S2种群变量x适应值f(x)选择比累积概率估计选中次数
10 1 1 0 0121440.080.080
21 1 0 0 1256250.360.441
31 1 0 1 1277290.410.852
41 0 0 0 0162560.151.001

若都选中(ps:若不产生变异,如需得到最大值31,则必须保留第三位的基因1)
得到交配池:
12(0 1 1 0 0)
25(1 1 0 0 1)
27(1 1 0 1 1)
16(1 0 0 0 0)

编号交配池交叉位置交叉后的新种群变量x适应值f(x)
10 1 \ 1 0 030 1 0 0 1981
21 1 \ 0 0 131 1 1 0 028784
31 1 \ 0 1 131 1 0 0 024576
41 0 \ 0 0 031 0 0 1 119361

同样不产生变异,得到S3
继续选择交叉

编号S3变量x适应值f(x)选择比累积概率估计选中次数
10 1 0 0 19810.040.040
21 1 1 0 0287840.440.482
31 1 0 0 0245760.320.801
41 0 0 1 1193610.201.001

于是按照估计选择次数选择,得到交配池
28(1 1 1 0 0)
28(1 1 1 0 0)
24(1 1 0 0 0)
19(1 0 0 1 1)
交叉1和4后两位即得到31(1 1 1 1 1)

即适应度最高的染色体出现,遗传结束
代入验证,31为目标函数的最优解。

多个局部最优解问题

例如:
在这里插入图片描述
这类问题主要在于解码和解码函数的构造
在这里插入图片描述
就可以将实数转化为二进制码,然后进行遗传操作,直到出现最大适应值染色体
具体细节不展开叙述

组合优化

组合(最)优化问题是最优化问题的一类。最优化问题似乎自然地分成两类:一类是连续变量的问题,另一类是离散变量的问题。具有离散变量的问题,我们称它为组合的。在连续变量的问题里,一般地是求一组实数,或者一个函数;在组合问题里,是从一个无限集或者可数无限集里寻找一个对象——典型地是一个整数,一个集合,一个排列,或者一个图。一般地,这两类问题有相当不同的特色,并且求解它们的方法也是很不同的。
来源:《组合最优化算法和复杂性》,高等教育出版社,1988,C.H. Papadimitriou, K. Steiglitz (刘振宏,蔡茂诚 译)

其中 旅行商问题和背包问题都属于组合优化问题

旅行商问题

巡回旅行商问题戳这里

下面讨论背包问题

背包问题

背包问题可以简单描述如下:
一群海盗发现了一处宝藏,里面有各种价值重量的珍宝,但是珍宝数量巨大,海盗们只有一艘海盗船来装珍宝,那么海盗们要如何组合才能使得拿走的珍宝总价值最大不超过海盗船的载重量
数学描述如下:其中
p j 为 第 j 件 宝 物 的 价 值 , w j 为 第 j 件 珍 宝 的 重 量 p_j为第j件宝物的价值,w_j为第j件珍宝的重量 pjjwjj
在这里插入图片描述

下面讨论**遗传算法(GA)**求解背包问题

二进制表达法

1表示入选、0表示未入选

xx1x2x3x4x5
染色体10011

以上结果表明x1、x4、x5入选背包

但是该方法可能会产生不可行解(不符合约束条件)或者是入选数量超过承重量。(比较简单粗暴)
解决方法:

  1. 惩罚法
    构造惩罚函数p(x),给每个不可行函数一个简单的罚值
    则适值函数为 e v a l ( x ) = f ( x ) p ( x ) eval(x) = f(x)p(x) eval(x)=f(x)p(x)
    极大化问题的惩罚函数为:
    在这里插入图片描述
    惩罚曲线:
    在这里插入图片描述
    由此可见,惩罚函数不仅惩罚超过背包承重量的不可行解,也惩罚背包承重量利用不足的可行解。
    最优解位于可行域与不可行域边界上

  2. 解码法
    步骤:
    1) 将xj = 1的物品按价值与重量比(单位重量的价值)降序排列
    2)按优先适合启发式选择物品,直到背包不能再装
    ex:

xx1x2x3x4x5
染色体10011
价值重量比0.1————0.50.4
降序排列x4x5x1

其中,高亮即为染色体的解

ps:编码和解之间不存在一一对应的关系

顺序表达式

对于一个n 个物品的问题,染色体由n个基因构成,每个基因用一个不同的正整数代表一个物品。

即随机产生一个物品的排列顺序,作为一个染色体,物品再顺序中的位置,可以看作是该物品入选背包的优先级,按物品的顺序用优先适合启发式方法,就可以产生一个可行解(简单来说,就是按物品顺序入选背包、直到背包不能再装)

变长表达法

1)初始化:
首先产生一个随机物品序列,基于这个序列按优先适合启发式构造一个可行背包(染色体长度不定)
2)插入交叉
在这里插入图片描述
其中步骤一为 在第一个双亲上选择一个断点,在第二个双亲上选择一截片段,然后将片段插入第一个双亲的断点处。

3)变异

  • 随机地删除一个基因
  • 以随机的顺序增加染色体中没有的基因(所有没有的基因)
  • 对于以上形成的原始后代用优先适合启发式产生一个可行的背包

在这里插入图片描述

适值函数的设计

适值函数的设计对算法的性能影响很大
适值函数的设计:
在这里插入图片描述

该部分参考https://wenku.baidu.com/view/9b6ecea4cd1755270722192e453610661fd95a63.html

欢迎指正、侵删


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

相关文章

单目标优化,多目标优化,数值优化,组合优化

何为优化? 措施: 对应方法 变得更优: 对应的结果更加的好 优化: 动词,一种行为方法----------->目的是获得更好的结果,总之有所改善 优化问题的三要素: (1) 决策变量 …

OM | 强化学习 + 约束规划求解组合优化问题

组合优化在航空航天、交通规划以及经济学等众多学科领域中有广泛应用,其目标是在有限集中寻找最优解。然而状态空间过大的问题让目前组合优化变得棘手。在过去的几年中,使用深度强化学习(deep reinforcement learning,DRL&#xf…

连续优化、离散优化、组合优化、整数优化和凸优化

optimization分类 4 Classification of optimization problem (IP: integer programming, MINLP: mixed integer non-linear programming, MILP: mixed integer linear programming, LP: linear programming, QP: quadratic programming, NLP: non-linear programming) 出自 其…

优化|深度学习或强化学习在组合优化方面有哪些应用?

来源:图灵人工智能 前 言 深度强化学习求解组合优化问题近年来受到广泛关注,是由于其结合了强化学习(Reinforcement learning)强大的决策(decision-making)能力和深度学习(deep learning)的各种模型(RNN、Transformer、GNN等等)强大的信息提取表征能力…

组合最优化

组合最优化(参考资料) 最优化问题 ​ 最优化问题涉及的应用领域很广,问题的种类与性质繁多,归纳起来,可分为函数优化问题和组合优化问题两大类。其中函数最优化问题的解是一定区域内连续取值的量,而组合优化问题的解则是离散取值…

进化算法——组合优化

离散优化问题,也被称为组合优化问题,我们可以视之为在候选目标的有限集中找出最优目标 被称为搜索空间的基数。在理论上我们可以通过评价这个解的每一个f(x)来求解上式,这种组合优化的方法被称为穷举搜索或蛮力。 目录 旅行商问题TSP 旅行商…

组合优化求解方法

1. 离散优化/整数规划 整数规划,或者离散优化(Discrete Optimization),是指数学规划问题中自变量存在整数。 混合整数规划(Mixed Integer Programming, MIP),即自变量既包含整数也有连续变量 …

【容器~原始真解】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)进程可以对已有的进程进行增删改查,也就意味着高级进程可以将其他应用所需要的进程删掉&…