基于二次近似(BLEAQ)的双层优化进化算法_matlab程序

news2024/11/26 10:39:59

参考文献如上。

双层优化问题是一类具有挑战性的优化问题,包含两个层次的优化任务。在这些问题中,下层问题的最优解成为上层问题的可能可行候选。这样的要求使得优化问题难以解决,并使研究人员忙于设计能够有效处理该问题的方法。尽管付出了努力,但几乎没有任何有效的方法能够处理复杂的双层问题。本文介绍了基于最优下层变量相对于上层变量的二次近似的双层进化算法。该方法能够在相对较少的函数求值中处理具有不同复杂性的两层问题。来自经典优化的思想已经与进化方法混合,为一大类双层问题生成了一个有效的优化算法。在两组测试问题上对算法的性能进行了评估。第一组是最近提出的SMD测试集,其中包含复杂性可控的问题,第二组包含从文献中收集的标准测试问题。已经将所提出的方法与三个基准进行了比较,并且观察到性能增益是显著的。与论文相关的代码可以从网站上获取。

双层优化是优化的一个分支,它包含一个嵌套在外部优化问题约束下的优化问题。外部优化任务通常被称为上层优化问题,内部优化任务被称为下层优化问题。下层问题作为约束出现,使得只有下层优化问题的最优解才是上层优化问题的可能可行候选。这样的要求使得两级优化问题难以处理,并使研究人员和实践者同样忙碌。分层优化结构可能会带来一些困难,如非凸性和不可连接性,甚至对于更简单的两层优化,如两层线性规划问题。已知双层线性规划是强NP难的(汉森,贾马尔,萨瓦德,1992),已经证明,仅仅评估最优解也是一个NP难的任务。这给了我们一个关于复杂(非线性、非凸、不连续等)的双层问题所带来的挑战的概念。)目标和约束函数。

本文中,我们提出了一种混合策略,它将经典双层规划的思想运用到进化算法中。已经讨论了一些现有的数学结果,作为设计进化算法的动机。该方法是一种基于下层最优变量的二次近似作为上层变量函数的双层进化算法。本文提出的算法不是针对可以用精确方法解决的问题,而是针对由于前面提到的现实困难而导致精确方法失败的问题。在我们的研究中选择的大多数测试问题不能用经典的双层规划算法来解决,另一方面,单独使用进化算法以嵌套的方式来解决它们将被证明在计算上非常昂贵。已经进行了计算研究来证明我们的主张。

双层优化是一个包含两层优化任务的嵌套优化问题。双层优化问题的结构要求下层优化问题的最优解只能作为上层优化问题的可行候选。

算法说明

我们将我们的算法称为基于二次近似(BLEAQ)的双层进化算法。该算法从包含随机上层变量的上层成员的初始种群开始。对于每个成员,使用较低级别的优化方案解决较低级别的优化问题,并记录最佳的较低级别成员。在得到的下层最优解的基础上,建立上层变量和下层最优变量之间的局部二次关系。如果近似值很好(根据均方误差 1 ),那么它可以用于预测任何给定的上层变量集的最优下层变量。这消除了解决较低级别优化问题的要求。然而,在接受二次逼近的最优解时需要谨慎,因为即使是单一的差解也可能导致错误的二阶最优解。在算法的每一代中,都会生成新的二次近似值,随着总体趋于真正的最优值而不断改进。在程序结束时,该算法不仅提供了双层问题的最优解,而且还提供了表示接近最优值的上下变量之间关系的可接受的精确函数。

步骤:

  1. 初始化:算法从大小为 N 的种群开始,通过随机生成所需数量的上层变量进行初始化,然后执行下层进化优化程序以确定相应的最优下层变量。 适应度是根据上层函数值和约束来分配的
  2. 标记:将所有上层成员标记为 1,其中已经成功进行了下层优化运行,其他标记为 0。

3.上层父代的选择:从当前N大小的人群中,选择最好的标签1成员作为父代2之一。从当前人口中随机选择2(μ1)名成员,并根据上层适应值进行锦标赛选择,以选择剩余的μ1名家长。

4.上层进化:将最好的tag 1成员作为index parent,将上一步的成员作为其他parent。 然后,使用交叉和多项式变异算子从所选的 μ 父母创建 λ 后代。

5.评估后代:在这一步中,我们通过二次近似或执行较低级别的优化来确定后代的较低级别变量。 如果种群中标签 1 成员的数量大于 nc = (n +1)(n +2) 2 + n 并在后代周围形成一个凸包,则为该后代计算最佳较低水平 通过步骤 5a 的变量; 否则转至步骤 5b。

步骤 5a :

二次逼近:形成一个由 n c 最近的 3 个标签 1 成员组成的池,这些成员在二次逼近 4 的后代周围形成一个凸包。 使用选定的 n c 个成员来获得 ψ loc 的二次近似 ˆψ(详细信息请参阅第 5.1 节)。 使用二次近似来获得对应于后代的较低水平的变量。 如果近似的均方误差 e mse (参见第 5.1.1 节)小于参数 e 0 ,则认为二次近似是好的,后代标记为 1,否则标记为 0 .

步骤 5b :

下层优化:为了对后代成员执行下层优化,确定最接近的(再次使用上层变量根据欧几里德距离测量)标签 1 父代。 从最接近的标签 1 父级,复制较低级别的最佳成员( y ( c ) )(请参阅第 5.2 节)。 此后,使用以(y(c))为起点的二次规划方法对后代执行较低级别的优化。 如果二次规划不适用,请使用进化优化算法来解决问题。 复制的较低级别成员 ( y ( c ) ) 用作较低级别进化优化运行中的种群成员。 将后代标记为 1,其较低级别的优化成功终止。 结合每个后代的上层和下层变量(从步骤 5a 或 5b 获得)并找到其在上层的适应度。

6 种群更新:找到后代的较低级别变量后,从父种群中选择 r 个成员。 形成了一个由选定的 r 个成员和 λ 个后代组成的池。 池中最好的 r 个成员替换从总体中选择的 r 个成员。 执行终止检查(请参阅第 5.6 节)。 如果终止检查为假,则算法移至下一代(步骤 3)。

算例:

上层:

算例中,上层优化目标为:

变量为:x1,x2,y1,y2

约束为:x1+2x2>=30 

x1+x2<=25

x2<=15 

0<=y1<=10

0<=y2<=10

下层:

算例中,下层优化目标为:

变量为:x1,x2,y1,y2

约束为:x1+2x2>=30 

x1+x2<=25 

x2<=15 

0<=y1<=10

0<=y2<=10

计算最优解结果:

程序如下:

部分程序:

ulPopSize=50;                    % Size of UL population
ulMaxGens=2000;                  % Maximum number of generations allowed at UL
ulDim=2;                         % Number of UL dimensions

llPopSize=50;                    % Size of LL population
llMaxGens=2000;                  % Maximum number of generations allowed at LL
llDim=2;                         % Number of LL dimensions

ulDimMin = [-30 -30];            % Minimum value accross UL dimensions
ulDimMax = [30 15];              % Maximum value accross UL dimensions

llDimMin = 0*ones(1,llDim);      % Minimum value accross LL dimensions
llDimMax = 10*ones(1,llDim);     % Maximum value accross LL dimensions

ulStoppingCriteria = 1e-4;
llStoppingCriteria = 1e-5;
。。。。。。。。。略

 详细程序转:https://download.csdn.net/download/weixin_47365903/76649200

程序运算结果:

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

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

相关文章

Redis常见面试问题总结

文章目录Redis 基础面试说说你对Redis的了解?说说Redis中的数据类型&#xff1f;说说Redis数据类型对应的数据结构&#xff1f;说说Redis对应的Java客户端有哪些&#xff1f;说说Redis 中持久化发生了什么&#xff1f;说说Redis中持久化以及方式&#xff1f;如何理解Redis中RD…

2022年超实用的推特营销策略

Twitter推广需知的13条基础知识&#xff1a; 1、Twitter日活用户达1亿 2、Twitter月活用户3.25亿 3、Twitter广告价格比其他渠道便宜33% 4、每天产生5亿条推文 5、Twitter推广能够提高29%的线下交易 6、37%的Twitter用户在18到29岁之间 7、86%的带链接推文会比普通推文效…

JUC并发编程与源码分析笔记03-CompletableFuture

Future接口理论知识复习 Future接口&#xff08;FutureTask实现类&#xff09;定义了操作异步任务执行的一些方法&#xff0c;如获取异步任务的执行结果、取消任务的执行、判断任务是否被取消、判断任务执行是否完毕等。 找到java.util.concurrent.Future&#xff0c;看到里面…

Node.js 入门教程 22 将所有 Node.js 依赖包更新到最新版本

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程22 将所有 Node.js 依赖包更新到最新版本22 将所有 Node.js 依赖包更新到最新版本 当使用 npm install <packagename&g…

pytorch 手写数字识别1

目录 概述 加载图片 绘图部分 backward 前言&#xff1a; 这里以一个手写数字识别的例子,简单了解一下pytorch 实现神经网络的过程. 本章重点讲一下加载数据过程 参考&#xff1a; 课时9 手写数字识别初体验-1_哔哩哔哩_bilibili Pytorch中的backward函数 - …

为了让线上代码可追溯, 我开发了这个vite插件

人生的第一个vite插件 前言 想在控制台输出一下前端代码的一些构建信息&#xff0c; 比如打包时间、打包的人, 代码分支、commit是那个&#xff0c;方便在控制台追溯。 背景 遇到的问题 1、场景一 前端多人协同开发的情况下&#xff0c;比方测试站&#xff0c; 你发的代码…

Java 反射系列 —— 学习笔记

Java 反射系列 1. 类成员 为了更好的描述&#xff0c;我们做个约定个通配符 XXXX&#xff0c; 如果是成员变量就代表 Field&#xff0c;如果是类方法就代表 Method&#xff0c;如果是构造器就代表 Constructor。 1.1 获取方法 那么怎么获取到这三类成员呢&#xff1f; 获…

逆势涨薪3k!新媒体运营毅然转行测试,我的入行秘籍是什么?

不尝试永远都不会成功&#xff0c;勇敢的尝试是成功的一半。 大学毕业做运营&#xff0c;业务难精进&#xff0c;薪资难提升 “你大学专业是商务英语&#xff0c;为什么毕业后会选择做新媒体运营呢&#xff1f;” 其实我当时没有想那么多的&#xff0c;商务英语的就业方向一个…

苹果电容笔值得买吗?2022最新电容笔推荐

如今&#xff0c;许多人都喜欢用IPAD来学习记录&#xff0c;或是安静地作画。很多ipad的用户&#xff0c;都很重视它的实用性&#xff0c;因为他们发现&#xff0c;如果有一款功能不错的电容笔来搭配ipad&#xff0c;那么ipad的实用性就会得到极大的提高。事实上&#xff0c;如…

开发 Chrome 扩展程序的利弊

作为一名软件开发人员,您总是希望从事能够提高您的技术技能并赚钱的项目。有什么比开发现金流 chrome 扩展程序更好的方法呢? 在本文中,我将从软件开发人员的角度概述开发 chrome 扩展程序的一些优点和缺点。 开发 Chrome 扩展程序的好处 Chrome 扩展程序是软件开发人员接…

基于遗传算法与神经网络的测井预测(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

【序列召回推荐】(task4)多兴趣召回MIND模型

note Hinton在2011年提出的capsule network&#xff0c;通过EM期望值最大化算法&#xff0c;用动态路由代替反向传播进行更新参数&#xff0c;学习不同capsule之间的连接权重&#xff0c;实现比CNN更优秀的空间关系建模效果&#xff08;CNN可能对同一个图像的旋转版本识别错误…

Java笔记(十四)

文献种类&#xff1a;专题技术总结文献 开发工具与关键技术&#xff1a; IntelliJ IDEA、Java 语言 作者&#xff1a; 方建恒 年级&#xff1a; 2020 撰写时间&#xff1a; 2022 年 11 月 28 日 Java笔记(十四) 今天我给大家继续分享一下我的Java笔记&#xff0c; 我们继续来…

终于读完了阿里云p9专家分享云原生Kubernetes全栈架构师实战文档

都说程序员工资高、待遇好&#xff0c; 2022 金九银十到了&#xff0c;你的小目标是 30K、40K&#xff0c;还是 16薪的 20K&#xff1f;作为一名 Java 开发工程师&#xff0c;当能力可以满足公司业务需求时&#xff0c;拿到超预期的 Offer 并不算难。然而&#xff0c;提升 Java…

Linux便捷操作

1. Tab 这是你不能没有的 Linux 快捷键。它将节省你 Linux 命令行中的大量时间。 只需要输入一个命令&#xff0c;文件名&#xff0c;目录名甚至是命令选项的开头&#xff0c;并敲击 tab 键。它将自动完成你输入的内容&#xff0c;或为你显示全部可能的结果。 如果你只记一个…

中国住宅设施杂志中国住宅设施杂志社中国住宅设施编辑部2022年第9期目录

景观园林《中国住宅设施》投稿&#xff1a;cnqikantg126.com 市政园林景观工程施工项目管理的基本方法与措施 蒋伟;刘巍;张辉; 1-3 低成本风景园林设计与相关问题分析 魏小静; 4-6 城市文化公园景观设计探究——以临夏河州牡丹文化公园为例 姜丽; 7-9 建筑设计 …

一文读懂:低代码和无代码的演进历程、应用范围

低代码和无代码技术的演进发展 整个软件开发的演进路径大致可以分为四个阶段&#xff1a;第一代程序设计语言&#xff1b;第二代是汇编语言&#xff1b;第三代是现在常见的高级语言&#xff0c;比如 Python、Java 等&#xff1b;第四代就是低代码和无代码技术。低代码、无代码…

Pro_11丨跟踪+目标出场自适应切换

量化策略开发&#xff0c;高质量社群&#xff0c;交易思路分享等相关内容 『正文』 ˇ 大家好&#xff0c;今天我们分享第11期策略——跟踪目标出场自适应切换策略。本期策略是2022年度倒数第2期策略&#xff0c;2023年度松鼠俱乐部内容会更加丰富&#xff0c;12月出预告敬请…

【Vagrant】使用 Vagrant 快速创建多台 centos7 虚拟机

问题场景&#xff1a; 最近在学习数据库的主从复制&#xff0c;因此需要安装两个虚拟机&#xff0c;一个放主数据库&#xff0c;一个放从数据库&#xff08;不会用 Docker ,咱就多搭几个虚拟机吧 &#xff09;&#xff0c;因此记录使用 Vagrant 快速搭建两个 CentOS 7 的教程&a…

Python海龟turtle基础知识大全与画图集合

Turtle图形库 Turtle 库是 Python 内置的图形化模块&#xff0c;属于标准库之一&#xff0c;位于 Python 安装目录的 lib 文件夹下&#xff0c;常用函数有以下几种&#xff1a; 一.Turtle绘图的基础知识 画布是turtle用于绘图区域&#xff0c;我们可以设置它的大小和初始位置。…