Matlab求解数学优化问题
最近在研究自动泊车的轨迹规划问题,水平泊车在规划路径时会遇到一个求解泊车起始位置可行域的规划问题(以后会单独写一篇文章梳理下汽车的轨迹规划问题),于是研究了以下matlab相关数学优化函数。现在梳理如下:
fmincon函数
由于APA的路径规划是非线性优化问题,因此下面着重说下fmincon函数。matlab自带的fmincon函数专门用来求解非线性规划问题,公式如下:[x fval exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)。其中:
输入参数:
fun:目标函数
x0:因变量的迭代起始点
A,b:因变量的线性不等式约束
Aeq,beq:因变量的线性等式约束
lb,ub:因变量的上界和下界
nonlcon:非线性约束
输出参数:
x:求解得出的最优参数值
fval:在x为最优参数值时的目标函数(fun)值
exitflag:输出fmincon额外条件值
fmincon用法示例
求解如下问题:
主文件:fminconXY.m
% % fmincon进行非线性最优解计算
% [x fval exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
%
% 输入参数:
% fun:目标函数
% x0:因变量的迭代起始点
% A,b:因变量的线性不等式约束
% Aeq,beq:因变量的线性等式约束
% lb,ub:因变量的上界和下界
% nonlcon:非线性约束
%
% 输出参数:
% x:求解得出的最优参数值
% fval:在x为最优参数值时的目标函数(fun)值
% exitflag:输出fmincon额外条件值
%% eg
clc;
clear;
lb = [0,0.2]; % lb,ub:因变量的上界和下界
ub = [0.5,0.8];
A=[1,1;1,2]; % A,b:因变量的线性不等式约束
b=[2;3];
Aeq=[]; % Aeq,beq:因变量的线性等式约束
beq=[];
x0 = [1,4]; % x0:因变量的迭代起始点
nonlcon = @NonConstr; % nonlcon:非线性约束
fun=@ObjFunc; % fun:目标函数
f = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
目标函数文件:ObjFunc.m
function f = ObjFunc(t)
x=t(1);
y=t(2);
f=100*(y-x^2)^2 + (1-x)^2;
end
非线性约束文件:NonConstr.m
function [c,ceq] = NonConstr(t)
x=t(1);
y=t(2);
c = (x-1/3)^2 + (y-1/3)^2 - (1/3)^2; % 不等式约束:默认为小于等于0
ceq = []; % 等式约束
end
matlab计算结果如下:
f =
0.5000 0.2500