优化问题,详解静态优化

优化问题,尤其静态优化问题,在控制系统设计中随处可见,例如基于燃油经济性和驾驶体验的多目标优化的汽车发动机 MAP 标定,基于性能指标优化的飞行器结构设计参数优化,以实验数据与模型输出匹配为目标的电池 RC 等效电路模型标定等等,他们都是通过构建目标函数(某个值的性能最大,或者某两个值之间的差距最小),然后调用优化算法实现设计变量寻优。

当设计变量变成一个函数,而这个函数对系统指标的影响又在时间先后上取决于一个动力学约束,这时候我们可能依然可以通过离散的方式将问题变成静态优化问题,当然这类问题也可以通过最优控制理论来实现,利用庞特里亚金极小值原理,动态规划来求解。例如混动车辆的 ECMS 算法,输出电池和发动机的能量分配序列满足电池 SOC 平衡的基础上油耗最低。

随着 AI 的引入,即使我们对于系统或模型一无所知,我们又可以通过试错的方式来获得一个长期奖励较优的控制器,用于处理序列决策问题,例如自动驾驶车辆或智能机器人的控制器控制序列,也就是强化学习的思路。本文接下来通过MATLAB示例来简单介绍这些概念的思想。

优化问题

对于一个普通的静态优化问题,可以描述为求解最优变量 x 使得 f(x) 最小[1],

同时满足约束条件:

图片

其中 x 是 n 维的设计变量向量,f(x) 是目标函数(通常是标量),和 m 维的函数向量 G(x),用于计算 x 处的等式和非等式约束。例如,求解这个示例:

目标函数

约束

图片

这个示例是典型的包含非线性约束的平滑问题,为了迭代高效,可以在目标函数和约束函数计算时中同时给出梯度。

function [f,gf] = onehump(x)

% ONEHUMP Helper function for Tutorial for the Optimization Toolbox demo

%   Copyright 2008-2009 The MathWorks, Inc.

r = x(1)^2 + x(2)^2;

s = exp(-r);

f = x(1)*s+r/20;

gf = [(1-2*x(1)^2)*s+x(1)/10;

       -2*x(1)*x(2)*s+x(2)/10];

end

function [c,ceq,gc,gceq] = tiltellipse(x)

% TILTELLIPSE Helper function for Tutorial for the Optimization Toolbox demo

%   Copyright 2008-2009 The MathWorks, Inc.

c = x(1)*x(2)/2 + (x(1)+2)^2 + (x(2)-2)^2/2 - 2;

ceq = [];

gc = [x(2)/2+2*(x(1)+2);

       x(1)/2+x(2)-2];

gceq = [];

end

构建完目标函数和约束函数,这样就可以调用 fmincon 求解器求解这个非线性平滑约束的优化问题,

options = optimoptions(options,...

'SpecifyObjectiveGradient',true,...

 'SpecifyConstraintGradient',true);

[x,fval,exitflag,output] = fmincon(@onehump,x0,[],[],[],[],[],[], ...

                                   @tiltellipse,options);

xold = x

xold = 2x1

      - 0.9727

        0.4686

于是得到约束条件下的最优解(红色的点):

图片

这类有约束的问题中,我们的优化变量是数值向量,我们可以通过 MATLAB 内置的求解器来求解极值点(算法参考[2]),也可以使用符号数学工具箱,利用函数的极值条件, 手动构建 Lagrange multiplier(将等式约束问题转换为无约束问题)或者KKT条件进行求解,例如,针对 Lagrange multiplier 方法,在 g(x)=0 的等式约束条件下求解 f(x) 最小,可以先构造 Lagrangian 函数:

图片

需要满足极值条件:

图片

我们可以用这种方法求解优化问题(1-1)(因为有不等式约束,下面的脚本添加了 s1 项变成等式约束,读者也可以尝试使用 KKT 条件进行含不等式约束问题的求解),可以得到和数值求解相同的结果。

syms x y s1 lambda

f = x.*exp(-x.^2-y.^2)+(x.^2+y.^2)/20;

g = x.*y/2+(x+2).^2+(y-2).^2/2-2+s1^2==0;

L = f + lambda*lhs(g);

dL_dx = diff(L,x)==0;

dL_dy = diff(L,y)==0;

% derivative of L with respect to lambda

dL_dlambda = diff(L,lambda) == 0;

dL_ds1=diff(L,s1) == 0;

% build the system of equations

system = [dL_dx; dL_dy; dL_dlambda;dL_ds1];

% solve the system of equations

[x_val, y_val, lambda_val, s1_val] = ...

solve(system, [x y lambda s1], 'Real', true);

% show results in a vector of data type double

results_numeric = double([x_val; y_val]) 

results_numeric = 2x1

      - 0.9727

        0.4686

 

   免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些人工智能基础入门视频+AI常用框架实战视频、图像识别、OpenCV、NLP、YOLO、机器学习、pytorch、计算机视觉、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文等。

下面是部分截图,加我免费领取

目录

一、人工智能免费视频课程和项目

二、人工智能必读书籍

三、人工智能论文合集

四、机器学习+计算机视觉基础算法教程

最后,我想说的是,自学人工智能并不是一件难事。只要我们有一个正确的学习方法和学习态度,并且坚持不懈地学习下去,就一定能够掌握这个领域的知识和技术。让我们一起抓住机遇,迎接未来!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以点击链接领取 

二维码详情

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

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

相关文章

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功,选择右边的控制台 点击云产品,选择对象存储 创建存储桶 填写名称,选择公有读,私有写一直下一步,到创建 选择安全管理&#…

TCP三次握手过程

什么是TCP tcp是一个面向连接的、可靠的、基于字节流的传输层通信协议 面向连接:TCP连接是一对一的,不能实现一对多或多对一,TCP在通信前要首先建立连接,连接成功后才能开始进行通信可靠的:TCP连接要保证通信过程的可靠…

php5构造无字母数字的webshell实现任意命令执行

目录 引言 如果是在php7 如果是在php5 现在我们来上传文件 最后的结果: 看本篇前可以先看这一篇:利用异或、取反、自增bypass_webshell_waf-CSDN博客 引言 上一篇介绍了如何构造出一个无字母数字的webshell,但是如果后端的代码变成了这…

校园门禁可视化系统解决方案

随着科技的持续进步,数字化校园在教育领域中的地位日益上升,各种智能门禁、安防摄像头等已遍布校园各个地方,为师生提供安全便捷的通行体验。然而数据收集分散、缺乏管理、分析困难等问题也逐渐出现,在这个数字化环境中&#xff0…

ZKP11.4 Use CI to instantiate Fiat-Shamir

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 11: From Practice to Theory (Guest Lecturer: Alex Lombardi) 11.4 Use CI to instantiate Fiat-Shamir Avoid Bad Challenges Def: Given false claim x x x and a first message α \alpha α, a challenge β \beta …

Selenium+Python自动化测试之验证码处理

两种方式: 验证码识别技术 (很难达到100%) 添加Cookie (*****五星推荐) 方式一:验证码识别技术 逻辑方式: 1:打开验证码所在页面,截图。获取验证码元素坐标,剪切出验证码图片&…

内存免杀--

通过分析Ekko项目了解内存加密过程,这对对抗内存扫描来说很重要。 概述 Edr会扫描程序的内存空间,检测是否存在恶意软件,这种检测恶意软件的方式,应该和静态检测没什么区别,只不过一个扫描的对象是硬盘,一…

flutter 自定义TabBar 【top 0 级别】

flutter 自定义TabBar 【top 0 级别】 前言一、基础widget二、tab 标签三、barView总结 前言 在日常开发中,tab 标签选项,是一个我们特别常用的一个组件了,往往我们在一个项目中,有很多地方会使用到它,每次单独去写&am…

vue 中 mixin 和 mixins 区别

目录 前言 用法 全局Mixin 局部Mixin 代码 理解 高质量的Mixin使用 在Vue.js框架中,Mixin是一种非常重要和强大的功能,它允许开发者创建可复用的代码片段,并将其应用到一个或多个组件中。Vue提供了两种方式来使用Mixin,分别…

Mybatis相关API(Sqlsession和sqlsessionFactroy)

代码 private static SqlSessionFactory sqlSessionFactory;static { ​try { // 获得核心配置文件String resource "mybits-config.xml"; // 加载核心配置文件InputStream inputStream Resources.getResourceAsStream(resource…

MATLAB 和 Simulink 官方文档下载地址

MATLAB 官方文档中文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html 如图: MATLAB 官方文档英文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html?langen 如图: Simulink 官…

Oracle(2-7)Instance and Media Recovery Structures

文章目录 一、基础知识1、体系结构详解2、Database Files 数据库文件3、Database Other Files 其他数据文件4、Dynamic Views 动态视图5、Large Pool6、DB Buffer Cache,DBWn7、Configuring Tablespaces 配置表空间8、Redo Log Buffer, LGWR9、Database Checkpoints 数据库检查…

文献速递:人工智能在健康和医学中

人工智能在健康和医学中 01 文献速递介绍 这篇文章详细探讨了人工智能(AI)在医学领域的最新进展、挑战和未来发展的机遇。 1.医学AI算法的最新进展: **AI在医疗实践中的应用:**虽然AI系统在多项回顾性医学研究中表现出色&…

泊车功能专题介绍 ———— 汽车全景影像监测系统性能要求及试验方法(国标未公布)

文章目录 术语和定义一般要求功能要求故障指示 性能要求响应时间图像时延单视图视野范围平面拼接视图视野平面拼接效果总体要求行列畸变拼接错位及拼接无效区域 试验方法环境条件仪器和设备车辆条件系统响应时间试验图像时延试验单视图视野范围试验平面拼接视图视野试验平面拼接…

2022年6月1日 Go生态洞察:开发者反馈与Go的未来发展

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

继电保护-变压器纵联差动保护MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 原理概述 差动保护是在两端设置的保护,通过比较两端测回来的电气量,进而看是否需要动作,纵联差动保护是变压器主保护。 纵联差动保护基本原则 双绕组变压器实现纵联差动…

C语言:写一个函数,实现3*3矩阵的转置(指针)

分析: 在主函数 main 中,定义一个 3x3 的整型数组 a,并定义一个指向整型数组的指针 p。然后通过循环结构和 scanf 函数,从标准输入中读取用户输入的 3x3 矩阵的值,并存储到数组 a 中。 接下来,调用 mov…

HarmonyOs 4 (二) HelloWord

目录 一 开发工具下载安装1.1 下载安装包1.2 下载相关依赖 二 开发者注册与个人实名认证三 第一个程序2.1 创建第一个程序2.2 认识开发者界面2.3 目录结构认识2.3.1 父目录认识2.3.2 AppScope 目录2.3.3 entry目录2.3.3.1 ets 目录2.3.3.2 resources目录 2.3.4 认识配置文件2.3…

服务器数据恢复—服务器断电导致XenServer数据文件丢失的数据恢复案例

服务器数据恢复环境: 某品牌720服务器搭配该品牌某型号RAID卡,使用4块STAT硬盘组建了一组RAID10阵列。服务器上部署XenServer虚拟化平台,系统盘 数据盘两个虚拟机磁盘。虚拟机上安装的是Windows Server操作系统,作为Web服务器使用…

centos7搭建 PXE 服务安装 window10/11 系统

最近想搭建之前基于 window server 的 window 批量安装,但想想装 window server 真的太麻烦了,我只是为了 PXE 安装系统而已,这些装一个极度消耗资源的系统真是相当麻烦呀,之前装的 server 不维护的话,不是被挖矿盯上就…