python 非线性规划(from scipy.optimize import minimize)

python 非线性规划(from scipy.optimize import minimize)

库方法介绍

官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html

方法的入参:
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:求极值的方法,官方文档给了很多种。一般使用默认。每种方法我理解是计算误差,反向传播的方式不同而已,这块有很大理论研究空间

constraints:约束条件,针对fun中为参数的部分进行约束限制

from scipy.optimize import minimize

# 计算 1/x+x 的最小值
def fun(x):
    return 1 / x[0] + x[0]

if __name__ == "__main__":
    x0 = 2 #初始猜测值
    res = minimize(fun, x0, method='SLSQP')
    print(res.fun)
    print(res.success)
    print(res.x)


“”“
执行结果
2.0000000815356342
True
[1.00028559]
“””

力扣:5463. 服务中心的最佳位置https://leetcode-cn.com/problems/best-position-for-a-service-centre/
一家快递公司希望在新城市建立新的服务中心。公司统计了该城市所有客户在二维地图上的坐标,并希望能够以此为依据为新的服务中心选址:使服务中心 到所有客户的欧几里得距离的总和最小 。
给你一个数组 positions ,其中 positions[i] = [xi, yi] 表示第 i 个客户在二维地图上的位置,返回到所有客户的 欧几里得距离的最小总和
提示:
1 <= positions.length <= 50
positions[i].length == 2
0 <= positions[i][0], positions[i][1] <= 100

from scipy.optimize import minimize
class Solution:
    def getMinDistSum(self, positions: List[List[int]]) -> float:
        def getSum(x):
            return sum(sqrt((x[0] - x1) ** 2 + (x[1] - y1) ** 2 ) for x1, y1 in positions)
        return minimize(getSum, [50,50]).fun

拓展

全局最优的函数: scipy.optimize.basinhopping
有一个缺点是无法设置约束,求全局的最优解的函数
官方文档:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.basinhopping.html

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值