当前位置: 首页 > news >正文

数学建模:线性与非线性优化算法

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

数学建模:线性与非线性优化算法

优化算法是指在满足一定条件下,在众多方案中或者参数中最优方案,或者参数值,以使得某个或者多个功能指标达到最优,或使得系统的某些性能指标达到最大值或者最小值

优化的两个关键点:

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_2+3x_3\} \\x_1+x_2\geqslant3 \\x_2+x_3\geqslant3 \\x_1+x_3=4 \\0\leq x_1,x_2,x_3\leq2 \end{gathered} min{x12x2+3x3}x1+x23x2+x33x1+x3=40x1,x2,x32

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^2+x_2x_3\end{Bmatrix} \\2x_1+x_2+3x_3\leq6 \\x_1^2+x_1x_2+x_2x_3\leq x_2+6 \\0\leq x_1,x_2,x_3\leq1 \end{gathered} max{x12x22+x2x3}2x1+x2+3x36x12+x1x2+x2x3x2+60x1,x2,x31

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)^2+x(2)*x(3);%% 取得非线性不等式约束函数
nonlcon = @noLinearLimited;
[x,fval] = fmincon(fun,x0,A,B,Aeq,Beq,LB,UB,nonlcon);objstr=['目标函数最优值:',num2str(-fval)];
disp(objstr)
for i=1:length(x)xstr=['x',num2str(i),'的值为:',num2str(x(i))];disp(xstr)
end%% 非线性不等式约束的表达式,如果有多个,则在C后面加; 补充即可
function [C,Ceq] = noLinearLimited(x)C = [x(1)^2+x(1)*x(2)+x(2)*x(3)-x(2)-6];Ceq = [];
end
http://www.lryc.cn/news/155616.html

相关文章:

  • 数学建模--粒子群算法(PSO)的Python实现
  • 【C++】STL-函数对象-内建函数对象
  • Redis 教程 - Redis 基本操作
  • FreeRTOS中断与任务之间同步(Error:..\..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,422 )
  • WebRTC清晰度和流畅度
  • 华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)
  • 海康威视二次开发适配安卓电视盒子
  • NIO原理浅析(二)
  • leetcode每日一练-第53题-最大子数组和
  • 京东云接入【风险识别】接口
  • 在 linux 虚拟机上安装配置 hive
  • 作品集(陆续上传中)
  • 论文解读 | 三维点云深度学习的综述
  • 基于costas环的载波同步系统matlab性能仿真
  • 解码自我注意的魔力:深入了解其直觉和机制
  • mysql之存储引擎
  • 服务器日志出现大量NTLM(NT LAN Manager)攻击
  • Spring学习|Spring简介、IOC控制反转理解、IOC创建对象方式
  • DDR2 IP核调式记录2
  • 【ES6】js 中class的extends、super关键字用法和避坑点
  • mysql排名函数row_number()over(order by)和with * as 的用法
  • linux局域网IP地址冲突检测
  • 远距离WiFi模组方案,实现移动设备之间高效通信,无人机远程图传应用
  • Docker构建Springboot项目,并发布测试
  • flutter架构全面解析
  • QHttpServer
  • 21.3 CSS 背景属性
  • Ansible 常用命令50条
  • ceph源码阅读 erasure-code
  • C++ 之 命名空间