规划问题之非线性规划【笔记】
海轰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
题目
求 的最小值
解答
评论