网站建设有用吗,构建html5博客网站,门户网站 建设,wordpress 4.0 主题#x1f506; 文章首发于我的个人博客#xff1a;欢迎大佬们来逛逛
数学建模#xff1a;线性与非线性优化算法
优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小… 文章首发于我的个人博客欢迎大佬们来逛逛
数学建模线性与非线性优化算法
优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值
优化的两个关键点
1.明确优化的目标函数 2.明确优化变量之间需要满足的约束
线性优化
使用函数linprog
函数原型
[x,fval]linprog(f,A,b,Aeq,Beq,LB,UB)x求得最优情况下变量的解fval求得最优目标值f目标函数的系数符号按最小值标准若目标是求解机大值可以通过添加负号改成求极小值A不等式约束的变量系数符合按小于标准如果是大于约束可通过加负号变成小于b不等式约束的常量Aeq等式约束的变量系数Beq等式约束的常量LB变量的下限UB变量的上限
例如我们需要计算求解如下线性函数的最优解 m i n { − x 1 − 2 x 2 3 x 3 } x 1 x 2 ⩾ 3 x 2 x 3 ⩾ 3 x 1 x 3 4 0 ≤ x 1 , x 2 , x 3 ≤ 2 \begin{gathered}min\{-x_1-2x_23x_3\} \\x_1x_2\geqslant3 \\x_2x_3\geqslant3 \\x_1x_34 \\0\leq x_1,x_2,x_3\leq2 \end{gathered} min{−x1−2x23x3}x1x2⩾3x2x3⩾3x1x340≤x1,x2,x3≤2
clc;clear;f [-1;-2;3];
%% 不等式约束
A [-1,-1,0;0,-1,-1];
B [-3,-3];%% 等式约束
Aeq [1,0,1];
Beq [4];%% 上下限
LB zeros(3,1);
UB 2*ones(3,1);%% 线性优化
[x,fval] linprog(f,A,B,Aeq,Beq,LB,UB);%% 输出结果objstr [目标函数最优值,num2str(fval)];
disp(objstr);
for i 1:length(x)xstr [x,num2str(i),的系数为: ,num2str(x(i))];disp(xstr);
end非线性优化
fmincon是MATLAB的非线性规划求解函数
[x,fval]fmincon(fun,x0,A,b,Aeq,Beq,LB,UB,nonlcon)x求得最优情况下变量的解fval求得最优目标值fun目标函数符号按最小值标准若目标是求解机大值可以通过添加负号改成求极小值x0初始解A不等式约束的变量系数符合按小于标准如果是大于约束可通过加负号变成小于b不等式约束的常量Aeq等式约束的变量系数Beq等式约束的常量LB变量的下限UB变量的上限nonlcon :非线性约束函数表达式 m a x { x 1 2 − x 2 2 x 2 x 3 } 2 x 1 x 2 3 x 3 ≤ 6 x 1 2 x 1 x 2 x 2 x 3 ≤ x 2 6 0 ≤ x 1 , x 2 , x 3 ≤ 1 \begin{gathered}max\begin{Bmatrix}x_1^2-x_2^2x_2x_3\end{Bmatrix} \\2x_1x_23x_3\leq6 \\x_1^2x_1x_2x_2x_3\leq x_26 \\0\leq x_1,x_2,x_3\leq1 \end{gathered} max{x12−x22x2x3}2x1x23x3≤6x12x1x2x2x3≤x260≤x1,x2,x3≤1
clc;clear;% 指定初始解
x0 zeros(3,1);
%% 线性不等约束
A [2,1,3];
B [6];%% 线性等式约束
Aeq [];
Beq [];%% 变量上下限
LB zeros(3,1);
UB 1*ones(3,1);%% 整体非线性优化目标函数
fun (x) -x(1)^2-x(2)^2x(2)*x(3);%% 取得非线性不等式约束函数
nonlcon noLinearLimited;
[x,fval] fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,nonlcon);objstr[目标函数最优值,num2str(-fval)];
disp(objstr)
for i1:length(x)xstr[x,num2str(i),的值为,num2str(x(i))];disp(xstr)
end%% 非线性不等式约束的表达式如果有多个则在C后面加; 补充即可
function [C,Ceq] noLinearLimited(x)C [x(1)^2x(1)*x(2)x(2)*x(3)-x(2)-6];Ceq [];
end