第三天打卡--非线性规划(1)

简介: 第三天打卡--非线性规划(1)

文章目录

一、谈谈非线性

前面我们学了线性规划,整数规划,我们可以把整数规划理解为是特殊的线性规划。

在实际生活中,我们更多的认为数据是非线性的,对于线性规划这毕竟会是一些少量,为此我们引入了非线性规划。

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。

二、非线性规划的模型

Matlab 中非线性规划的数学模型写成以下形式:

image.png

跟我们前面学线性规划一样,都有一个对应的模型。数学模型会建立了吧?

三、非线性规划函数

fmincon函数用于寻找约束非线性多变量函数的最小值。这个函数怎么用?

这是语法格式:

x = fmincon(fun,x0,A,b) 从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b,Aeq,beq) 在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) 对 x 中的设计变量定义一组下界和上界,使解始终在 lb ≤ x ≤ ub 范围内。如果不存在等式,请设置 Aeq = [] 和 beq = []。如果 x(i) 无下界,请设置 lb(i) = -Inf,如果 x(i) 无上界,请设置 ub(i) = Inf。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。

参数什么意思?

b 和 beq 是向量,A 和 Aeq 是矩阵,c(x) 和 ceq(x) 是返回向量的函数,f(x) 是返回标量的函数。f(x)、c(x) 和 ceq(x) 可以是非线性函数。
x、lb 和 ub 可以作为向量或矩阵传递

行了行了,看看就行,看不懂i没事,我们结合具体例子来学会他。

四、线性不等式约束

目标函数:

fun =   (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

约束条件:从点 [-1,2] 为起点求最小值,约束方程 x(1)+2x(2)≤1

matlab代码:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;%匿名函数使用博客讲过
x0 = [-1,2];%起点可以更改,似乎没影响
A = [1,2];
b = 1;
[x,y] = fmincon(fun,x0,A,b)%套用函数

运行:

image.png

五、线性不等式和等式约束

求如下:

image.png

matlab代码:(参数前面的文章讲过了,就不注释了,唯一强调的fun函数用到了匿名函数,本专栏有讲)

clc
clear all
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
x0 = [1,1];%初始点设置自行不同
A = [1,-2];
b = 1;
Aeq = [2,1];
beq = 1;
[x,y] = fmincon(fun,x0,A,b,Aeq,beq)

运行:

image.png

六、带有非线性约束的求最值

目标函数:

min f (x) = x1^2 + x2^2 + x3^2 + 8

约束条件:

x1^2 − x2 + x3 ^2 ≥ 0
x1 + x2^2 + x3 ^3 ≤ 20
− x1 − x2^2 + 2 = 0
x2 + 2x3^2 = 3x1
x1,x2 , x3 ≥ 0

matlab解法:(具体看我注释)

clc
clear all
%% 主函数
options=optimset('largescale','off');
[x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)
%% 目标函数
function f=fun(x)
f=sum(x.^2)+8;
end
%% 非线性约束条件
function [c,ceq]=nonlcon(x)
c=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束
ceq=[-x(1)-x(2)^2+2
   x(2)+2*x(3)^2-3]; %非线性等式约束
end

运行:

image.png

目标函数为最小化函数,fun是一个函数,fun接受向量或数组 x,并返回实数标量 f,即在 x 处计算的目标函数值。


非线性约束条件,nonlcon是一个函数,接受向量或数组 x,并返回两个数组 c(x) 和 ceq(x)。

七、非线性约束

在边界约束下求 目标函数在圆内最小的点。目标函数:

fun =   (x)100*(x(2)-x(1)^2)^2+(1-x(1))^2

这一步可以匿名函数得到:

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

约束条件:

 0 ≤ x (1) ≤ 0.5 0
 0.2≤x(2)≤0.8

这一步可以得到:

lb = [0,0.2];
ub = [0.5,0.8];

同时在以 [1/3,1/3] 为圆心、半径为 1/3 的圆内寻找,可以编写一个函数代码如下:

function [c,ceq] = circle(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];

没有线性约束因此将这些参数设置为 []

A = [];
b = [];
Aeq = [];
beq = [];

因此全部代码为:

函数代码:

function [c,ceq] = circle(x)
c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2;
ceq = [];
end

主代码:

clc 
clear all
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
lb = [0,0.2];
ub = [0.5,0.8];
A = [];
b = [];
Aeq = [];
beq = [];
x0 = [1/4,1/4];
nonlcon = @circle;
[x,y] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

运行:

image.png

八、作业

下一篇我们还要讲一些关于非线性规划的内容,今天就讲一半即可,请消化理解。

你需要完成的任务:理解本篇文章的内容,代码自己敲一遍,写一篇文章提交,最好你写的博客能加上你自己的理解,如果我有讲的不对的,你可以在提交任务的评论区指正或着谈谈你觉得有什么改进的都可以。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
NoSQL Redis
Kubernetes----部署单节点Redis
Kubernetes----部署单节点Redis
6110 1
|
人工智能 中间件 数据库
沐曦 GPU 融入龙蜥,共筑开源 AI 基础设施新底座
沐曦自加入社区以来,一直与龙蜥社区在推动 AIDC OS 的开源社区建设等方面保持合作。
|
10月前
|
API 数据安全/隐私保护 计算机视觉
用Python批量处理图片,5分钟搞定一天的工作
用Python批量处理图片,5分钟搞定一天的工作
639 128
|
JSON API 数据格式
1688店铺订单列表订单详情订单物流API响应数据解析
1688平台作为阿里巴巴旗下的B2B电商利器,提供高效订单管理API,支持订单查询、状态变更与物流同步,助力企业提升运营效率。本文附Python请求示例代码,实现便捷对接与数据获取。
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
基于 NLP 与深度学习的智能面试训练系统:「模拟面试」APP 技术实现解析
本文详解「模拟面试」APP 的核心技术实现,涵盖 NLP 简历解析、AI 面试评估模型、多模态交互等模块,基于 PyTorch、spaCy、BERT 等技术栈,提供可落地的算法代码与系统架构设计,聚焦技术细节,助力招聘场景智能化升级。
|
人工智能 自然语言处理 Cloud Native
Bolt.diy 开发平台深度评测:灵活、快速且强大的云端开发解决方案
Bolt.diy 是一款基于云原生应用开发平台 CAP 构建的开源工具,结合阿里云函数计算与百炼模型服务,提供全栈开发新体验。它具备高度灵活性和可定制性,支持多种大语言模型及自定义集成;通过自然语言交互简化开发流程,内置智能化辅助工具提升效率。用户可一键部署、快速上手,适用于原型设计、教育及企业开发等场景,显著降低开发门槛并提高生产力。无论是个人开发者还是团队协作,Bolt.diy 都是高效便捷的云端开发解决方案。
|
存储 供应链 API
1688获得店铺所有商品的API接口
本文介绍如何通过1688开放平台API获取指定店铺的全部商品信息,涵盖注册、认证、分页调用及Python代码实现,适用于数据同步、库存管理与电商分析,内容真实可靠,步骤清晰易行。
1121 0
|
11月前
|
存储 人工智能 自然语言处理
学AI绕不开的实战派:武彬的5步学习框架让你告别碎片化
清华大学硕士、极睿科技创始人武彬,基于服务2000+品牌实战经验,提出“五步构建AI应用实战框架”,涵盖用例定位、数据平台、工具链、敏捷迭代与负责任AI五大维度。该框架已助力电商企业实现单月带货破千万,推动AI学习从碎片化走向系统化,赋能从业者完成从技术理解到商业落地的跨越,真正实现“用AI赚钱”。
488 0
|
安全 固态存储 Windows
电脑重置一次对电脑伤害大吗
电脑重置是指将系统恢复至初始状态,常用于解决卡顿、病毒等问题。本文解析重置对硬件无直接伤害,并介绍其适用场景、注意事项及与重装系统的区别,助你科学维护电脑。
|
机器学习/深度学习 人工智能 边缘计算
基于YOLOv8的包装箱纸板破损缺陷识别项目
本项目集成了 YOLOv8纸板破损缺陷检测模型 与 PyQt5图形界面工具,支持对工厂包装纸箱表面出现的多种破损瑕疵(如撕裂、压痕、孔洞等)进行快速准确识别。检测逻辑精准,界面操作便捷,适用于工厂自动质检、流水线布控系统等实际场景。提供完整训练流程与数据,开箱即用、部署无门槛,适合AI新手和工业视觉开发者学习与二次开发。
基于YOLOv8的包装箱纸板破损缺陷识别项目