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

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

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

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

优化的两个关键点:

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.mzph.cn/news/71673.shtml

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

相关文章

python-爬虫-xpath方法-批量爬取王者皮肤图片

import requests from lxml import etree获取NBA成员信息 # 发送的地址 url https://nba.hupu.com/stats/players # UA 伪装 google header {User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.3…

CSS笔记(黑马程序员pink老师前端)盒子阴影,文字阴影

盒子阴影 属性值为box-shadow,盒子阴影不占空间,不影响盒子之间的距离. 值说明h-shadow必需,水平阴影位置,允许为负值v-shadow必需,水平阴影位置,允许为负值blur可选,模糊距离,数值越大影子越模糊spread可选,影子的尺寸color可选,影子的颜色inset可选, 将外阴影改为内阴影(省…

c++ lambda

语法 [capture](parameters) mutalble->return-type{statement};capture [] &#xff1a;什么也不捕获[] : 按值的方式捕获所有变量[&] : 按引用方式捕获所有变量[boo] &#xff1a; 值捕获boo的值[,&a] : 按值捕获所有局部变量&#xff0c;按引用捕获变量a[,&…

微服务04-Gateway网关

作用 身份认证&#xff1a;用户能不能访问 服务路由&#xff1a;用户访问到那个服务中去 负载均衡&#xff1a;一个服务可能有多个实例&#xff0c;甚至集群&#xff0c;负载均衡就是你的请求到哪一个实例上去 请求限流功能&#xff1a;对请求进行流量限制&#xff0c;对服务…

小程序路由传参的方法

小程序路由传参的方法有以下几种&#xff1a; Query参数传递&#xff1a;在跳转页面时&#xff0c;可以通过url后面加上?keyvalue的方式传递参数&#xff0c;例如&#xff1a;wx.navigateTo({url: /pages/detail/detail?id123}) 路由跳转传递&#xff1a;可以通过wx.navigat…

sklearn中make_blobs方法:聚类数据生成器

sklearn中make_blobs()方法参数&#xff1a; n_samples:表示数据样本点个数,默认值100 n_features:是每个样本的特征&#xff08;或属性&#xff09;数&#xff0c;也表示数据的维度&#xff0c;默认值是2。默认为 2 维数据&#xff0c;测试选取 2 维数据也方便进行可视化展示…

网格化下的服务熔断

文章目录 网格化下的服务熔断前言什么是服务熔断&#xff1f;为什么需要服务熔断&#xff1f;服务熔断的实现监控服务的可用性和响应时间断开连接重定向请求 结论 网格化下的服务熔断 前言 随着云计算、容器化、微服务等技术的发展&#xff0c;现代应用已经变得越来越复杂。这…

FPGA实战小项目2

基于FPGA的贪吃蛇游戏 基于FPGA的贪吃蛇游戏 基于fpga的数字密码锁ego1 基于fpga的数字密码锁ego1 基于fpga的数字时钟 basys3 基于fpga的数字时钟 basys3

Android 大图显示优化方案-加载Gif 自定义解码器

基于Glide做了图片显示的优化&#xff0c;尤其是加载Gif图的优化&#xff0c;原生Glide加载Gif图性能较低。在原生基础上做了自定义解码器的优化&#xff0c;提升Glide性能 Glide加载大图和Gif 尤其是列表存在gif时&#xff0c;会有明显卡顿&#xff0c;cpu和内存占用较高&…

lambda表达式介绍

前言 lambda表达式是C11标准才支持的&#xff0c;有了它以后在一些地方进行使用会方便很多&#xff0c;尤其在一些需要仿函数的地方&#xff0c;lambda表达式完全可以替代它的功能。代码的可读性也会提高。 目录 1.lambda表达式 2.lambda表达式语法 3.函数对象和lambda表达…

2023年MySQL实战核心技术第二篇

目录 五 . 日志系统&#xff1a;一条SQL更新语句是如何执行的&#xff1f; 5.1 解释 5.2 重要的日志模块&#xff1a;redo log 5.2.1 解释 5.2.2 WAL&#xff08;Write-Ahead Logging&#xff09; 5.2.3 crash-safe。 5.3 重要的日志模块&#xff1a;binlog 5.3 .1 为什么会有…

元素周期表-背诵元素周期表更简单

元素周期表是一款极其炫酷、简约的记忆和查看周期表元素的软件。 【软件特点】&#xff1a; ●有趣谐音速记&#xff1a;软 件内有按周期、化合价、元素符号分类使用谐音速记的小技巧。 ●3D元素周期表&#xff1a;用户可以选择按表面、球体、螺旋、网格来3D炫酷的展示元素周期…

小白备战大厂算法笔试(三)——栈、队列、双向队列

文章目录 栈栈常用操作栈的实现基于链表的实现基于数组的实现 两种实现对比栈典型应用 队列队列常用操作队列实现基于链表的实现基于数组的实现 队列典型应用 双向队列双向队列常用操作双向队列实现基于双向链表的实现基于数组的实现 双向队列应用 栈 栈是一种遵循先入后出的逻…

MySQL之用户管理

用户 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 ps&#xff1a; host&#xff1a; 表示这个用户可以从哪个主机登陆&#xff0c;如果是localhost&#xff0c;表示只能从本机登陆 user&#xff1a; 用户名 authentication_string&#xff1a; 用户…

2023高教社杯数学建模D题思路分析 - 圈养湖羊的空间利用率

# 1 赛题 D 题 圈养湖羊的空间利用率 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养&#xff0c; 适应不同种类、不同阶段 的牲畜对空间的不同要求&#xff0c;以保障牲畜安全和健康&#xff1b;与此同时&#xff0c;也要尽量减少空间闲置所造成 的资源浪费。在实际…

点云从入门到精通技术详解100篇-基于点云和图像的智能交通路侧感知

目录 前言 基于激光雷达和相机的路侧感知系统需求分析及设计 2.1 引言 2.2 感知系统总体结构

SpringBoot实现登录拦截

如果我们不进行登录拦截的话&#xff0c;即使我们跳过登录页面直接去访问任意一个页面也能访问成功&#xff0c;那么登录功能就没有意义&#xff0c;同时也会存在安全问题&#xff0c;因为有些操作是要用户登录后才能执行的&#xff0c;如果用户没有登录&#xff0c;该接口就获…

【数据库事务日志碎片原理分析与方案】-分析篇

前言:说都数据库的事务日志&#xff0c;可以说我们是再熟悉不过的了。一般而言&#xff0c;我们都没有必 要去关心事务日志中的虚拟日志文件的个数。这里提到的“虚拟日志文件”的概念&#xff0c;我们 后面会进行专门的讲述。很多的时候&#xff0c;我们在建立数据库的时候&am…

使用Caffeine实现帖子的缓存来优化网站的运行速度

导入依赖 <!-- https://mvnrepository.com/artifact/com.github.ben-manes.caffeine/caffeine --><dependency><groupId>com.github.ben-manes.caffeine</groupId><artifactId>caffeine</artifactId><version>3.1.7</version>…

文盘Rust——起手式,CLI程序 | 京东云技术团队

技术的学习从不会到会的过程是最有意思的&#xff0c;也是体会最多的。一旦熟练了&#xff0c;知识变成了常识&#xff0c;可能就失去了记录学习过程的最佳时机。 在我看来学习一门计算机语言和学习人类语言有很多共通之处。我们学习人类语言是从单个的词开始&#xff0c;然后…