文章目录

  • 1. matlab 中的 fmincon() 函数
  • 2. python中的minimize()函数
  • 参考文献

1. matlab 中的 fmincon() 函数

matlab 求解非线性规划

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

2. 基本语法

[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=[]
  • lbub 是变量 x 的下界和上界,如果下界和上界没有约束,则 lb=[], ub=[],也可以写成 lb 的各分量都为 -inf, ub 的各分量都为 inf
  • nonlcon 是用 M 文件定义的非线性向量函数约束。
  • options 定义了优化参数,不填写表示使用 Matlab 默认的参数设置。

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

(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).^2x(1)+x(2).^2+x(3).^3-20];
h = [-x(1)-x(2).^2+2x(2)+2*x(3).^2-3];

(3)编写主程序函数

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

所得结果为:

2. python中的minimize()函数

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

  1. 首先查看下该函数:
# 这是其声明,我认为去查看函数的说明可以达到事半功倍的效果,千万别忽略
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}

2.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=argsv=lambda x:a/x[0] +x[0]return vif __name__ == "__main__":args = (1)  #ax0 = np.asarray((2))  # 初始猜测值res = minimize(fun(args), x0, method='SLSQP')print(res.fun)  # 函数的最小值print(res.success)print(res.x)

执行结果:

2.0000000815356342 (函数的最小值)
True
[1.00028559]

参考文献

[1] matlab求非线性规划及fmincon函数总结;
[2] Matlab求解非线性规划,fmincon函数的用法总结 2020.7;
[3] minimize函数的使用(scipy.optimize) 2019.11;
[4] 非线性规划(scipy.optimize.minimize) 2021.1;

python用minimize() 函数替代matlab的fmincon函数相关推荐

  1. matlab fmincon函数 用法,matlab中fmincon函数的用法?

    我建立一个myfunction.m文件function f=myfuncion(x) M=[2,-1;-1,2]; B=[3;-3]; f=1/2*x'*M*x+B'*x;然后在matlab窗口中输入 ...

  2. matlab优化问题约束不取等号6,matlab中fmincon函数中不含等号的边界值怎么设置?,matlab中的fmincon函数一直求不出为什么...

    导航:网站首页 > matlab中fmincon函数中不含等号的边界值怎么设置?,matlab中的fmincon函数一直求不出为什么 matlab中fmincon函数中不含等号的边界值怎么设置? ...

  3. matlab中错误使用fmincon,MATLAB中fmincon 函数问题

    MATLAB中fmincon 函数问题 Matlab的fmincon优化问题 请问: 各位高手帮忙看看我的程序又什么问题?显示错误 Error in ==> Fun at 33 [w,fval] ...

  4. matlab的fmincon函数如何传入额外参数或数据?

    文章目录 一.关于matlab的fmincon函数 二.使用匿名函数句柄传入额外参数或数据例子 一.关于matlab的fmincon函数   fmincon是matlab的带约束的非线性优化模型的求解 ...

  5. python调用matlab程序_Python调用MATLAB实现fmincon函数

    motivation: 1.要实现"符号几何规划"的功能,使用MATLAB自带的fmincon函数来实现 2.工程的代码是通过Python来完成的,需要Python调用MATLAB ...

  6. python调用matlab 性能_Python调用MATLAB实现fmincon函数

    motivation: 1.要实现"符号几何规划"的功能,使用MATLAB自带的fmincon函数来实现 2.工程的代码是通过Python来完成的,需要Python调用MATLAB ...

  7. Python数据分析学习总结——替代Matlab

    目录 1 数据分析流程--Python 2 数据读取--pandas 3 数据操作--numpy 3.1 数组属性查看 3.2 创建数组 3.3​ 数组索引和切片 3.4 数组计算 3.4.1 算术运 ...

  8. matlab 跳转到函数,matlab中fmincon函数如何调用??

    函数  fmincon 格式  x = fmincon(fun,x0,A,b) x = fmincon(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,b ...

  9. matlab的filter函数,filter函数用法 matlab中filter函数的用法

    matlab中filter函数的用法如果你深爱的人此刻在你身边陪你,你怎么会有时间来看这些文字呢 离散系统的差分方程为 2y[k]-y[-1]-3y[k-2]=2x[k]-x[k-1] x[k]=(0 ...

最新文章

  1. 斯坦福大学「黑盒学习」研究:使用神经变分推理的无向图模型,可替代「采样」 | 附NIPS 2017论文
  2. AndroidStuido编译release版本apk(非签名apk)
  3. collect2: error: ld returned 1 exit status编译错误
  4. php mysql 预编译语句_php mysql 预编译
  5. Python的类Class中__init__函数和self
  6. 深度学习之基于LeNet-5实现cifar10的识别
  7. python解压_python解压
  8. 盘点技术史:流量运营(PC 时代)
  9. 微信公众号怎么快速导出一个月的文章数据
  10. Motan:目录结构
  11. ★LeetCode(17)——电话号码的字母组合(JavaScript)
  12. AdaBoost 人脸检测介绍(5) : AdaBoost算法的误差界限
  13. python遍历文件夹循环处理图片
  14. 计算机自动关机启机唤醒设置,电脑设置自动关机和自动开机
  15. Java 1072 开学寄语
  16. 微信防撤回python_python实现微信防撤回神器
  17. 求最小公倍数与最大公因数的三种算法
  18. 算法的评价标准:ROC,假阳性,mape
  19. 维恩贝特面试JAVA后台开发
  20. 是否需要这么一支“特别行动队”?

热门文章

  1. 使用printf()设置输出字段长度
  2. 马拉松赛事中应用人脸识别解决方案
  3. 领英工具-领英精灵可以先体验么?
  4. 阅读micropyton源码-添加C扩展类模块(2)
  5. 2015年10月22日CSS学习笔记
  6. php 定位_PHP进阶学习之Geo的地图定位算法详解
  7. 第一阶段>>>Java基础进阶 OOP/Reflect/注解/IO流/API核心
  8. 外刊/网站公众号以一敌三的英语外刊精读公众号 英语外刊阅读
  9. JAVA GUI 监控工具 JConsole,Jmc,VisualVm,JProfiler
  10. 非零基础自学Java (老师:韩顺平) 第10章 面向对象编程(高级部分) 10.6 抽象类