规划问题之非线性规划【笔记】

海轰Pro

共 1442字,需浏览 3分钟

 ·

2021-10-16 04:11

前言

若移动端查看数学公式不全或显示错误

可以复制文章链接至PC端进行查看

预备知识

语法

scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None)

参数(部分)

  • fun: 目标函数
  • x0:变量的初始值。如果有多个变量,则需要给每个变量一个初始值。
  • args:常数值,fun中一般没有数字,都以变量的形式表示,对于常数项及未知数前面的系数,需要以参数的形式传入
  • method:求极值的方法,一般使用默认为SLSQP
  • constraints:未知数的约束条件
API官方文档:https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.optimize.minimize.html

例题 - 1

题目

计算1/x + x 的「最小值」

解答

先画出函数 1/x + x 的图像(区间:-10 ~+10)

import matplotlib.pyplot as plt
import numpy as np
 
x = np.linspace(-10,10,num=100)
y = 1/x + x

plt.plot(x,y)
plt.show()

可以发现 该函数没有全局最优解 , 有 「局部最优解」

「使用scipy.optimize.minimize进行求解」

当设置初值x0为 2 时

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

求解局部最优解为:fun: 2.0000000815356342

当设置初值x0为 9 时

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((9))
res = minimize(fun(args), x0, method='SLSQP')
res

返回:fun: -2980232238769548.0 ,message: 'Rank-deficient equality constraint subproblem HFTI'

在这里插入图片描述

总结:

  • 因为minimize求解的是函数局部最优解,所以不同的变量初始值x0,会产生不同的结果。
  • 建议在不明确函数具体图像的时候,多试试x0

例题 - 2

题目

的最小值

解答

浏览 63
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报