我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python使用minimize() 函数替代matlab的fmincon函数

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python使用minimize() 函数替代matlab的fmincon函数

1. matlab 中的 fmincon() 函数

matlab 求解非线性规划

在matlab中,fmincon函数可以用于求解带约束的非线性多变量函数的最小值,即可以用来求解非线性规划问题。

基本语法

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

  • x 的返回值是决策向量 x 的取值,fval 的返回值是目标函数 f(x) 的取值
  • fun 是用 M 文件定义的函数 f(x) ,代表了(非)线性目标函数
  • x0 是 x 的初始值
  • A, b, Aeq, beq 定义了线性约束 ,如果没有线性约束,则 A=[], b=[], Aeq=[], beq=[]
  • lb 和 ub 是变量 x 的下界和上界,如果下界和上界没有约束,则 lb=[], ub=[],也可以写成 lb 的各分量都为 -inf, ub 的各分量都为 inf
  • nonlcon 是用 M 文件定义的非线性向量函数约束。
  • options 定义了优化参数,不填写表示使用 Matlab 默认的参数设置。

实例

示例,求下列非线性规划:

(1)编写 M 函数 fun1.m 定义目标函数:

function f = fun1(x);
f = x(1).^2 + x(2).^2 + x(3).^2 + 8;

(2)编写 M 函数 fun2.m 定义非线性约束条件:

function [g, h] = fun2(x);
g = [-x(1).^2+x(2)-x(3).^2
    x(1)+x(2).^2+x(3).^3-20];
h = [-x(1)-x(2).^2+2
    x(2)+2*x(3).^2-3];

(3)编写主程序函数

[x, y] = fmincon('fun1', rand(3, 1), [], [], [], [], zeros(3,1), [], 'fun2')

所得结果为:

2. python中的minimize()函数

minimize函数的寻找参数

在 python 的 scipy.optimize 库中包含该函数的替代函数 minimize() ,该函数的使用与 matlab 的 fminunc 函数有些不同,下面总结下,自己在使用的过程中遇到的问题。

首先查看下该函数:

官方声明过长,我把它放在该篇博客的最后面:

# 这是其声明,我认为去查看函数的说明可以达到事半功倍的效果,千万别忽略
def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
             hessp=None, bounds=None, constraints=(), tol=None,
             callback=None, options=None):

着重介一些重要参数代表什么:

fun:该参数就是 costFunction 你要去最小化的损失函数,将 costFunction 的名字传给 fun

官方给的提示:

The objective function to be minimized.
fun(x, *args) -> float
where x is an 1-D array with shape (n,) and args
is a tuple of the fixed parameters needed to completely
specify the function.

意思就是损失函数在定义时,**theta 必须为第一个参数且其shape必须为(n, )**即一维数组。在计算损失函数的时候用到的其他参数以元组的形式传入到 args 参数中(其他参数具体指 X,Y,lambda 等),最后返回损失的值,可以为数组形式,也可以为一个实数.

  • x0: 参数 x0 就是初始化的 theta, 其 shape 必须为 shape(n,) 即一维数组.
  • method:该参数代表采用的方式,默认是 BFGS, L-BFGS-B, SLSQP 中的一种,可选 TNC
  • jac:该参数就是计算梯度的函数,和 fun 参数类似,第一个必须为 theta 且其 shape 必须为 (n, ) 即一维数组,最后返回的梯度也必须为一个一维数组。
  • options:用来控制最大的迭代次数,以字典的形式来进行设置,例如:options={‘maxiter’:400}

minimize求解约束函数最小值

  • fun: 求最小值的目标函数
  • x0:变量的初始猜测值,如果有多个变量,需要给每个变量一个初始猜测值。minimize会出现局部最优的情况,所以这块的处理方法需要寻找。
  • args:常数值,后面例子会讲解,fun中没有数字,都以变量的形式表示,对于常数项,需要在这里给值
  • method:求极值的方法,官方文档给了很多种。一般使用默认。每种方法我理解是计算误差,反向传播的方式不同而已,这块有很大理论研究空间
  • constraints:约束条件,针对fun中为参数的部分进行约束限制
1.计算 1/x+x 的最小值

# coding=utf-8
from scipy.optimize import minimize
import numpy as np
 
#demo 1
#计算 1/x+x 的最小值
 def fun(args):
     a=args
     v=lambda x:a/x[0] +x[0]
     return v
 
 if __name__ == "__main__":
     args = (1)  #a
     x0 = np.asarray((2))  # 初始猜测值
     res = minimize(fun(args), x0, method='SLSQP')
     print(res.fun)
     print(res.success)
     print(res.x)

执行结果:函数的最小值为2点多

到此这篇关于python使用minimize() 函数替代matlab的fmincon函数的文章就介绍到这了,更多相关python fmincon内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python使用minimize() 函数替代matlab的fmincon函数

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何在 MySQL 中使用 IFNULL() 函数代替 COALESCE() 函数?

我们知道,如果第一个参数不为 NULL,IFNULL() 函数将返回第一个参数,否则返回第二个参数。另一方面,COALESCE() 函数将返回第一个非 NULL 参数。实际上,如果参数数量只有两个,MySQL 中的 IFNULL() 和 C
2023-10-22

Matlab的normpdf函数怎么使用

normpdf函数是用来计算正态分布概率密度函数的函数。它的使用方法如下:normpdf(x, mu, sigma)其中,x是要计算概率密度的值,mu是正态分布的均值,sigma是正态分布的标准差。示例代码如下:x = -10:0.1:10
2023-09-13

Matlab的griddata函数怎么使用

griddata函数用于在非规则的数据点上进行插值。其基本语法为:ZI = griddata(X,Y,Z,XI,YI)其中,X和Y是数据点的横坐标和纵坐标,Z是数据点的值。XI和YI是要进行插值的点的横坐标和纵坐标。ZI是插值得到的值。使用
2023-08-26

matlab的round函数怎么使用

MATLAB中的round函数用于将输入值四舍五入为最接近的整数。它的使用方法如下:1. 使用默认的舍入到最接近的整数:```matlabroundedValue = round(value);```这将返回与输入值value最接近的整数。
2023-09-20

matlab mean函数怎么使用

要使用MATLAB中的mean函数,您需要完成以下步骤:1. 创建一个向量或矩阵,其中包含要计算平均值的元素。2. 在命令窗口或脚本中输入以下代码:```A = [1, 2, 3, 4, 5];mean(A);```或者,如果您想计算矩阵的
2023-08-19

matlab trapz函数如何使用

MATLAB中的trapz函数用于计算数值积分。它的语法如下:y = trapz(x, y)其中,x是x轴上的数据点,y是对应的y轴上的数据点。trapz函数将使用梯形法则对给定的数据点进行数值积分,并返回结果。梯形法则是通过将数据点之间的
2023-09-22

MATLAB plotyy函数怎么使用

MATLAB的plotyy函数用于在同一图形窗口中绘制具有不同纵轴的两条曲线。其基本语法格式为:plotyy(x1, y1, x2, y2)其中,x1和y1分别为第一条曲线的横坐标和纵坐标数据,x2和y2分别为第二条曲线的横坐标和纵坐标数据
2023-09-25

matlab griddata函数如何使用

griddata函数用于在二维或三维离散数据点上进行插值,以生成在整个区域上的连续数据。函数语法如下:Z = griddata(X, Y, V, XI, YI)Z = griddata(X, Y, Z, XI, YI)Z = griddat
2023-10-08

matlab reshape函数怎么使用

在MATLAB中,reshape函数用于改变数组的维度。它的基本语法如下:B = reshape(A, sz)其中,A是要改变维度的数组,sz是一个整数或者一个包含整数的向量,表示目标数组的维度。B是一个与A具有相同元素但不同维度的数组
2023-10-27

MATLAB中normrnd函数的使用方法

MATLAB中的normrnd函数用于生成服从正态分布的随机数。其使用方法如下:1. 语法:X = normrnd(mu, sigma) 或者 X = normrnd(mu, sigma, M, N, ...)- mu:正态分布的均值。-
2023-09-14

matlab中的train函数如何使用

在MATLAB中,train函数用于训练机器学习模型。它可以用于训练各种不同类型的模型,如支持向量机、神经网络、朴素贝叶斯等。train函数的语法如下:model = train(TrainData, TrainLabels)其中,Trai
2023-09-15

Matlab的imfilter函数用法

imfilter函数是Matlab中用于图像滤波的函数,其使用方法如下:im_out = imfilter(im_in, h, shape, boundary, fillval)其中,im_in是输入图像,h是滤波器,shape是输出图像的
2023-09-02

matlab中colorbar函数怎么使用

在MATLAB中,colorbar函数用于在图像或图表上添加颜色条。使用方法如下:1. 绘制图像或图表。2. 在绘图完成后,使用colorbar函数来添加颜色条。语法如下:```colorbar```默认情况下,colorbar将在图像或图
2023-10-08

matlab中argmin函数怎么使用

在MATLAB中,argmin函数用于返回一个向量或矩阵中的最小元素的索引值。argmin函数的语法如下:index = argmin(vector)其中,vector是一个向量或矩阵,index是最小元素的索引值。需要注意的是,argmi
2023-09-12

matlab中polyder函数怎么使用

在MATLAB中,polyder函数用于计算多项式的导函数。它的使用方法如下:1. 创建一个多项式系数向量,例如:p = [2 -3 1] 表示多项式2x^2 - 3x + 1。2. 调用polyder函数并传入多项式系数向量作为输入参数,
2023-09-12

MATLAB中plot函数怎么使用

在MATLAB中,plot函数用于绘制二维图形。以下是plot函数的使用方法:1. 绘制简单的曲线:plot(y):绘制向量y的值,x轴为1:length(y)。plot(x, y):绘制向量y的值,x轴为向量x的值。2. 绘制多个曲线:p
2023-09-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录