matlab-fmincon函数做优化、optimoptions用法

定义:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

含义:从 x0 开始,尝试在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b、 c(x) ≤ 0 和 ceq(x) = 0 的情况下寻找 fun 中所述的函数的最小值点 x。对 x 中的设计变量定义一组下界和上界,使解始终 lb  x  ub 范围内。

fun:目标函数、需要最小化的函数

x0:初值。x0 可以是标量、向量或矩阵。

A,b:线性不等式 A*x ≤ b的系数矩阵/系数。如果不存在不等式,则设置 A = [] 和 b = []

Aeq,beq:线性等式Aeq*x = beq 的系数矩阵/系数。如果不存在等式,请设置 Aeq = [] 和 beq = []

lb,ub:设计变量的下界和上界,使解始终在 lb  x  ub 范围内。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf

nonlcon: 执行最小化时,满足 nonlcon 所定义的非线性不等式 c(x) 或等式 ceq(x)fmincon 进行优化,以满足 c(x) ≤ 0 和 ceq(x) = 0。如果不存在边界,请设置 lb = [] 和/或 ub = []。如果没有非线性不等式或等式约束,请设置 nonlcon = []

options:使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

同时返回:

  • 描述 fmincon 的退出条件的值 exitflag
  • 提供优化过程信息的结构体 output
  • lambda - 结构体,其字段包含解 x 处的拉格朗日乘数。
  • grad - fun 在解 x 处的梯度。
  • hessian - fun 在解 x 处的黑塞矩阵。请参阅fmincon黑塞函数。

示例:

1、线性不等式约束

 目标函数:Rosenbrock函数的最小化,无约束解为(1,1),最小目标值为0

从点 [-1,2] 开始求最小值,约束为 x(1)+2x(2)≤1。以 A = [1,2] 和 b = 1 为条件,以 Ax <= b 形式表达此约束。(此约束意味着解不会在无约束解 (1,1) 处,因为在此点 x(1)+2x(2)=3>1)

p=1;
q=100;
%目标函数
fun = @(x)(p-x(1))^2 + q*(x(2)-x(1)^2)^2; %x为2维向量
%求最小值
x0 = [-1,2]; %初始值
A = [1,2]; % Ax <= b
b = 1;
x = fmincon(fun,x0,A,b) %局部最小值

求得:

x =

    0.5022    0.2489

2、线性不等式和等式约束

  目标函数:Rosenbrock函数的最小化,无约束解为(1,1),最小目标值为0

从点 [0.5,0] 开始求最小值,约束为 x(1)+2x(2)≤1 和 2x(1)+x(2)=1。

  • 以 A = [1,2] 和 b = 1 为条件,以 A*x <= b 形式表达线性不等式约束。

  • 以 Aeq = [2,1] 和 beq = 1 为条件,以 Aeq*x = beq 形式表达线性等式约束。

    p=1;
    q=100;
    %目标函数
    fun = @(x)(p-x(1))^2 + q*(x(2)-x(1)^2)^2; %x为2维向量
    %求最小值
    x0 = [-1,2]; %初始值
    A = [1,2]; % Ax <= b
    b = 1;
    Aeq=[2,1];
    beq=1;
    x = fmincon(fun,x0,A,b,Aeq,beq) %局部最小值

    x =

        0.4149    0.1701

3、具有边界约束的最小化

目标函数:f(x)=1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1))

约束:关注 x 为正值且满足 x(1)≤1 和 x(2)≤2 的区域。

%目标函数
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
%约束
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
%初值
x0 = (lb + ub)/2;
%求解
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x =

    1.0000    2.0000

使用另一个初始点会得到不同的解。

x0 = x0/5;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x =

   1.0e-06 *

    0.4000    0.4000

4、非线性约束(nonlcon)

在边界约束下求罗森布罗克函数在圆内最小的点,

同时在以 [1/3,1/3] 为圆心、半径为 1/3 的圆内寻找。将以下代码复制到您的 MATLAB® 路径上名为 circlecon.m 的文件中。

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

lb = [0,0.2];
ub = [0.5,0.8];

A = [];
b = [];
Aeq = [];
beq = [];


x0 = [1/4,1/4];

nonlcon = @circlecon;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)


%满足 nonlcon 所定义的非线性不等式 c(x) 或等式 ceq(x)
function [c,ceq] = circlecon(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];

5、非默认选项(optimoptions)

在单位圆盘 ∣∣x∣∣^2≤1 上求罗森布罗克函数的最小值

设置选项以在迭代期间查看输出信息并使用不同算法。

%保存为 unitdisk.m

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

求解:要观察 fmincon 求解过程,请将 Display 选项设置为 'iter'。此外,尝试 'sqp' 算法,该算法有时比默认的 'interior-point' 算法更快或更准确。

options = optimoptions('fmincon','Display','iter','Algorithm','sqp');

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @unitdisk;
x0 = [0,0];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

x =

    0.7864    0.6177

6、使用梯度

将梯度计算加入目标函数中,以实现更快或更可靠的计算。

将梯度计算作为条件化输出包含在目标函数文件中。

目标函数是罗森布罗克函数,

将此代码保存为 MATLAB® 路径上名为 rosenbrockwithgrad.m 的文件。

%建立函数文件
function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;

if nargout > 1 % gradient required
    g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
        200*(x(2)-x(1)^2)];
end

求解:

%创建使用目标函数梯度的选项。

options = optimoptions('fmincon','SpecifyObjectiveGradient',true);

%为问题创建其他输入。然后调用 fmincon。

fun = @rosenbrockwithgrad; %将梯度计算加入目标函数中
x0 = [-1,2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [-2,-2];
ub = [2,2];
nonlcon = [];
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

7、使用问题结构体 (problem)

options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
problem.options = options;
problem.solver = 'fmincon';
problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
problem.x0 = [0,0];

problem.nonlcon = @unitdisk;

x = fmincon(problem)


%% unitdisk 函数
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
end

8、获得解处的目标函数值

fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1));
lb = [0,0];
ub = [1,2];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = (lb + ub)/2;
%获得解处的目标函数值fval
[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
%获取所有输出
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

 官方文档:fmincon - 寻找约束非线性多变量函数的最小值 - MATLAB- MathWorks 中国

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

prop校验,prop和data区别

prop:组件上注册的一些自定义属性 prop作用&#xff1a;向子组件传递数据 特点&#xff1a; 可以传递任意数量&#xff0c;任意类型的prop 父组件 &#xff08;一个个地传递比较麻烦&#xff0c;可以直接打包成一个对象传过去&#xff0c;然后通过点属性接收&#xff09; <t…

K8S containerd拉取harbor镜像

前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI&#xff0c;这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…

ClickHouse的介绍、安装、数据类型

1、介绍和安装 1.1、简介 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用SQL查询实时生成分析数据报告。 OLAP&…

Websocket如何分块处理数据量超大的消息体

若我们服务端一次性最大处理的字节数是1M,而客户端发来了2M的数据&#xff0c;此时服务端的数据就要被切割成两次传输解码。Http协议中有分块传输&#xff0c;而在Websocket也可以分块处理超大的消息体。在jsr356标准中使用javax.websocket.MessageHandler.Partial可以分块处理…

卡尔曼滤波学习资料汇总

卡尔曼滤波学习资料汇总 其实&#xff0c;当初的目的&#xff0c;是为了写 MPU6050 的代码的&#xff0c;然后不知不觉学了那么多&#xff0c;也是因为好奇、感兴趣吧 有些还没看完&#xff0c;之后笔记也会同步更新的 学习原始材料 【卡尔曼滤波器】1_递归算法_Recursive P…

Javaweb-day13事务管理AOP

spring的事务管理&spring框架的第二大核心AOP面向切面编程 spring框架的第一大核心是前面讲的IOC控制反转 事务管理 事务回顾 概念&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。…

JavaWeb后端开发知识储备1

目录 1.DTO/VO/PO 2.MVC架构/微服务架构 3.JWT令牌流程 4.ThreadLocal 5.接口路径/路径参数 6.自定义注解 1.DTO/VO/PO 1.1 DTO DTO 即 Data Transfer Object—— 数据传输对象&#xff0c;是用于传输数据的对象&#xff0c;通常在服务层与表现层之间传递数据&#xff…

BLE 蓝牙客户端和服务器连接

蓝牙通信在设计小型智能设备时非常普遍&#xff0c;之前一直没有使用过&#xff0c;最近使用ardunio ESP32 做了一些实验&#xff0c;做了一个收听播客的智能旋钮&#xff08;Smart Knob&#xff09;&#xff0c;它带有一个旋转编码器和两个按键。 本文介绍BLE 服务器Server和W…

海康威视和大华视频设备对接方案

目录 一、海康威视 【老版本】 【新版本】 二、大华 一、海康威视 【老版本】 URL规定&#xff1a; rtsp://username:password[ipaddress]/[videotype]/ch[number]/[streamtype] 注&#xff1a;VLC可以支持解析URL里的用户名密码&#xff0c;实际发给设备的RTSP请求不支…

STM32设计智能翻译手势识别加算法系统

目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 电路图采用Altium Designer进行设计&#xff1a; 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 在全球化的浪潮下&#xff0c;语言的多样性也为人们的交流带来了不小的挑战…

基本定时器---内/外部时钟中断

一、定时器的概念 定时器&#xff08;TIM&#xff09;&#xff0c;可以对输入的时钟信号进行计数&#xff0c;并在计数值达到设定值的时候触发中断。 STM32的定时器系统有一个最为重要的结构是时基单元&#xff0c;它由一个16位计数器&#xff0c;预分频器&#xff0c;和自动重…

Qt文件目录操作

文件目录操作相关类 Qt 为文件和目录操作提供了一些类&#xff0c;利用这些类可以方便地实现一些操作。Qt 提供的与文件和目录操作相关的类包括以下几个&#xff1a; QCoreApplication&#xff1a;用于提取应用程序路径&#xff0c;程序名等文件信息&#xff1b;QFile&#x…

.NET 通过模块和驱动收集本地EDR的工具

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

css中的box-sizing,记录

border-box&#xff1a;最终高度为height&#xff0c;默认包含padding border等属性 content-box&#xff1a;box-sizing默认值&#xff0c;最终大小为heightpaddingborder 等

【AI绘画】Alpha-VLLM 的 Lumina-Next:新一代图像生成器

简介 Lumina-Next-T2I 是在 Lumina-T2I 成功基础上发展起来的尖端图像生成模型。它采用了带有 2B 参数模型的 Next-DiT 和 Gemma-2B 文本编码器&#xff0c;推理速度更快&#xff0c;生成样式更丰富&#xff0c;并增强了多语言支持。 模型架构 Lumina-Next-T2I 的生成模型建…

Redis学习 ——缓存

文章目录 一、Redis缓存的介绍二、Redis缓存问题2.1 缓存穿透2.2 缓存击穿2.3 缓存雪崩2.4 双写一致性2.5 缓存持久化RDBAOF 三、缓存数据管理3.1 数据过期策略3.2 数据淘汰策略 一、Redis缓存的介绍 我们在日常的代码编写中比较少使用到Redis&#xff0c;但是如果涉及到了比较…

【阅读记录-章节2】Build a Large Language Model (From Scratch)

目录 2.Working with text data2.1 Understanding word embeddings2.2 Tokenizing text通过一个简单的实验来理解文本的词元化概念关键概念 2.3 Converting tokens into token IDs实现分词器类&#xff08;Tokenizer Class&#xff09;应用分词器测试文本的编码与解码通过分词器…

etcd部署(基于v3.5.15)

etcd部署 单节点部署下载etcd&#xff0c;解压etcd二进制包&#xff0c;并进入解压后目录创建数据目录移动可执行文件到/usr/local/bin/目录测试版本配置systemd管理启动etcd&#xff0c;设置开机启动验证 集群部署(3节点)环境准备准备3台服务器配置3台服务器hosts配置3台服务器…

HTML5实现趣味飞船捡金币小游戏(附源码)

文章目录 1.设计来源1.1 主界面1.2 游戏中界面1.2 飞船边界框效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/143799554 HTML5实现趣味飞船捡金币小游戏(附源码)&…

ASP.NET Core Webapi 返回数据的三种方式

ASP.NET Core为Web API控制器方法返回类型提供了如下几个选择&#xff1a; Specific type IActionResult ActionResult<T> 1. 返回指定类型&#xff08;Specific type&#xff09; 最简单的API会返回原生的或者复杂的数据类型&#xff08;比如&#xff0c;string 或者…