最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等,同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为:

  1. 写标准型
  2. 描述目标函数:M-函数或匿名函数
  3. fminunc()fmincon()等函数求解原问题。
  4. 检验得出的解,如随机变换求解的初值,观察是否能得到更好的解。
  5. 传统最优化方法的最大问题是无法保证得到全局最优解,可以考虑调用matlab的进化算法,如遗传算法和粒子群算法来求解原问题。

1. 无约束最优化问题求解-fminsearch()

无约束最优化问题一般描述为:

min ⁡ x f ( x ) \min _{\boldsymbol{x}} f(\boldsymbol{x}) xminf(x)

我们的目标是选取合适的 x \boldsymbol{x} x(一个向量)使得目标函数 f ( x ) f(\boldsymbol{x}) f(x)的值最小,最小化是最优化问题的通用描述,如果要求解最大化问题,可以给目标函数 f ( x ) f(\boldsymbol{x}) f(x)添加一个负号转化为求解最小值问题。

matlab提供了基于单纯形法求解无约束的函数的fminsearch(),该函数调用格式为

[ x , f opt  , key , c ] =  fminsearch (Fun  , x 0 ,  options,附加参数 ) \left.\left[\boldsymbol{x}, f_{\text {opt }},\text {key},\text {c}\right]=\text { fminsearch (Fun }, \boldsymbol{x}_{0}, \text { options,\text{附加参数}}\right) [x,fopt ,key,c]= fminsearch (Fun ,x0, options,附加参数)

其中

  • Fun \text{Fun} Fun:要求解问题的数学描述,是一个matlab函数也可以是是一个函数句柄;
  • x 0 \boldsymbol{x}_{0} x0:自变量的起始搜索点,需要用户自己定义;
  • x \boldsymbol{x} x:寻找到最优值下的自变量的结果。
  • f o p t {f}_{\mathrm{opt}} fopt:最优化的目标函数结果。
  • key \text{key} key:函数返回的条件,正整数表示已经求解方程的解。而0或负整数表示未搜索到方程的解;
  • c \text{c} c:解的附加信息,该变量是一个结构体变量,包含 + iteration: 迭代的次数; + funcCount: 目标函数的调用次数

另外matlab最优化工具箱提供fminunc()fminsearch()的功能很像,有时候求解无约束最优化问题可以选择该函数。

1.1 例子

我们现在考虑二元函数

min ⁡ x , y f ( x , y ) = ( x 2 − 2 x ) e − x 2 − y 2 − x y \min _{{x,y}}f(x,y)=(x^2-2x)\mathrm{e}^{-x^2-y^2-xy} x,yminf(x,y)=(x22x)ex2y2xy


我们需要做变量代换:令 x 1 = x x_1=x x1=x x 2 = y x_2=y x2=y x = [ x 1 , x 2 ] T \boldsymbol{x}=[x_1,x_2]^T x=[x1,x2]T,于是转化目标函数为:

f ( x ) = ( x 1 2 x 1 ) e − x 1 2 − x 2 2 − x 1 x 2 f(\boldsymbol{x})=(x_1^2x_1)\mathrm{e}^{-x_1^2-x_2^2-x_1x_2} f(x)=(x12x1)ex12x22x1x2

f=@(x)(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-x(1)*x(2));
x0=rand(2,1);[x,f1]=fminsearch(f,x0)

解得:

在这里插入图片描述

2. 有约束最优化问题求解-fmincon()

min ⁡ x f ( x )  s.t.  { A x ⩽ B A e q x = B e q x m ⩽ x ⩽ x M C ( x ) ⩽ 0 C e q ( x ) = 0 \min _{\boldsymbol{x}} f(\boldsymbol{x})\\ \text { s.t. }\left\{\begin{array}{l} \boldsymbol{A} \boldsymbol{x} \leqslant \boldsymbol{B} \\ \boldsymbol{A}_{\mathrm{eq}} \boldsymbol{x}=\boldsymbol{B}_{\mathrm{eq}} \\ \boldsymbol{x}_{\mathrm{m}} \leqslant \boldsymbol{x} \leqslant \boldsymbol{x}_{\mathrm{M}} \\ \boldsymbol{C}(\boldsymbol{x}) \leqslant \mathbf{0} \\ \boldsymbol{C}_{\mathrm{eq}}(\boldsymbol{x})=\mathbf{0} \end{array}\right. xminf(x) s.t.  AxBAeqx=BeqxmxxMC(x)0Ceq(x)=0

可以看到约束可以是线性等式约束(第1个式子)也可以是线性不等式约束(第2个式子),可以是有界约束(第3个式子),还可以是非线性约束(第4个和第5个式子)。在matlab里提供了一个fmincon()函数,专门用于求解各种约束下的最优化问题,其调用方式为:

[ x , f opt , key,c ] = fmincon ( Fun , x 0 , A , B , A e q , B e q , x m , x M , CFun,OPT ) \left[\boldsymbol{x}, f_{\text {opt}}, \text {key,c}\right]=\text {fmincon}\left(\text {Fun}, \boldsymbol{x}_{0}, \boldsymbol{A}, \boldsymbol{B}, \boldsymbol{A}_{\mathrm{eq}}, \boldsymbol{B}_{\mathrm{eq}}, \boldsymbol{x}_{\mathrm{m}}, \boldsymbol{x}_{\mathrm{M}}, \text {CFun,OPT}\right) [x,fopt,key,c]=fmincon(Fun,x0,A,B,Aeq,Beq,xm,xM,CFun,OPT)

其中

  • Fun \text{Fun} Fun:给目标函数写的m-函数;
  • x 0 \boldsymbol{x}_{0} x0:自变量的起始搜索点,需要用户自己定义;
  • 线性约束如果不存在用空矩阵来占位
  • x \boldsymbol{x} x:寻找到最优值下的自变量的结果。
  • f o p t {f}_{\mathrm{opt}} fopt:最优化的目标函数结果。
  • CFun \text{CFun} CFun:给非线性函数写的m-函数;
  • OPT \text{OPT} OPT:控制选项。
    如果在最优化过程中发现找不到可行解,在求解结束后将给出提示:No feasible solution found

有约束优化还有几种特殊的方式,如线性规划、二次型规划问题,可以使用工具箱的linprog()quadprog()函数直接求解。此外,整数规划、0-1规划等问题可以由专门的工具求解,下面给出一般非线性规划问题的最优化求解。

2.1 例子1

min ⁡ x 0.6224 x 1 x 2 x 3 x 4 + 1.7781 x 2 x 3 2 + 3.1661 x 1 2 x 4 + 19.84 x 1 2 x 3 )  s.t.  { 0.0193 x 3 − x 1 ≤ 0 0.00954 x 3 − x 2 ≤ 0 750 × 1728 − π x 3 2 x 4 − 4 π x 3 3 / 3 ≤ 0 x 4 − 240 ≤ 0 0.0625 ≤ x 1 , x 2 ≤ 6.1875 , 10 ≤ x 3 , x 4 ≤ 200 \min _{\boldsymbol{x}} 0.6224x_1x_2x_3x_4+1.7781x_2x_3^2+3.1661x_1^2x_4+19.84x_1^2x_3)\\ \text { s.t. }\left\{\begin{array}{l} 0.0193x_3-x_1\le0\\ 0.00954x_3-x_2\le0\\ 750\times 1728-\pi x_3^2x_4-4\pi x_3^3/3\le0 x_4-240\le0\\ 0.0625\le x_1,x_2\le 6.1875,10\le x_3,x_4\le 200 \end{array}\right. xmin0.6224x1x2x3x4+1.7781x2x32+3.1661x12x4+19.84x12x3) s.t.  0.0193x3x100.00954x3x20750×1728πx32x44πx33/30x424000.0625x1,x26.1875,10x3,x4200


main

% 定义目标函数
f=@(x)0.6224*x(1)*x(2)*x(3)*x(4)+1.7781*x(2)*x(3)^2+3.1661*x(1)^2*x(4)+19.84*x(1)^2*x(3);
% 定义求解条件
xm=[0.0625,0.0625,10,10];
xM=[6.1875,6.1875,200,200];
A=[];
B=[];
Aeq=[];
Beq=[];
x0=(xm+xM)/2;
ff=optimset;
ff.Tolx=1e-10;
ff.TolFun=1e-20;
[x,f]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@constraint,ff)

由于约束函数要返回两个变量:等式约束 c e q \mathrm{ceq} ceq和不等式约束 c \mathrm{c} c。这里便不能用匿名函数来定义,原问题只有不等式约束,没有等式约束,所以返回的是空矩阵
constraint

% 定义非线性约束
function [c,ceq] = constraint(x)
c=[0.0193*x(3)-x(1);
    0.00954*x(3)-x(2);
    750*1728-pi*x(3)^2*x(4)-4*pi*x(3)^3/3;
    x(4)-240];
ceq=[];
end

运行main函数,最后我们得到的是:

在这里插入图片描述

有时候我们可能找不到最优解,这时候我们会提示:

Maximum number of function evaluations exceeded:
increase options.MaxFunEvals

这时候我们可能需要改进搜索的初值,或者修改控制参数OPT,再进行寻优,得到期望的最优值。

2.2 例子2

min ⁡ q , w , k k  s.t.  { q 3 + 9.625 q 1 w + 16 q 2 w + 16 w 2 + 12 − 4 q 1 − q 2 − 78 w = 0 16 q 1 w + 44 − 19 q 1 − 8 q 2 − q 3 − 24 w = 0 2.25 − 0.25 k ≤ q 1 ≤ 2.25 + 0.25 k 1.5 − 0.5 k ≤ q 2 ≤ 1.5 + 0.5 k 1.5 − 1.5 k ≤ q 3 ≤ 1.5 + 1.5 k \min _{\boldsymbol{q},w,k} k\\ \text { s.t. }\left\{\begin{array}{l} q_3+9.625q_1w+16q_2w+16w^2+12-4q_1-q_2-78w=0\\ 16q_1w+44-19q_1-8q_2-q_3-24w=0\\ 2.25-0.25k\le q_1\le 2.25+0.25k\\ 1.5-0.5k\le q_2\le 1.5+0.5k\\ 1.5-1.5k\le q_3\le 1.5+1.5k \end{array}\right. q,w,kmink s.t.  q3+9.625q1w+16q2w+16w2+124q1q278w=016q1w+4419q18q2q324w=02.250.25kq12.25+0.25k1.50.5kq21.5+0.5k1.51.5kq31.5+1.5k

我们首先需要对变量做替换:

x 1 = q 1 , x 2 = q 2 , x 3 = q 3 , x 4 = w , x 5 = k x_1=q_1,x_2=q_2,x_3=q_3,x_4=w,x_5=k x1=q1,x2=q2,x3=q3,x4=w,x5=k

并且需要对不等式重新进行整理:

min ⁡ x x 5  s.t.  { x 3 + 9.625 x 1 x 4 + 16 x 2 x 4 + 16 x 4 2 + 12 − 4 x 1 − x 2 − 78 x 4 = 0 16 x 1 x 4 + 44 − 19 x 1 − 8 x 2 − x 3 − 24 x 4 = 0 − 0.25 x 5 − x 1 ≤ − 2.25 x 1 − 0.25 x 5 ≤ 2.25 − 0.5 x 5 − x 2 ≤ − 1.5 x 2 − 0.5 x 5 ≤ 1.5 − 1.5 x 5 − x 3 ≤ − 1.5 x 3 − 1.5 x 5 ≤ 1.5 \min _{\boldsymbol{x}} x_5\\ \text { s.t. }\left\{\begin{array}{l} x_3+9.625x_1x_4+16x_2x_4+16x_4^2+12-4x_1-x_2-78x_4=0\\ 16x_1x_4+44-19x_1-8x_2-x_3-24x_4=0\\ -0.25x_5-x_1\le-2.25\\ x_1-0.25x_5\le 2.25\\ -0.5x_5-x_2\le-1.5\\ x_2-0.5x_5\le 1.5\\ -1.5x_5-x_3\le-1.5\\ x_3-1.5x_5\le 1.5\\ \end{array}\right. xminx5 s.t.  x3+9.625x1x4+16x2x4+16x42+124x1x278x4=016x1x4+4419x18x2x324x4=00.25x5x12.25x10.25x52.250.5x5x21.5x20.5x51.51.5x5x31.5x31.5x51.5

原问题有两个非线性等式约束,没有不等式约束。非线性约束条件描述
constraint

function [c,ceq] = constraint(x)
c=[];
ceq=[x(3)+9.625*x(1)*x(4)+16*x(2)*x(4)+16*x(4)^2+12-4*x(1)-x(2)-78*x(4);
16*x(1)*x(4)+44-19*x(1)-8*x(2)-x(3)-24*x(4)];
end

线性不等式约束我们写作 A x ≤ b \mathbf{Ax}\le \mathbf{b} Axb,其中:

A = [ − 1 0 0 0 − 0.25 1 0 0 0 − 0.25 0 − 1 0 0 − 0.5 0 1 0 0 − 0.5 0 0 − 1 0 − 1.5 0 0 1 0 − 1.5 ] , b = [ − 2.25 2.25 − 1.5 1.5 − 1.5 1.5 ] \mathbf{A}=\begin{bmatrix} -1& 0& 0 & 0 & -0.25\\ 1& 0 & 0 & 0 & -0.25\\ 0 & -1 & 0 & 0 & -0.5\\ 0 & 1 & 0 & 0 & -0.5\\ 0 & 0 & -1 & 0 & -1.5\\ 0 & 0 & 1 &0 &-1.5 \end{bmatrix},\mathbf{b}=\begin{bmatrix} -2.25\\ 2.25 \\ -1.5 \\ 1.5\\ -1.5 \\ 1.5 \end{bmatrix} A= 1100000011000000110000000.250.250.50.51.51.5 ,b= 2.252.251.51.51.51.5

该问题没有线性等式约束,也没有决策变量的下界和上界约束,所以可以将这些约束用空矩阵表示:

main

f=@(x)x(5);
xm=[];
xM=[];
A=[-1,0,0,0,-0.25;1,0,0,0,-0.25;0,-1,0,0,-0.5;0,1,0,0,-0.5;0,0,-1,0,-1.5;0,0,1,0,-1.5];
B=[-2.25;2.25;-1.5;1.5;-1.5;1.5];
Aeq=[];
Beq=[];
x0=2*rand(5,1);

[x,f]=fmincon(f,x0,A,B,Aeq,Beq,xm,xM,@constraint)

求解的时候很可能求出局部最优解 x 5 = 1.1448 x_5=1.1448 x5=1.1448,多调用几次就会得到全局最优解 x = [ 2.4544 , 1.9088 , 2.7263 , 1.3510 , 0.8175 ] T \boldsymbol{x}=[2.4544,1.9088,2.7263,1.3510,0.8175]^T x=[2.4544,1.9088,2.7263,1.3510,0.8175]T,目标函数为 0.8175 0.8175 0.8175

在这里插入图片描述

在这里插入图片描述
参考资料:
[1] 薛定宇.《控制系统仿真与计算机辅助设计》.第3版

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

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

相关文章

【从删库到跑路】MySQL系列——详细讲解SQL的DDL,DML,DQL,DCL语句

🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【如愿】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 文章目录 🍔关系型数据库⭐概念⭐特点 🍔MySQL数…

开发工具-网络测试工具 POSTMAN 的脚本使用

开发工具-网络测试工具 POSTMAN 的脚本使用 postman 脚本应用基础设置变量、获取变量示例环境变量的使用测试 发送请求示例常用的变量、方法responseBody 获取响应体内容pm.response 获取响应信息pm.expect() JSON检查cheerio.load() 类似于 jquery 操作 html 元素 POSTMAN 是网…

RabbitMQ入门指南

人生永没有终点。只有等到你瞑目的那一刻,才能说你走完了人生路,在此之前,新的第一次始终有,新的挑战依然在,新的感悟不断涌现。 文章目录 一、MQ与RabbitMQ概述1. MQ简述2. MQ的优势3. MQ的劣势4. 常见的MQ产品5. Rab…

MySQL 数据库

文章目录 数据库的基本概念数据表数据库数据库管理系统数据库系统 数据库的发展史当今主流数据库介绍SQL Server (微软公司产品)Oracle (甲骨文公司产品)DB2 (IBM公司产品)MySQL (甲骨文公司收购…

Spring Boot日志文件

目录 前言🍭 一、日志的作用🍭 1、日志真实使用案例:🍉 二、日志怎么用🍭 1、自定义日志打印🍉 Ⅰ、在程序中得到日志对象🍓 常见的日志框架说明(了解)&#x1f35…

保姆级AT32F437 配置RT-Thread 以太网(UDP/TCP Server)

好记性不如烂笔头,既然不够聪明,就乖乖的做笔记,温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 ENV版本:v1.3.5 rt-thread版本:V5 开发板:雅特力AT32F437 AT-START-F437 二、ENV配置 E…

java--类变量与实例变量--实验设计--村庄种树

目录 设计要求 设计流程图 程序代码 类Village代码 类MainClass代码 可以直接运行的代码 运行结果 类变量与实例变量的区别和类方法与实例方法的区别 idea的详细使用方法 设计要求 编写程序模拟两个村庄共同拥有一片森林;编写一个Village类,该类…

python爬虫:爬取网站所有页面上某些内容

举例场景:爬取腾讯课堂中,查询python的所有课程的封面图、课程标题、课程数量、课程价格,这4个部分的内容。 代码如下: import requests # import lxml # 导入用于请求的包lxml from bs4 import BeautifulSoup # 导入用于请求…

Tomcat 8.5 环境搭建指南

文章目录 导言环境搭建总结 导言 欢迎阅读本篇博客,本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南。Tomcat是一个流行的开源Java Servlet容器,它提供了一个运行Java Web应用程序的平台。无论您是新手还是有经验的开发人员,本文都将帮…

4、架构:Canvas VS DOM

在可视化搭建的低代码平台中,设计器是一个非常关键的模块,可以帮助用户通过拖拽、配置等方式快速搭建应用界面。 在技术选型方面,目前市面上主流的设计器技术包括基于 HTML/CSS/JavaScript 的 Web 设计器。 在渲染方案方面,主流…

王道《计算机网络》思维导图汇总

第一章 1.1.1 概念与功能 1.1.2 组成与分类 1.1.3 标准化工作及相关组织 1.1.4 性能指标 速率 带宽 吞吐量 时延 时延带宽积 往返时延RTT 利用率 1.2.1 分层结构、协议、接口、服务 1.2.2 OSI参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 1.2.4 TCP/IP 参…

Linux下的分布式迁移工具dsync使用

一、Linux下的分布式迁移工具dsync使用 dsync 是一个在 Linux 系统上用于迁移文件和目录的工具。它可以在不同的存储设备之间进行数据同步和迁移操作。dsync 是 rsync 工具的一个衍生版本,专注于在本地文件系统之间进行数据迁移。 这里是官网:dsync 1、…

游泳买耳机买什么的比较好,列举几款实战性好的游泳耳机

对于运动用户来说,在运动时都会选择听一些节奏感比较强的音乐,让自己运动是更有活力。现在已经是三伏天中的前伏期间,不少人会选择在三伏天的日子里进行减肥瘦身,耳游泳已经成为很多人都首选运动,游泳是非常好的有氧运…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代,软件已经成为我们办公和生活的必备工具。然而,市面上的大部分国产软件都需要付费才能使用,给我们的经济负担增加了不少。幸运的是,国内有一些良心软件,它们质量上乘,功能强大,…

2023牛客网秋招国内大厂最牛的 Java 面试八股文合集(全彩版)

秋收即将来临,找工作的小伙伴比比皆是,很对小伙伴早早的就开始储备技术,准备秋招面试了。 为了帮助小伙伴更好的应对面试,我拉来十几个大佬,汇总一线大厂的情况,给你整了一套超全的面试资料: 16…

深度学习项目实战二: LetNet5网络结构搭建

深度学习项目实战二: LetNet5网络结构搭建 文章目录 深度学习项目实战二: LetNet5网络结构搭建@[TOC](文章目录)一、卷积基本运算公式二、LetNet5网络1. 网络结构![在这里插入图片描述](https://img-blog.csdnimg.cn/0008fe6e5886414eac09eed49556ad99.png)2. 导入相关包3. 代码…

熔断与降级 Hystrix

一、Hystrix(豪猪)简介 1、Hystrix的设计目的 (1)对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 (2)阻止某一个依赖服务的故障在整个系统中蔓延,服务A->服务B->服务C,服务C故障了…

四、交换网络实验4——单臂路由配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.4 配置单臂路由器 实验目的 学习配置单臂路由 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统 实验步骤 第一步:根据拓扑配置基本信息

【Linux修炼】开发工具使用

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

无人机遥感在农林信息提取中的实现方法与GIS融合制图教程

详情点击链接:无人机遥感在农林信息提取中的实现方法与GIS融合制图 遥感技术作为一种空间大数据手段,能够从多时、多维、多地等角度,获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势,是智慧农业必须采用的重…
最新文章