Python数学建模系列(三):规划问题之非线性规划
off999 2024-11-24 20:13 33 浏览 0 评论
若数学公式显示有问题,可以参考:Python数学建模系列(三):规划问题之非线性规划
非线性规划
非线性规划可以简单分两种,目标函数为凸函数or非凸函数
凸函数的非线性规划,比如,有很多常用库完成,比如cvxpy
非凸函数的非线性规划(求极值),可以尝试以下方法:
- 纯数学方法,求导求极值
- 神经网络、深度学习(反向传播算法中链式求导过程)
- scipy. optimize. minimize
scipy.optimize.minimize(fun,x0,args=(),method=None,jac=None,hess=None,hessp=None,bounds= None,constaints=() , tol= None,Callback= None, options=None)
fun:求最小值的目标函数
args:常数值
constraints :约束条件
method:求极值方法,一 般默认。
xO:变量的初始猜测值,注意minimize是局部最优
例题 - 1
计算1/x + x 的最小值
from scipy.optimize import minimize
import numpy as np
def fun(args):
a = args
v = lambda x:a/x[0] + x[0]
return v
args = (1)
x0 = np.asarray((2))
res = minimize(fun(args), x0, method='SLSQP')
res
运行结果
例题 - 2
计算的最小值,其中、、范围在0.1 到 0.9 之间
# 运行环境 Vs Code
from scipy.optimize import minimize
import numpy as np
def fun(args):
a,b,c,d = args
v = lambda x: (a + x[0]) / (b + x[1]) - c * x[0] + d * x[2]
return v
def con(args):
x1min,x1max,x2min,x2max,x3min,x3max = args
cons = ({'type':'ineq','fun':lambda x : x[0] - x1min},\
{'type':'ineq','fun':lambda x:-x[0] + x1max},\
{'type':'ineq','fun':lambda x:x[1] - x2min},\
{'type':'ineq','fun':lambda x:-x[1] + x2max},\
{'type':'ineq','fun':lambda x:x[2] - x3min},\
{'type':'ineq','fun':lambda x:-x[2] + x3max})
return cons
args = (2,1,3,4)
args1 = (0.1, 0.9,0.1, 0.9,0.1, 0.9)
cons = con(args1)
x0 = np.asarray((0.5,0.5,0.5))
res = minimize(fun(args), x0, method='SLSQP',constraints=cons)
res.fun,res.success,res.x,res.status
# 结果
(-0.773684210526435, True, array([0.9, 0.9, 0.1]), 0)
结语
学习来源:B站及其课堂PPT,对其中代码进行了复现
链接:「链接」
希望对您有所帮助,如有错误欢迎小伙伴指正~
相关推荐
- 系统iso怎么安装(系统iso怎么安装应用)
-
ISO系统安装详细教程步骤如下:1.准备所需材料:一台符合系统要求的计算机、ISO系统文件、可启动的USB驱动器或光盘、系统激活密钥(如果需要的话)。2.制作启动盘:如果你使用USB驱动器作为启动...
- 在微软官网下载win10(在微软官网下载vc要钱吗)
-
windows1021H2这可能意味着您的电脑不满足下载或安装升级到Windows11的最低要求。如果您的电脑不符合要求,您将无法下载或安装Windows11。此外,这也可能表示电脑上的驱动程序...
- dnf安全模式怎么解除最新办法
-
一、我们需要登录微信,然后使用微信关注“腾讯游戏安全中心”。最后进入公众号页面。二、进入公众号以后,我们点击游戏账号绑定。进入账号绑定页面。绑定我们自己的个人游戏账号。三、进入游戏账号绑定操作页面以后...
- 电脑怎么查看显卡配置信息(电脑怎么查看显卡配置信息win11)
-
查看电脑显卡配置方法 第一种方法是先我们应该进入我们的电脑硬件设备管理--在电脑设备管理里就可以看到电脑硬件的参数和型号了,根据这些参数就可以知道电脑配置怎么样。方法如下: 1、右键“我的电脑”--属...
- 全球浏览器排行榜前十名(世界前十浏览器)
-
微软公司的InternetExplore(IE),谷歌公司的Chorme,还有由Mozilla基金会开发的Firefox(火狐)浏览器。扩展:来自NetApplications的统计2013年8月...
- 安卓刷真正ios系统教程(安卓如何刷苹果系统)
-
1.拿到新iPhone手机后,开启手机然后按照提示进行开启设置,等到页面进入到“应用与数据”后,点击选择“从安卓设备转移数据”。2.在你的安卓手机上打开“转移到iOS”app,然后点击“继续”。阅读...
- 如何添加新的打印机(如何安装打印机到电脑上)
-
点开电脑左下角开始,点击设备和打印机,点击添加打印机,链接方式不同选择相对于的端口如:1网络打印机选择IP/TCP端口输入ip创建端口后,浏览驱动选择安装。2usb接口的,选择usb虚拟端口,然后浏览...
- qq空间说说赞免费网站(qq空间说说赞网站真人)
-
QQ空间里点赞的视频找不到,这是因为被隐藏,或者因为网页更新了,位置不同了。QQ空间点赞的前置图标是QQ个性商城中的“个性赞”功能,具体使用方法:一、打开手机QQ,左滑出手机QQ侧边栏,点击打开“个性...
- 防火墙的作用是什么
-
防火墙作为访问控制设备,主要工作在OSI模型的三四层。防火墙主要基于IP报文进行检测,对端口进行限制。产品设计无需理解HTTP等应用层协议,所以也就决定了防火墙无法对HTTP通讯进行输入验证或者规则分...
- 虚拟机安装ghost xp(虚拟机安装Ubuntu)
-
先安装vmospro软件(文末有直装高级版)记得给足权限,这个软件相当是你物理手机里的另一款安卓手机。2、安装完软件我们需要在里面安装一个虚拟机,直接点添加虚拟机,这里有很多虚拟机可以选择,建议选7...
- 固态硬盘读取不出来了(固态硬盘 读不出来)
-
1、您可以在开机的时候按下【F12】或者【F8】进入电脑快速引导菜单,查看是否有SSD的名称,您可以进入BIOS之后,将LaunchCSM设置为Enabled就可以; 2、如果是全新的硬盘是没...
- 分区合并到c盘(磁盘分区合并到c盘)
-
一、选择我的电脑并点击右键,选择管理菜单。二、选择储存——磁盘管理。三、以将新加卷g盘合并到c盘为例:选择G盘并单击右键呼出菜单,在菜单中选择删除卷菜单。四、点击“是”。点击c盘并单击右键。选择扩展卷...
- 免费ip转换器(ip转换器是干什么用的)
-
深度IP转换器软件由广州候胜科技有限公司开发的一款国内IP地址转换器软件深度IP转换器是一款动态IP和静态IP结合的IP地址修改软件,拥有全国城市节点固定IP线路5000加高速服务器IP,属于高匿名8...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
Python 批量卸载关联包 pip-autoremove
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
