优化问题,详解静态优化

**优化问题,尤其静态优化问题,**在控制系统设计中随处可见,例如基于燃油经济性和驾驶体验的多目标优化的汽车发动机 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官方,朋友如果需要可以点击链接领取

二维码详情

相关推荐
985小水博一枚呀几秒前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
龙哥说跨境1 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
AltmanChan1 分钟前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀5 分钟前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路14 分钟前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
小白学大数据17 分钟前
正则表达式在Kotlin中的应用:提取图片链接
开发语言·python·selenium·正则表达式·kotlin
flashman91118 分钟前
python在word中插入图片
python·microsoft·自动化·word
爱技术的小伙子20 分钟前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt
菜鸟的人工智能之路21 分钟前
桑基图在医学数据分析中的更复杂应用示例
python·数据分析·健康医疗
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍