非线性规划求解方法:序列线性规划(Sequential linear programming)

news2024/11/25 4:44:47

来源:Cornell University Computational Optimization Open Textbook:SLP​​​​​​​

目录

1.介绍

2.理论和方法

2.1 问题形式

2.1.1 NLP问题形式

2.1.2 SLP问题形式

2.2 步长边界 Step Bounds

2.3 完整的SLP算法

3.案例

3.1 example1

3.2 example2

4.应用​​​​​​​

1.介绍

Sequential linear programming (SLP)序列线性规划也叫successive linear programming,是一个用于解决非线性规划问题non-linear programming (NLP)的数学规划方法。SLP能通过泰勒级数展开将NLP转化为一系列线性规划问题linear programming(LP),LP可以通过单纯形法或求解器求得解。SLP 最早被称为近似规划法approximation programming,由Shell Oil Company的 R. Griffith 和 R. Stewart 于 1961 年开发。SLP可以在不使用通常昂贵的 NLP 求解器且不使用高阶信息的情况下解决 NLP 问题。SLP不一定是最快的NLP求解算法,在 1994 年的 79 个设计问题的集合中,它的性能与带移动渐近线moving asymptotes的凸近似方法convex approximation差不多,比 CONLIN (一个基于凸近似的对偶优化器)差。但它只需使用LP求解器,从成本效益来看更优越,因此至今仍在使用。

2.理论和方法

2.1 问题形式

2.1.1 NLP问题形式

一个通用的NLP问题形式如下,x=\left [ x_{1},x_{2},..., x_{n}\right ]是决策变量,f(x)是目标函数,要求最小化,g(x)和h(x)为约束,x取值有上下界。

2.1.2 SLP问题形式

将NLP问题中的所有约束和目标函数用在点x^{a}处的一阶泰勒展开式代替,转换成SLP问题。这要求 NLP 问题中的函数必须是可微的,SLP 算法才能工作。求解SLP问题获得一个新解x^{a+1},这个新解可能是 NLP 的不可行解,但是不可行的程度会随着迭代次数的增加而降低。

如果NLP的最优解是可行域的一个顶点,那么SLP就会收敛。但是通常情况下不能保证 SLP 会收敛,因为它没有考虑超基本变量superbasic variables,因此在具有许多超基本变量的问题或最优解不在顶点的问题上表现不佳。

超基本变量(superbasic variables)是线性规划中的一个概念,用于描述最优解中的变量状态。在线性规划问题最优解中,有些变量取值是非零的,被称为基本变量(basic variables),而另一些变量的取值为零,则被称为非基本变量(nonbasic variables)。超基本变量是非基本变量中具有潜在优化机会的变量。换句话说,超基本变量是非基本变量中可以通过改变其取值来改善目标函数值的变量。通过将超基本变量移动到基本变量集合中,可以找到更优的解。

为了实现带超基本变量问题的收敛,引入了步长边界step bounds方法 

2.2 步长边界 Step Bounds

x^{a}处的一阶泰勒展开式和原来的非线性函数之间误差会随着x^{a}和某点x^{k}距离增加而增加,因此需要对SLP搜索区域设置上下界,也称为移动限制或步长边界,也就是\alpha <x-x^{a}<\beta。如果步长边界太大,则 SLP 将在很长一段时间内围绕当前最优解振荡;如果步长边界太小,SLP 可能无法找到 NLP 的最优解。由于 SLP 算法的简单性,SLP 的大部分改进都在开发更好的启发式算法和新算法来调整步长边界。以下是一个简单的更新步长边界的算法:

  • 计算:首先计算两个变量q和r,假设x^{a}为旧解,x^{a+1}为新解,那么q代表两个解在NLP问题中的目标值减少量,r代表两个解在SLP问题中的目标值减少量

  • 更新:基于q/r比值来更新步长边界的大小, 如果q/r=1,那么 SLP 问题完美地反映了 NLP 问题。如果q/r接近1,比如0.75\leq q/r\leq 1.25,增加步长边界。如果q/r非常偏移1,比如q/r\leq 0.25,q/r\geq 1.25,减少步长边界。如果为负值,表明对于NLP,x^{a+1}x^{a}更差,拒绝x^{a+1},减少步长边界,SLP用带更小步长边界的x^{a}求解

2.3 完整的SLP算法

3.案例

3.1 example1

给定问题如下,用图表示,阴影部分为可行域,设置停止条件为前面提到的(3)和(4)

 首先对非线性项计算梯度,将g(x1,x2)先写成标准形式,其梯度应该为[-0.5x1+1,-1],资料上写的[-0.5x1,-1],本人认为有误。但是由于案例只是说明过程,因此后面还是按照原本资料计算结果描述。h(x1,x2)为线性函数,不需要展开。使用前面介绍的Step Bounds方法更新边界,初始边界设为16,初始点为x_{1}=1,x_{2}=5

  • 迭代第一次

首先计算在点(1,5)处的梯度,f函数为[6,2],g函数为[-0.5,-1],加入步长边界约束,得到如下在点(1,5)处的SLP模型

求解这个SLP模型,获得最优解:f^{*}=2.5,x_{1}^{*}=0,x_{2}^{*}=3.25,再计算q=4.25-12=-7.75,r=2.5-12=-9.5。所以q/r=0.815,接收这个点,步长边界增加至32。

  • 迭代第二次

同上一次迭代过程, 计算在点(0,3.25)处的梯度,f函数为[4.25,1],g函数为[1,-1],步长边界32

 求解这个SLP模型,获得最优解:f^{*}=4,x_{1}^{*}=0,x_{2}^{*}=3,再计算q=-0.062,r=1.5,q/r=-0.041,拒绝这个点,步长边界减少至16。

  • 迭代第三次

后续迭代会发现找到的新解会一直被拒绝,步长边界不断收缩。这是因为第一次选择的步长边界太大,问题会最终在20次迭代后终止。图上显示了步长分别为16和0.5的求解历史。

3.2 example2

 在example1中,最优解是在定点,因此SLP会经过迭代后收敛,在example2中,最优解不在顶点处,给定下面问题,按照和example1一样的流程,计算梯度用一阶泰勒展开式代替,初始步长边界为16,初始点为(1,5)

  • 迭代第一次 :SLP最优解-3.714,NLP为7.739,(4.375,5.428),q/r=0.022,接收,步长边界减至8

  •  迭代第二次 :SLP最优解-10.060,NLP为11.420,q/r=-0.579,拒绝,步长边界减至4

  

  •   迭代第三次 :SLP最优解-8.965,NLP为8.040,q/r=-0.057,拒绝,步长边界减至2

  •  迭代第四次 :SLP最优解-3.857,NLP为0.623,q/r=49.704,(3.663,3.428),接受,步长边界减至1
  • 迭代第五次 :SLP最优解-0.093,NLP为1.412,q/r=0.209,(2.663,4.139),接受,步长边界减至0.5
  • 迭代第六次 :SLP最优解0.128,NLP为0.0551,(3.163,3.724),之后迭代不会出现比0.0551更优的解

在SLP中,步长边界和更新方式非常重要,会直接用影响结果,因此很多文献都致力于开发更有效的更新方式,比如启发式方法。

4.应用

  • 混合可再生能源系统运营计划:2019年Vaccari和同事用SLP生成了短期运营计划,以满足电力和热负荷要求,最小化运营成本。每个设备都是一个NLP问题。
  • 最优潮流问题Optimal Power Flow (OPF):Mhanna 和 Mancarella 在 2021 年开发了一种 SLP 算法来解决最优潮流问题(非凸和非线性问题)
  • 避障和轨迹规划:Plessen 及其同事在 2017 年通过使用基于空间的问题公式和 SLP 来连续改进规划轨迹,解决了自动驾驶车辆的轨迹规划和避障问题。

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

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

相关文章

数据结构:树状数组详解

一. 背景 那么我们为什么要用树状数组呢? 在解决一些区间求和的问题中 , 简单描述就是&#xff0c;对于一个给定的数组A&#xff0c;希望能够设计一个update函数来修改其中一个数的值&#xff0c;然后再设计一个sum函数来计算数组下标再给定参数l和r之间的值之和。关键点在于…

Docker Swarm 集群搭建和使用 —— 筑梦之路

简单介绍 swarm 集群由管理节点&#xff08;Manager&#xff09;和工作节点&#xff08;Worker&#xff09;构成。 管理节点&#xff1a;主要负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。诸如监控集群状态、分发任务至工作节点等操作。 工作节点&…

【计算机视觉】使用 notebook 展示如何下载和运行 CLIP models,计算图片和文本相似度,实现 zero-shot 图片分类

文章目录 一、CLIP 模型二、准备三、加载模型四、查看图片处理器五、文本分词六、输入图片和文本&#xff0c;并可视化七、将图片和文字 encode 生成特征八、计算 cosine 相似度九、零样本进行图片分类十、编写函数进行图片分类十一、测试自己的函数十二、编写函数对多图片进行…

面对职业发展“迷茫期”除了抱怨焦虑我们还能做什么?

关注“软件测试藏经阁”微信公众号&#xff0c;回复暗号【软件测试】&#xff0c;即可获取氪肝整理的全套测试资源 Java和Python做自动化测试&#xff0c;哪个更有优势&#xff1f;这两个语言都是很流行的语言&#xff0c;所以从技术上很难说谁好谁不好的。因为要说好不好得看…

linux安装homeassistant(智能设备远程控制开源框架)

1、安装docker 先切换到root 用户&#xff0c;先安装一些基本环境&#xff1a; yum install -y yum-utils device-mapper-persistent-data lvm2添加阿里云软件源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo然后安装 D…

QT+OpenGL高级光照 Blinn-Phong和Gamma校正

QTOpenGL高级光照1 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 Blinn-Phong 冯氏光照&#xff1a;视线与反射方向之间的夹角不小于90度&#xff0c;镜面光分量会变成0.0&#xff08;不是很合理&am…

死信队列小结

死信队列是RabbitMQ中非常重要的一个特性。简单理解&#xff0c;他是RabbitMQ对于未能正常消费的消息进行的 一种补救机制。死信队列也是一个普通的队列&#xff0c;同样可以在队列上声明消费者&#xff0c;继续对消息进行消费处理。 对于死信队列&#xff0c;在RabbitMQ中主要…

Spring 是什么?IoC 和 DI的区别

1. Spring 是什么?2. IoC是什么&#xff1f; 2.DI概念说明 1. Spring 是什么? 我们通常讲的Spring指的是Spring Framework(Spring框架),它是一个开源的框架,有着活跃而庞大的社区,这也是它之所谓经久不衰的原因。官方的解读是:Spring官网 翻译过来就是:Spring使Java编程对每…

学会这5个步骤,就能轻轻松松地获取代码覆盖率报告

目录 前言&#xff1a; 1、创建main函数的test文件 2、插桩方式编译源码 3、运行主服务 4、执行测试用例 5、优雅退出主服务&#xff0c;并生成覆盖率报告 前言&#xff1a; 代码覆盖率报告可以帮助我们了解测试用例的质量和覆盖程度。 小编前期所测项目多为go语言研发&…

《C++高级编程》读书笔记(一:C++和标准库速成)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. C 基础知识 1.1 小程序 “hello world” // helloworld.cpp…

开源项目合集......

likeshop开源商城系统&#xff0c;公众号商城、H5商城、微信小程序商城、抖音小程序商城、字节小程序商城、头条小程序商城、安卓App商城、苹果App商城代码全开源&#xff0c;免费商用。 适用场景&#xff1a;B2C商城、新零售商城、社交电商商城、分销系统商城、小程序商城、商…

循环链表的创建

循环链表的介绍及创建&#xff08;C语言代码实现&#xff09; 点击打开在线编译器&#xff0c;边学边练 循环链表概念 对于单链表以及双向链表&#xff0c;其就像一个小巷&#xff0c;无论怎么样最终都能从一端走到另一端&#xff0c;然而循环链表则像一个有传送门的小巷&…

力扣 912. 排序数组

文章目录 一、题目描述二、题解1.快速排序2.堆排序3.二路归并排序 一、题目描述 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5]示例 2&#xff1a; 输入&#xff1a;nums [5,1,1…

精细消费 年轻人和父母的奇妙交汇

日本社会学家三浦展结合对日本“311”大地震后的社会观察&#xff0c;提出了“第四消费时代”&#xff0c;即人们在经历了消费社会充分的发展过程之后&#xff0c;社会上逐渐兴起了低欲望、乐于共享、重视环保的消费理念。 在当时&#xff0c;主流观点普遍认为中国还处于大众化…

JWT单点登录

单点登录 文章目录 单点登录零、用户模块内容以及设计一、问题的提出二、单点登录SSO1.1 什么是单点登录1.2 单点登录的技术实现机制 二、远程调用方式RPC三、JWT的使用3.1 session的使用原理3.2 JWT介绍3.3 JWT原理3.4 JWT的使用 四、CAS实现单点登录的原理四、CAS的安装和代码…

十二、进程间通信

目录 目录 零、前置知识 一、什么是进程间通信 &#xff08;一&#xff09;含义 &#xff08;二&#xff09;发展 &#xff08;三&#xff09;类型 1.管道 2.System V IPC 3.POSIX IPC 二、为什么要有进程间通信 三、怎么进行进程间通信 &#xff08;一&#xff09;…

Snipaste工具推荐

Snipaste Snipaste 不只是截图&#xff0c;善用贴图功能将帮助你提升工作效率&#xff01; 新用户&#xff1f; 截图默认为 F1&#xff0c;贴图为 F3&#xff0c;然后请对照着 快捷键列表 按一遍&#xff0c;体会它们的用法&#xff0c;就入门啦&#xff01; 遇到了麻烦&…

Java通过Ip2region实现IP定位

我们在一些短视频平台上可以看到,视频作者或评论区可以显示IP地址,这其实就是根据IP获取到的我们可以通过一些在线网站就可以看到我们当前的公网IP和IP定位,最近有个需求也需要通过请求获取客户端的IP和IP的定位,于是通过一系列的百度,最终选择使用Ip2region这个工具库来进行定…

flutter的自定义系列雷达图

自定义是flutter进阶中不可缺少的ui层知识点&#xff0c;这里我们来总结下&#xff1a; 在Flutter中&#xff0c;自定义绘制通常是通过使用CustomPaint和CustomPainter来实现的。 创建CustomPaint组件 首先&#xff0c;需要创建一个CustomPaint组件。CustomPaint是一个Widge…

MobPush 厂商通道申请指南

华为厂商申请 创建应用 登录华为开发者联盟&#xff0c;注册您的应用&#xff0c;在应用信息中获取APP ID和Client Secret 配置SHA256证书指纹 在华为开发者联盟配置SHA256证书指纹。获取及配置请参见华为官方文档配置AppGallery Connect 设置消息回执 集成华为厂商通道SDK…