Yalmip入门教程(5)-约束条件操作的相关函数

        博客中所有内容均来源于自己学习过程中积累的经验以及对yalmip官方文档的翻译:https://yalmip.github.io/tutorials/

        这篇博客将详细介绍yalmip工具箱中约束条件操作相关函数的用法。

1.约束条件操作的相关函数

1.1 boundingbox函数

        boundingbox函数用于求出一组约束条件中所包含变量的上下限,即提取约束条件中变量的显式边界,使用语法如下:

[B,L,U] = boundingbox(Constraint,options,x)

        其中,Constraint表示约束条件(必要输入),options表示Yalmip设置(可选输入),x表示需要提取边界的变量(可选输入),B为变量x的上下限约束,为lmi变量形式,LU分别表示变量的上下限,均为矩阵形式(可选输出),下面是一个简单的示例:

        例1:使用boundingbox求出约束x²+y²<=4中变量的上下界,并画图展示

sdpvar x y
Ball = x^2+y^2 <= 4;
[Box,L,U] = boundingbox(Ball);
plot(Box,[x y]);
hold on
plot(Ball,[x y],'y')

        运行结果:

 图1 boundingbox函数效果展示

L =

   -2.0000

   -2.0000

U =

    2.0000

    2.0000

        光看上面的例子,可能很难体会到这个函数的作用,但其实这个函数在求解优化问题时是非常有用的。我们知道在求解优化问题的过程中,经常会有非线性项,需要用到大M法将其转为线性项,这时候如果可以确定变量的边界,将会非常有效地提高优化问题求解效率,下面进行举例说明:

例2:有1个0-1变量x和1个大于0的连续变量y相乘,使用大M法将其线性化。

        引入大于0的连续辅助变量z=xy,可以使用变量z和3个辅助约束条件代替这个非线性项:

        z≤Mx,z≤y,z≥y-M(1-x)

        其中M是变量y的一个上界,下面分析一下两者是否等效:

        1)当x=0时,由z=xy可得z=0,由z≤Mx和z≥0同样可得z=0,两者等效;

        2)当x=1时,由z=xy可得z=y,由z≤Mx,z≤y,z≥y-M(1-x)可得z≤y且z≥y,即z=y,两者仍然等效。

        但在实际使用时,M的取值不能太大也不能太小,如果M取值太大,可能会因为浮点数精度的问题造成约束的偏差,也扩大了约束的范围,降低求解效率;如果M取值太小,甚至小于变量y的上界,那可能会改变变量y的取值范围,甚至导致模型不可解(例如,变量y∈[0,100],M取了50,那么约束z≤Mx会将y的范围限制在[0,50]之间,改变了y的取值范围)。

        因此,M最合适的取值就是y的上限,使用boundingbox函数可以方便的求出变量的上界,这就是其作用所在:求出变量的上界之后,如果Yalmip建模时用到了大M法,将会自动使用变量的上界进行等效转换。

1.2 chebyball函数

        chebyball函数用于求解一组约束条件所限定的边界中最大的内切圆(如果有3个或以上的变量,就是内切球以及内切超球体),其基本语法如下:

[xc,r] = chebyball(Constraint,options)

        其中,Constraint表示约束条件,options表示Yalmip选项,xcr分别表示内切圆的圆心坐标和半径。举例说明如下:

例3:已知变量x和y满足约束0≤x≤1,0≤y≤1,画出该范围内最大的圆。

        代码和运行结果如下:

sdpvar x y
Box = -1 <= [x y] <= 1;
[xc,r] = chebyball(Box);
plot(Box);
hold on
plot((x-xc(1))^2 + (y-xc(2))^2 <= r^2,[],'y')

        运行结果:

图2  chebyball函数效果展示 

        例3和例1正好正好是一个逆向过程。

1.3 check函数

        check函数用在约束问题求解之后,用于检查约束条件的满足情况,其基本语法如下:

[pres,dres] = check(F)

        其中,F表示约束条件,presdres分别表示原始约束和对偶约束的残差,残差即为约束实际取值和约束条件边界的偏差值,当约束条件满足时,残差为正数,当约束条件不满足时,残差为负数(具体理论不做介绍,可以使用help check或者自行查找相关理论),举例说明如下:

例4:

sdpvar x
F0 = [x == 1];
F1 = [x == 1.25];
F2 = [0.9 <= x <= 1.2];
F3 = [x >= 2];
optimize(F0);
[pres1,dres1] = check(F1);
[pres2,dres2] = check(F2);
[pres3,dres3] = check(F3);
pres1
pres2
pres3

        运行结果:

pres1 =

   -0.250

pres2 =

    0.1000

pres3 =

    -1

        x实际取值为1,约束条件F1不满足,所以残差为负数,取值为-0.25,约束条件F2满足,所以残差为正数,取值为0.1,约束条件F3不满足,所以残差为负数,取值为-1。在调试代码时check函数可以发挥很大作用。

1.4 dual函数

        dual函数用于求出与约束条件相应的对偶变量,其语法如下:

Z = dual(F)

        其中,F表示约束条件,Z表示其对偶变量的取值。由于该方法是直接获取对偶变量的取值,所以一般都需要优化问题求解成功后才可以使用。首先来看官方文档给出的例子,学习一下dual函数的用法。

例5:求解优化问题后,使用dual函数提取约束条件对应的对偶变量。

A = [-1 2;-3 -4];
P = sdpvar(2,2);
F = [P >= 0, A'*P+P*A <= 0, trace(P) == 1];
optimize(F);
Z2 = dual(F(2));

运行结果:

Z2 =

   1.0e-09 *

    0.8605   -0.1947

   -0.1947    0.0440

        求解优化问题后,使用dual函数就可以求出某个约束条件对应的对偶变量取值。由线性规划的理论可知,如果原问题具有最优解,那么当原问题取得最优解时,其对偶问题也取得最优解,且两个问题的最优目标函数相同,我们用一个例子来验证:

例6:已知一个线性规划的原问题和对偶问题,使用dual函数验证强对偶定理(即原问题的最优解和对偶问题的最优解相同)

        原问题为:

        对偶问题为: 

        matlab代码和运行结果:

sdpvar x1 x2
z = 50*x1 + 100*x2;
F = [ x1 + x2 <= 300 , ...2*x1 + x2 <= 400 , ...x2 <= 500 , x1 >= 0 , x2 >= 0];
optimize(F , -z)
y = dual(F(1:3))
z = value(z)
w = [300 400 250]*y

运行结果:

y =

   100

     0

     0

z =

       30000

w =

       30000

        由结果可知,原问题和对偶问题的最优解相等,满足强对偶定理。

1.5 hull函数

        hull函数用于求出一组约束条件的凸包(convex hull,此处不再做理论介绍,只介绍用法),标准语法如下:

F = hull(F1,F2,...)

        其中F1,F2...表示原始的约束条件,F表示这组约束条件的凸包,官方文档中用图形直观地展示了这个函数的作用:

例7:

sdpvar x y
F1 = [-1 <= x <= 1, -1 <= y <= 1];
F2 = [-1.5 <= x-y <= 1.5, -1.5 <= x+y <= 1.5];
H = hull(F1,F2);
plot(H);hold on
plot(F2);
plot(F1);

运行结果:

图3 约束条件和相应的convex hull 

1.6 vertex函数

        (该函数仅最新版yalmip才有,如果没有去官网下载最新版即可)vertex函数用于求出一组约束的顶点,其标准语法如下:

V = vertex(Constraint,[x])

        其中,Constraint表示约束条件,x表示决策变量,V表示顶点坐标,举例说明如下:

例8:

        二维空间:

x = sdpvar(2,1);
B = [-1 <= x <= 1, sum(x) <= 3/2];
clf
plot(B,[],[],[],sdpsettings('plot.shade',0.1));
hold on;grid on
v = vertex(B,x);
m = plot(v(1,:),v(2,:),'bo');
set(m,'Markersize',10);
set(m,'Markerface','yellow');

        三维空间:

x = sdpvar(3,1);
P = [-1 <= x <= 1, sum(abs(x)) <= 1,sum(x)>=.5]
clf
plot(P,x,[],[],sdpsettings('plot.shade',0.1));
hold on;grid on
v = vertex(P,x);
m = plot3(v(1,:),v(2,:),v(3,:),'bo');
set(m,'Markersize',10);
set(m,'Markerface','yellow');

        运行结果为:

图4 二维约束的顶点

图5 三维约束的顶点

2.调试小技巧,给约束命名

        当所求优化问题比较复杂时,有的时候很难记住每个约束在对应的约束变量中是第几个位置,调试代码时很不方便,这时候可以使用一个:加上一个字符串,就可以给约束命名,用于在约束变量中打上标记。例如:

sdpvar x
Constraints = [(x >= 0):'Positivity',(x <= 1):'Bounded']

        运行结果:

        当需要用到某个约束时,还可以用对应的’Tag’来索引,例如:

sdpvar x
Constraints = [(x >= 0):'Positivity',(x <= 1):'Bounded'];
Constraints('Bounded')

        运行结果:

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

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

相关文章

opencv 进阶13-Fisherfaces 人脸识别-函数cv2.face.FisherFaceRecognizer_create()

Fisherfaces 人脸识别 PCA 方法是 EigenFaces 方法的核心&#xff0c;它找到了最大化数据总方差特征的线性组合。不可否认&#xff0c;EigenFaces 是一种非常有效的方法&#xff0c;但是它的缺点在于在操作过程中会损失许多特征信息。 因此&#xff0c;在一些情况下&#xff0c…

PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132334671 Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization Open…

制作电商网站帮助中心,节省60%的咨询工作量

随着电子商务的快速发展&#xff0c;越来越多的企业选择在网上建立自己的电商平台。然而&#xff0c;一旦电商网站上线&#xff0c;就会面临一系列的问题和挑战。其中一个重要问题是如何有效管理和解答大量用户的咨询和问题&#xff0c;这对于提高用户体验和促进销售至关重要。…

YOLOv5、v8改进:引入SKAttention注意力机制

目录 1.简介 2.YOLOv5改进 2.1增加以下SKAttention.yaml文件 2.2common.py配置 2.3yolo.py配置 1.简介 论文链接&#xff1a;https://arxiv.org/pdf/1903.06586.pdf 最近对卷积神经网络中的“自适应调整感受野”这样的操作很感兴趣&#xff0c;从字面的意思可以理解&…

Spring练习---28 (用户表和角色表分析,角色列表展示,角色层和Dao层的设置,页面展示操作)

84、下面进入我们的业务层面&#xff0c;进入我们的业务层面我们先分析一个东西&#xff0c;我们要分析用户和角色的关系&#xff0c;因为我们只有在分析完用户和角色之间的关系后&#xff0c;我们才知道表的关系&#xff0c;实体的关系 85、现在我们先画一张表&#xff0c;分析…

Apache Doris IP变更问题详解

Apache Doris IP变更问题详解 一、背景二、环境硬件信息软件信息 三、FE恢复3.1 异常日志3.2 获取当前ip3.3 重置ip信息3.4 重置元数据记录3.5 元数据模式恢复3.6 重置fe集群节点3.7 关闭元数据模式重启fe 四、BE恢复4.1 获取当前ip4.2 重置ip信息4.3 重置be集群节点 一、背景 …

vue3 基础知识

vue3创建一个项目 PS D:\code> npm init vuelatestVue.js - The Progressive JavaScript Framework√ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for sta…

WordPress用于您的企业网站的优点和缺点

如今&#xff0c;WordPress 被广泛认为是一个可靠、可扩展且安全的平台&#xff0c;能够为商业网站提供支持。然而&#xff0c;许多人质疑 WordPress 是否是适合企业的平台。 这就是我们创建本指南的原因。通过探索 WordPress 的优点和缺点&#xff0c;您可以确定世界上最受欢…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容&#xff0c;jdk11、jdk17都是LTS长期维护版本&#xff0c;而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

【目标检测中对IoU的改进】GIoU,DIoU,CIoU的详细介绍

文章目录 1、IoU2、GIoU(Generalized Intersection over Union)3、DIoU4、CIoU 1、IoU IoU为交并比&#xff0c;即对于pred和Ground Truth&#xff1a;交集/并集 1、IoU可以作为评价指标使用&#xff0c;也可以用于构建IoU loss 1 - IoU 缺点&#xff1a; 2、对于pred和GT相…

Android Studio导入项目需要做的一些配置

点击项目结构 选择本地安装的SDK、NDK目录 选择java版本 重新加载项目 Clean Project Rebuild Project 选择要构建的版本 可选debug和release 打包apk安装包 打包完成&#xff0c;就可以安装到安卓手机了

【2023最新爬虫】用python爬取知乎任意问题下的全部回答

老规矩&#xff0c;先上结果&#xff1a; 爬取了前200多页&#xff0c;每页5条数据&#xff0c;共1000多条回答。&#xff08;程序设置的自动判断结束页&#xff0c;我是手动break的&#xff09; 共爬到13个字段&#xff0c;包含&#xff1a; 问题id,页码,答主昵称,答主性别,…

Java虚拟机(JVM):堆溢出

一、概念 Java堆溢出&#xff08;Java Heap Overflow&#xff09;是指在Java程序中&#xff0c;当创建对象时&#xff0c;无法分配足够的内存空间来存储对象&#xff0c;导致堆内存溢出的情况。 Java堆是Java虚拟机中用于存储对象的一块内存区域。当程序创建对象时&#xff0c…

Maven之JDK编译问题

IDEA Maven 默认使用 JDK 1.5 编译问题 IDEA 在「调用」maven 时&#xff0c;IDEA 默认都会采用 JDK 1.5 编译&#xff0c;不管你安装的 JDK 版本是 JDK 7 还是 JDK 8 或者更高。这样一来非常不方便&#xff0c;尤其是时不时使用 JDK 7/8 的新特性时。如果使用新特性&#xff…

智能监控系统的守护者:人工智能行为识别技术的崛起与发展

人工智能助力监控系统&#xff1a;行为识别在安全监控中的应用与挑战 摘要&#xff1a; 随着人工智能技术的快速发展&#xff0c;行为识别在监控系统中的应用逐渐成为安全监控领域的重要工具。本文将详细探讨人工智能行为识别技术在监控系统中的应用&#xff0c;以及在实际应用…

乖宝宠物上市,能否打破外资承包中国宠物口粮的现实

近日&#xff0c;乖宝宠物上市了&#xff0c;这是中国宠物行业成功挂牌的第三家公司。同时&#xff0c;昨日&#xff0c;宠物行业最大的盛事“亚洲宠物展”时隔3年&#xff0c;于昨日在上海成功回归。 这两件事情的叠加可谓是双喜临门&#xff0c;行业能够走到今天实属不易&…

报道 | 9月国际运筹优化会议汇总

封面图来源&#xff1a; https://www.pexels.com/zh-cn/photo/1181406/ 九月召开会议汇总&#xff1a; The 96th meeting of the EURO Working Group on Multiple Criteria Decision Aiding (EWG-MCDA) Location: Paris, France Important dates: Conference: September 202…

STP生成树协议

一、STP是什么 STP协议概述生成树协议(spanning tree protocol)&#xff0c;是一种工作在OSI网络模型中第二层(数据链路层)的通信协议&#xff0c;是一种由交换机运行的&#xff0c;基本应用是防止交换机冗余链路产生的环路&#xff0c;用于确保以太网中无环路的逻辑拓扑结构&…

计算机网络-物理层(三)-信道的极限容量

计算机网络-物理层(三)-信道的极限容量 当信号在信道中传输失真不严重时&#xff0c;在信道的输出端&#xff0c;这些信号可以被识别 当信号在信道中&#xff0c;传输失真严重时&#xff0c;在信道的输出端就难以识别 造成失真的因素 码元传输速率信号传输距离噪声干扰传输媒…