带约束进化算法问题分析Constrained Evolutionary Algorithms

news2024/11/15 17:43:23

经典论文《Evolutionary Algorithms for Constrained Parameter Optimization Problems》对带约束的进化算法进行了综述,本文不涉及其内容的翻译,主要为个人对论文理解和思考。

1. 进化算法定义Evolutionary Algorithms

论文中所讨论的进化算法主要为以遗传算法genetic algorithms等传统进化算法,其解决的问题定义为一个寻优目标优化函数f(x)(最大值或最小值)的解x的问题:

opt:\hat{x}=argmin_{x} \ f(x)

其基本思路是根据种群进化的观点,为了达到最大化(或最小化)目标函数f(x),其大体的执行步骤为:

  1. 初始采样生成大量样本x;
  2. 根据目标函数f(x)排序,从中选择一定比例的样本x作为该轮胜出,对应于种群进化的自然选择;
  3. 上一轮胜出的样本,经过自身挠动(Mutation)和彼此交互(Crossover)得到一轮样本,对应于种群进化中基因变异和遗传繁衍;
  4. 重复2->3的过程,直到目标函数f(x)收敛。

遗传算法是一类典型的model-free的算法,其可以用黑盒的方式来解决很多目标函数优化的问题,带约束的优化问题,是指在优化的目标函数外,对样本x本身有约束条件,比如线性规划问题就是一类带约束的优化问题,其可以通过拉格朗日方法来解决。带约束的优化问题可以定义为,下式中h_j(x)\leq B表示某一约束条件。

opt:\hat{x}=argmin_{x} \ f(x) ,\exists \ h_j(x)\leq B,\text{ for j in }[1,2,...n]

论文发表于近30年前,虽然当前的进化学习有了很大的发展,不仅仅只是遗传算法,其很多算法已经过时,但是其对于model-free带约束的优化问题的解决思路仍然很值得学习。

2. 带约束的进化学习解决思路

A)构造满足约束的样本法

这种方法的思路是指在构造样本时,强制使其满足约束条件,同时在进化中,设计合理的挠动算子使其下轮的样本也天然满足约束条件,此时就能将问题转换为不带约束的优化问题。这种方法大概有两种思路:

  • 当约束条件均为线性的情况下(即可行解空间是凸的),通过初始化大量的满足约束的解,设计合理的进化挠动算子,使其下轮的样本也天然满足约束条件,在线性约束情况下,进化挠动算子满足如下条件得到的下轮样本必然也是满足约束的。

x^{t+1}_k = a * x^{t}_i + (1-a)*x^{t}_j, \ 0\leq a \leq 1

  • 当约束条件不是线性的情况下,我们基于这样的假设:最优点往往位于约束边界上的位置。所以在初始化时,大量筛选恰好满足约束条件的样本,在进化挠动时,根据约束条件合理设计自身挠动(Mutation)算子和彼此交互(Crossover)算子,使下轮样本必然也是满足约束的。论文中给出了如下非线性约束例子:
    • \prod_i^K x_i=b \rightarrow (x_i)(x_j) = (x^\alpha _ix^(1-\alpha) _j),\ 0\leq \alpha \leq 1
    • \sum^K_i x^2_i = 1\rightarrow x_n=\sqrt{\alpha x^2_i + (1-\alpha )x^2_j},\ 0\leq \alpha \leq 1

B) 基于惩罚函数penalty functions的方法

这种方法的思路是原来的优化目标函数的基础上添加了惩罚项,类似于拉格朗日方法,惩罚项一般同约束项的偏离程度有关,其大体上分为如下思路:

  • 静态惩罚权重:是指对不同约束项的偏离程度添加不同的权重值R,下式中f(x)表示原来的优化目标函数,j表示约束条件的标号,h(x)表示同约束项的偏离程度,i表示偏离等级(约束项在比较接近的情况下权重值R可以低一些,但当偏离特别夸张时可以放大)。这个静态惩罚权重最大的问题是当约束项太多时,权重参数也会很多。

Eval(x) = f(x) + \sum_j R_{ij}|h_j(x)|^2

  • 动态惩罚项:在静态惩罚项的基础上添加随迭代时间增强的系数,论文中给出一种如下基础形式,基中r,α,β都是超参数,t是迭代轮数

Eval(x) = f(x) + (r*t)^{\alpha }\sum_j |h_j(x)|^\beta

  • 退火惩罚项:也是一种动态惩罚项,基于了模拟退火的理论。

  • 自适应惩罚项:其基于的思想是如果最优个体持续不满足约束项,则加大惩罚,如果最优个体持续满足约束项,则减少惩罚,论文中给出一种形式如下,其中λ是惩罚项的权重值,S满足约束项的样本,β都是超参数。

\begin{cases} & \frac{1}{\beta_1}\lambda(t) \text{ if } \hat{x_j} \in S, \text{ for all } t-k+1\leq j\leq t\\ &\beta_2 \lambda(t)\text{ if } \hat{x_j} \in \bar{S}, \text{ for all } t-k+1\leq j\leq t \\ & \lambda(t) \text{ if } other \end{cases}

  • 双组惩罚项选优法:这种方法基于这样的思想:当惩罚项较小时,得到解虽然目标函数值高,但约束项很难满足,而惩罚项较大时,约束项能满足而目标函数往往不是最优。因此分别设计两个优化任务,一个惩罚项较小,另一个惩罚项较大,分别各自生成一组最优样本,然后结合生成子样本。这种方法认为惩罚项较小的解往往分布在不可用空间,惩罚项较小的解往往分布在可用空间,两者结合会逼近不可用空间和可用空间的边界,而最优解很多情况下都是在这个边界上。
  • 绝对惩罚法:这种方法是对不可行约束项添加一个较大惩罚项,其使得所有可行解的优化函数都比所有不可行解的优化函数要大:

Eval(x) > Eval(y), \text{ if } x\in S, y\in \bar{S}

C) 基于对可行解搜索的方法

这种方法的思路是从可行空间的解出发去搜索最优解,其大体上分为如下几类:

  • 行为记忆法behavioral memory method:这种方法针对于约束条件很多的情况下,先寻找到基本能满足一个约束条件的解空间,然后依次在该空间继续寻找满足剩下约束条件的解,直到到最后约束条件时,直接寻找满足所有约束条件的目标函数最优的解。这种方法通过不断压缩可行解空间的方式,当样本足够的情况下能拟合多约束条件解空间边界。
    • 只考虑满足约束1下进行寻优,直到解空间中特定比例的样本都满足约束1;
    • 在上轮样本空间上,只考虑满足约束2下进化寻优,直到解空间中特定比例的样本都满足约束2;
    • 重复上述过程直到最后一个约束条件,只考虑优化目标函数,筛选满足所有约束的样本。
  • 不可用样本修复法:这种方法将样本分成仅满足线性约束的空间P_l和满足全部约束的空间P_r,其中P_l提供了虽不完全可行但更为贴近最优目标f(x)的样本,而P_r提供完全满足约束的解。所以通过将P_lP_r的样本进行cross加工,使其保留两部分的特性,其主要的执行要点如下:
    • 初始满足线性约束的空间P_l并评估其目标f(x),初始化方式可以采用上方A中提到的方法
    • 初始化满足全部约束的空间P_r并评估其目标f(x)
    • P_l中筛选样本解,目标函数f(x)更高的有更大机率被选中
    • 评估P_l中的样本s_l,如果s_l不可行,则根据P_r中的可行样本s_r做cross修复加工得到s'_l
    • 选择s_r经过反复加工直到s'_l是可行的,当f(s'_l)> f(s_r)则将用s'_l替换P_r空间的s_r,同时一定比例的用s'_l替换P_l空间的s_l,以增加P_l空间的变动性。
    • P_r空间迭代是在P_l空间每经过k轮迭代后进行的,因为P_r主要是用于修复加工,而P_l才是用于搜索。其迭代过程为生成(根据上轮P_r生成当前样本)、评估(评估其目标函数值)、筛选(按目标函数排序筛选满足约束的解) 

D) 其他方法

  • 混合法:这种方法是将进化算法与其中确定性的数值计算结合起来,比如针对于存在大量局部最优点的非凸优化问题,可以先通过进化学习找到全局最优点的附近位置,然后再通过类似于梯度下降法的数值计算的方式更精确找到最优点。
  • 多目标优化法:这种方法是将优化函数和约束项偏离值以一个向量表示,将其视为一个多目标优化问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java泛型5

泛型类 Java泛型不仅允许在使用通配符形参时设定上限,而且可以在定义泛型形参时设定上限,用于表示传给该泛型形参的实际类型要么是该上限类型,要么是该上限类型的子类。 上面程序定义了一个Apple泛型类,该Apple类的泛型形参的上限…

免安装PortableGit配置 + TortoiseGit安装

文章目录官网/安装Git将git命令添加到Path环境变量添加GitHub登录账号下载安装TortoiseGit官网/安装Git Git官网:https://git-scm.com/ 国内用户,建议通过淘宝镜像网站下载安装文件: https://registry.npmmirror.com/binary.html?pathgit…

18.异常

目录 一.异常 1.1 什么是异常 1.2 为什么要学习异常 1.3 异常的体系 1.5 编译时异常 1.5.1 什么是编译时异常 1.5.2 编译时异常的作用 1.5.3 常见编译时异常 1.6 运行时异常 1.6.1 什么是运行时异常 1.6.2 常见运行时异常 1.6 异常的默认处理流程(RunTim…

web3:区块链常见的几大共识机制及优缺点

web3相关学习一并收录至该博客:web3学习博客目录大全 胡歌看了都得给我一键三连吧! 目录什么是共识?什么是共识机制?共识机制的目标为什么需要共识机制?如何评价一个共识机制的优劣:共识机制分类PoW( Proof of Work)工作量证明&a…

2023年最新!北京Java培训机构排行榜新鲜出炉!

北京作为中国的首都,其人才的需求的体量之大是其他城市不可比的。那么在北京学习Java,到底该怎么选择Java培训机构哪?怎么在众多的机构里面选择出最适合自己的哪?下面是小编根据口碑和实力整理出的北京Java培训机构排行榜单,仅供…

【Effective_Objective-C_6 块block】

文章目录前言GCD和块的简介37.理解块的概念块的基础知识块可以捕获变量内联块的用法块的内部结构全局块,栈块,堆块堆块全局块要点38.为常用的块类型创建typedef要点39.用handler块降低代码分散程度协议传值实现异步块实现异步回调操作里的块要点40.用块引…

说说redux的实现原理是什么,写出核心代码?

目录标题一、redux三大基本原则是:二、实现原理:三、如何使用一、redux三大基本原则是: 单一数据源state是只读的使用纯函数来执行修改 注意的是,redux并不是只应用在react中,还与其他界面库一起使用,如V…

3.26 haas506 2.0开发教程-example- 串口控制ESP32-CAM OV2640拍照

haas506串口控制ESP32-CAM OV2640拍照介绍ESP32-CAM开发板硬件连接代码流程代码ESP32-CAM开发板代码HaaS506开发板代码测试ESP32-CAM开发板测试介绍 通过HaaS506串口发送指令,控制ESP32-CAM进行拍照,并将照片储存在SD卡中。ESP32-CAM需要5V供电才能正常…

小程序开发常见问题总结(超实用)

小程序开发常见问题总结(超实用) 文章目录小程序开发常见问题总结(超实用)1.小程序user agent stylesheet问题。2.this.setData is not function错误3.flex布局3.1flex布局原理3.2flex父项属性3.3flex布局子项元素4.自定义组件1.在…

白银k线图基础知识梳理:包覆形态

伦敦银价格走势是国际市场上所有参与者多方合力的结果,这些参与者包括银行、白银商、期货交易商、对冲基金等金融机构、各种法人机构以及个人投资者。一根简单的K线,能够把所有市场参与者博弈的结果展示出来,并且反映出银价运行和变化的各个细…

node后端接收到axios的post请求体为空

node后端接收到axios的post请求体为空??? 使用axios发送post请求,传入了Object格式的参数,在node后端req.body接收到的参数为空,但是网页上抓包检查时,发现请求的body确实是携带了参数的&#x…

【工具】2023开年利器,重写收藏逻辑和内置白板应用的Arc浏览器

目录一、为什么你需要一款新的浏览器?二、重写的收藏夹逻辑三、自带笔记和白板的浏览器四、如何获得Arc浏览器一、为什么你需要一款新的浏览器? 人生漫漫,三年混乱。在经历了这些起伏之后,你一定有一个不断进取的决心。 工欲善其…

如何设置将SAP红灯报错改为黄灯(OBA5 更改消息控制 )

在SAP的业务操作中或者后台配置经常遇到SAP校验报红灯的错误导致业务进行不下去。可以通过OBA5 更改消息控制事务修改消息报错类型,例如把红灯报错改为黄灯,这样业务就可以进行下去了。 举两个例子来说明一下如何配置。 目录 例子1:固定资…

【stl -- 内建函数对象】

目录:前言一、仿函数二、算数仿函数三、关系仿函数四、逻辑仿函数总结前言 概念 stl内建了一些仿函数 分类 算数仿函数、 关系仿函数、 逻辑仿函数 用法 这些仿函数所产生的对象,用法和普通函数完全一样; 使用内建仿函数需要包含头文件 一、…

拉伯证券|A股大涨!外资30分钟爆买百亿!汽车股狂飙

在很多利好音讯的轮番影响下,兔年首个交易日,A股迎来大涨。沪指开盘便站上3300点整数关口,尔后继续高位震动。深证成指、创业板指涨势更甚,到午盘涨幅均超1.5%。 外资继续“高调”抢筹。Choice数据显现,今天开盘仅5分…

Maven基础学习——依赖管理

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址:🔥JavaWeb Java入门篇: 🔥Java基础学习篇 Java进阶学习篇&…

18个 SpringBoot项目中遇到的BUG,你试试

有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。 生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少。 1.启动项目的时候报错 1.E…

从零到一,臻于至善|网易邮箱基于StarRocks 开发大数据平台的实践

作者:网易邮箱 黄贤康。现任职网易邮件事业部资深数据开发工程师,作为主要开发人员参与网易邮箱大数据平台的建立、优化、重构等工作,并取得相当的成效。他长期从事服务端应用及大数据领域的架构研发工作,对相关领域的底层架构、开…

什么是一站式人力资源管理系统?

首先什么是人力资源管理系统?简单来讲,人力资源管理系统就是帮助企业人力资源部门进行日常管理的辅助工具。人力资源部门通常需要负责企业员工管理的各个方面,无论是招聘,培训,考勤还是薪资绩效,都需要企业…

Jmeter使用手册

Jmeter使用手册Jmeter使用手册1.Jmeter安装教程下载地址Jmeter环境变量配置启动应用实例1.Jmeter安装教程下载地址https://jmeter.apache.org/download_jmeter.cgiJmeter环境变量配置新建变量名称:JMETER_HOME值为:D:\work_tools\apache-jmeter-5.5添加到path:%JMETER_HOME%\bi…