第三天打卡--非线性规划(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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
8月前
|
存储 供应链 API
1688获得店铺所有商品的API接口
本文介绍如何通过1688开放平台API获取指定店铺的全部商品信息,涵盖注册、认证、分页调用及Python代码实现,适用于数据同步、库存管理与电商分析,内容真实可靠,步骤清晰易行。
|
11月前
|
安全 固态存储 Windows
电脑重置一次对电脑伤害大吗
电脑重置是指将系统恢复至初始状态,常用于解决卡顿、病毒等问题。本文解析重置对硬件无直接伤害,并介绍其适用场景、注意事项及与重装系统的区别,助你科学维护电脑。
|
JSON 缓存 小程序
微信小程序组件封装与复用:提升开发效率
本文深入探讨了微信小程序的组件封装与复用,涵盖组件的意义、创建步骤、属性与事件处理,并通过自定义弹窗组件的案例详细说明。组件封装能提高代码复用性、开发效率和可维护性,确保UI一致性。掌握这些技能有助于构建更高质量的小程序。
|
算法 Java
Java中Collections.shuffle方法总结
Java中Collections.shuffle方法总结
CTK框架 - 第一个插件
前面我们已经介绍了CTK框架的基本信息,接下来我们来一步一步搭建CTK的第一个插件。
532 0
|
图形学 开发者
【Unity光照艺术手册】掌握这些技巧,让你的游戏场景瞬间提升档次:从基础光源到全局光照,打造24小时不间断的视觉盛宴——如何运用代码与烘焙创造逼真光影效果全解析
【8月更文挑战第31天】在Unity中,合理的光照与阴影设置对于打造逼真环境至关重要。本文介绍Unity支持的多种光源类型,如定向光、点光源、聚光灯等,并通过具体示例展示如何使用着色器和脚本控制光照强度,模拟不同时间段的光照变化。此外,还介绍了动态和静态阴影、全局光照及光照探针等高级功能,帮助开发者创造丰富多样的光影效果,提升游戏沉浸感。
1032 1
|
监控 jenkins 持续交付
|
程序员 开发者
IDEA插件-Power Mode II键盘炫酷效果
Power Mode II 是一款为 IntelliJ IDEA 设计的插件,旨在为编码过程增添动感和趣味性。这款插件通过在代码编写时添加视觉特效、声音效果和其他动态元素,为开发者提供了一个独特且富有创意的编程体验。
1795 0
IDEA插件-Power Mode II键盘炫酷效果
|
机器学习/深度学习 数据可视化 搜索推荐
Matplotlib数据可视化图表
【7月更文挑战第11天】Python的Matplotlib库是数据可视化的首选工具,支持创建各种图表,如折线图、柱状图、散点图、饼图、箱线图、热图等。安装Matplotlib可使用`conda`或`pip`。通过简单代码示例展示了如何绘制这些图表,包括自定义样式、动态更新及保存图表为图片文件。数据可视化对于理解和传达数据洞察至关重要。
|
机器学习/深度学习 人工智能 自然语言处理
自然语言处理和人工智能有什么区别
自然语言处理和人工智能有什么区别