非线性规划(1)

目录

一、非线性规划的定义

二、非线性规划的模型

三、非线性规划函数

四、线性不等式约束

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

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

七、非线性约束

         总结:


一、非线性规划的定义

前面我们学了线性规划,整数规划,我们可以把整数规划理解为是特殊的线性规划。
在实际生活中,我们更多的认为数据是非线性的,对于线性规划这毕竟会是一些少量,为此我们引入了非线性规划。

如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有单纯形法这一通用方法,非线性规划目前还没有适于各种问题的一般算法,各个方法都有自己特定的适用范围。

二、非线性规划的模型

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

Matlab中的命令是:

[x,y]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

三、非线性规划函数

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

%1.从 x0 开始,尝试在满足线性不等式 A*x ≤ b 的情况下寻找 fun 中所述的函数的最小值点 x。x0 可以是标量、向量或矩阵。
x = fmincon(fun,x0,A,b) 
%2.在满足线性等式 Aeq*x = beq 以及不等式 A*x ≤ b 的情况下最小化 fun。如果不存在不等式,则设置 A = [] 和 b = []。
x = fmincon(fun,x0,A,b,Aeq,beq) 
%3. 对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) 
%4.使用 options 所指定的优化选项执行最小化。使用 optimoptions 可设置这些选项。如果没有非线性不等式或等式约束,请设置 nonlcon = []。
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 

参数什么意思?

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

四、线性不等式约束

 目标函数:

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

此时,需要定义函数是 x

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

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

clc
clear allfun = @(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)%套用函数

运行:

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

求如下:

 matlab代码:

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)%求解x的值和此时函数值y

结果:

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

 目标函数:

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解法:

1.主函数

%% 主函数
options=optimset('largescale','off');
[x,y] = fmincon(@fun,rand(3,1),[],[],[],[],zeros(3,1),[], @nonlcon, options)

2.目标函数(以 end 结束)

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

%% 目标函数
function f=fun(x)
f=sum(x.^2)+8;
end

3.添加约束条件(以 end 结束)

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

%% 非线性约束条件
function [c,ceq]=nonlcon(x)
c=[-x(1)^2+x(2)-x(3)^2x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束
ceq=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %非线性等式约束
end

 总代码:(需先分别定义目标函数和约束条件,最后用主函数求解)

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)^2x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束
ceq=[-x(1)-x(2)^2+2x(2)+2*x(3)^2-3]; %非线性等式约束
end

运行:

七、非线性约束

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

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 00.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)

运行:

 总结:

已经学习第三天了,深深感觉到了自己能力的提升,不只体现在编程方面,其他方面也一样,码字速度是深深有感觉!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565310.shtml

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

相关文章

响应式布局Demo

顾名思义&#xff0c;响应式布局就是为适应不同终端而形成的一种技术。我总结了一个简单的例子帮助大家了解和学习响应式布局。 实现响应式布局的几种方式&#xff1a;媒体查询、JS、流体布局、弹性布局… 常用的meta标签 <meta content"widthdevice-width,initial-…

整数线性规划实现(lingo,python分枝界定法)

本文章为上篇建模学习打卡第二天的续 文章目录 一、本次问题 二、本题理解 三、问题求解 1.lingo实现 &#xff08;1&#xff09;先抛除整数约束条件对问题求解 &#xff08;2&#xff09;加入整数约束条件求解 2.python实现求解 &#xff08;1&#xff09;先抛除整数约…

Atmel跑Linux的arm芯片,Linux已被移植到Atmel的ATmega微控制器

Ubuntu Linux发行版已经被移植到最便宜、最便携的平台中&#xff1a;一个Atmel的ATmega微控制器。拥有一个20MHz的8位AVR处理器&#xff0c;128KB的闪存和整块16KB的SRAM&#xff0c;ATmega1284P并不是建立微型计算机最合乎逻辑的选择。它是在Arduino原型平台中找到的同样基础的…

Android Studio 详细安装教程

在我们的日常 Android 开发中&#xff0c;一个好的开发工具是必不可少的------Android Studio&#xff0c;是一个最重要的开发工具。 下面我将详细介绍Android Studio的下载安装。 一、安装环境及下载资源 1.1 安装环境 电脑系统 : Windows 10 JDK 版本 : 1.8 Android Stud…

零基础爬虫requests初阶教程,手把手教你爬数据

目录 一、环境与工具 二、学爬虫必备知识 三、简单体验 requests 四、get 请求 3.1 基础讲解一 3.3 基础讲解二 3.2 基础讲解三 3.4 获取cookie 3.5 获取请求头 3.6 添加请求头 3.5 知乎爬取反扒技术 3.6 抓取二进制数据 3.7 美女私房照爬取&#xff08; 准备发车…

vsftpd的主配置文件是什么linux,vsftpd.conf配置文件详解

vsftpd.conf配置文件详解# 是否允许匿名用户登录。默认值为YES。anonymousYES|NO# 是否允许匿名用户上传文件(如果设置为YES&#xff0c;则write_enable也必须设置为YES)。默认值为NO。anon_upload_enableYES|NO# 是否允许匿名用户创建目录(如果设置为YES&#xff0c;则write_e…

【youcans 的图像处理学习课】11. 形态学图像处理(上)

专栏地址&#xff1a;『youcans 的图像处理学习课』 文章目录&#xff1a;『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】11. 形态学图像处理&#xff08;上&#xff09; 【youcans 的图像处理学习课】11. 形态学图像处理&#xff08;中&#xff09; 【y…

Android Sdk 安装配置

在我们安装了Android Studio之后&#xff0c;我们发现不能使用&#xff0c;因为缺少一个Sdk的配置&#xff0c;下面就给大家详细介绍一下Sdk的配置。 打开我们的Android Studio。 选择Do not import settinge&#xff0c;然后点击OK。 点击 Cancel 退出即可&#xff0c;后面…

爬虫requests高阶篇详细教程

文章目录 一、前言 二、SSL验证 三、代理设置 四、超时设置 ​ 五、身份认证 1&#xff09;基本身份认证 2&#xff09;摘要式身份认证 六、总结 一、前言 本篇文高阶篇&#xff0c;上一篇为基础篇&#xff0c;希望你一定要学完基础再来看高阶篇内容 基础篇文章可以看大…

Android Studio 创建第一个项目应用

选择打开"Start a new Android Studio project"&#xff0c;新建一个Android项目。 选择一个空白的Activity&#xff0c;然后点击Next。 修改相应Android项目的名称、包名、项目位置等&#xff0c;以符合项目要求&#xff0c;点击Finish。 第一次创建项目可能会这样…

主成分分析(PCA)及其可视化——matlab

本文所用为matlab2016a matlab安装&#xff1a;待更新 matlab基础知识&#xff1a;待更新 如果本文内容已学会&#xff0c;可以看看python的哦 主成分分析&#xff08;PCA&#xff09;及其可视化——python_菜菜笨小孩的博客-CSDN博客 文章目录 一、主成分分析的原理 二…

Android studio真机调试

在我们进行Android开发的时候&#xff0c;调试这个环节是必不可少的也是至关重要的&#xff0c;使用真机调试可以更加准确清晰的显示效果。 真机调试Android应用 1.用数据线将手机连接到电脑&#xff0c;打开手机的开发者选项。 由于各个手机厂商的打开方式都不同&#xff0…

主成分分析(PCA)及其可视化——python

可以看看这个哦python入门&#xff1a;Anaconda和Jupyter notebook的安装与使用_菜菜笨小孩的博客-CSDN博客 如果你学会了python 可以看看matlab的哦 主成分分析&#xff08;PCA&#xff09;及其可视化——matlab_菜菜笨小孩的博客-CSDN博客 目录 一、主成分分析的原理 二…

Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT

我们安装完毕Android Studio之后&#xff0c;创建第一个项目&#xff0c;我们想要使用模拟器进行运行&#xff0c;但是当我们启动模拟器的时候却发现无法启动&#xff0c;而且出现了错误信息。 首先我们要知道错误信息是什么&#xff1f; 提示信息的意思是说“avd系统路径找不…

多元线性回归模型-数学建模类-matlab详解

如果本文有点小难理解的话&#xff0c;可以看看我之前的基础线性规划啥的&#xff0c;有lingo&#xff0c;matlab还有python 就不给大家放链接了&#xff0c;想看的话&#xff0c;点击头像即可&#xff01;&#xff01; 文章目录 &#xff08;1&#xff09;一元线性回归之旧…

手把手教你爬虫requests实战演练——python篇

文章目录 一、前言 二、实战 1&#xff09;获取百度网页并打印 2&#xff09;获取帅哥图片并下载到本地 4) 获取美女视频并下载到本地 5&#xff09;搜狗关键词搜索爬取 6&#xff09;爬取百度翻译 7&#xff09;爬取豆瓣电影榜单 8&#xff09;JK妹子爬取 总结&#xff…

Android studio 3.x 安装genymotion插件

在日常的Android开发中&#xff0c;模拟器是必不可少的&#xff0c;下面就给大家讲解一下如何在Android studio 3.x 安装genymotion插件。 对于Android studio 3.x之前的版本&#xff0c;可以直接在插件那里在线安装genymotion插件。 Android studio 3.0版本之后就搜索不到了…

图片弹框

用js实现图片弹框的特效。 效果展示 代码展示 html内容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title></head><body><img id"myImg" src"img/c_7…

最短路径和距离及可视化——matlab

文章目录 一、前言 二、最短路线 2.1 教程 2.1.1 sparse创建稀疏矩阵 2.1.2 有向图最短路径&#xff08;1&#xff09; 2.1.3 有向图最短路径&#xff08;2&#xff09; 2.1.4 无向图最短路径&#xff08;1&#xff09; 2.1.5无向图最短路径&#xff08;2&#xff09; …

没有bug队——加贝——Python 练习实例 1,2

目录 1.题目&#xff1a; 2.题目&#xff1a; 1.题目&#xff1a; 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的…