Python scipy Moudle 中的 optimize 方法

news2024/11/15 22:43:07
  • Python scipy Moudle 中的 optimize 方法 

scipy Moudle 中的 optimize 方法

minimize

  • 最小化一个函数
    • 它提供了多种算法,如 BFGS、Nelder-Mead、Powell

可选参数

  • fun:要最小化的目标函数
  • x0:函数的初始猜测值。可以是一个数组或列表
  • method:优化算法的名称或方法对象
    • 默认为 'BFGS',可选的值包括 'Nelder-Mead'、'Powell'、'CG' 等
    • - 'Nelder-Mead'
      • cannot handle constraints
    • - 'Powell'  
      • cannot handle constraints
    • - 'CG'    
      • cannot handle constraints nor bounds
    • - 'BFGS'  
      • cannot handle constraints nor bounds
    • - 'Newton-CG'  
      • Jacobian is required
    • - 'L-BFGS-B'   
      • cannot handle constraints
    • - 'TNC' 
      • cannot handle constraints
    • - 'COBYLA' 
      • Constraints of type 'eq' not handled by COBYLA
      • cannot handle bounds
    • - 'SLSQP' 
    • - 'trust-constr'
    • - 'dogleg' 
      • Jacobian is required
    • - 'trust-ncg'   
      • Jacobian is required
    • - 'trust-exact' 
      • Jacobian is required
    • - 'trust-krylov'
      • Jacobian is required

  • jac:目标函数的梯度函数
    • 可以是一个布尔值或函数对象
      • 输入为布尔值则自动计算目标函数的梯度
      • 或者为目标函数的梯度函数
  • bounds:定义变量的上下界限制
    • 一个长度为2列表或元组,表示变量上下界
  • constraints:约束条件
    • 一个列表或字典,每个元素都表示一个约束条件
  • tol:优化算法的终止容忍度
  • options:一个字典,用于设置其他特定优化算法的参数

BFGS

  • Method BFGS cannot handle constraints nor bounds.
import numpy as np
from scipy.optimize import minimize


def objective(x):
    return x[0]**2 + x[1]**2 - x[0]*x[1]*x[2]

def constraint1(x):
    return x[0] + x[1] + x[2] - 10

def constraint2(x):
    return x[0] - x[1] - 2 

def constraint3(x):
    return  - x[1] - x[2] + 5

x0 = np.array([1, 2, 3])

bounds = [(-5, 5), (-5, 5), (-5, 5)]

constraints = [{'type': 'eq', 'fun': constraint1},
               {'type': 'ineq', 'fun': constraint2},
               {'type': 'ineq', 'fun': constraint3}]

result = minimize(objective, x0, method='BFGS', bounds=bounds, constraints=constraints, tol=1e-6)

print("Optimization Result:")
print("x:", result.x)
print("fun:", result.fun)
print("success:", result.success)
print("message:", result.message)
Warning (from warnings module):
  File "C:\Users\LX\AppData\Local\Programs\Python\Python310\lib\site-packages\scipy\optimize\_minimize.py", line 559
    warn('Method %s cannot handle constraints nor bounds.' % method,
RuntimeWarning: Method BFGS cannot handle constraints nor bounds.
Optimization Result:
x: [1512.43480791  204.93489864 1118.04026935]
fun: -344207877.7418728
success: False
message: Desired error not necessarily achieved due to precision loss.
  • Lingo 代码
min=x1^2 + x2^2 - x1*x2*x3;

x1+x2+x3=10;
x1-x2>2;
x2+x3<5;

@bnd(-5, x1, 5);
@bnd(-5, x2, 5);
@bnd(-5, x3, 5);

 

SLSQP

  • 这种迭代随然支持约束 上下界等
  • 但是。。。
    • 不一定得到很正确的结果
import numpy as np
from scipy.optimize import minimize


def objective(x):
    return x[0] - x[1] * x[2]

def constraint1(x):
    return x[0] + x[1] - 2

def constraint2(x):
    return 2 - x[2] - x[1] 

def constraint3(x):
    return  x[2] + x[0] - 2

x0 = np.array([5, -2, 3])

bounds = [(-5, 5), (-5, 5), (-5, 5)]

constraints = [{'type': 'ineq', 'fun': constraint1},
               {'type': 'ineq', 'fun': constraint2},
               {'type': 'ineq', 'fun': constraint3}]

result = minimize(objective, x0, method="SLSQP", bounds=bounds, constraints=constraints, tol=1e-6)

print("Optimization Result:")
print("x:", result.x)
print("fun:", result.fun)
print("success:", result.success)
print("message:", result.message)

 

root

  • 用于求解非线性方程组的根。它提供了多种算法,如 Broyden、Newton-Krylov、Anderson 等。
  • 大多数方法为迭代方法,必须传入猜测着
  • method:指定求解非线性方程组的方法
    • 'lm'(Levenberg-Marquardt)
    • 'broyden1'(Broyden's first method)
    • 'broyden2'(Broyden's second method)
    • 'anderson'(Anderson mixing)
    • 'linearmixing'(linear mixing)
    • 'diagbroyden'(diagonal Broyden)
    • 'excitingmixing'(exciting mixing)
    • 默认值为None
  • jac:指定计算雅可比矩阵的函数。默认值为False
  • tol:指定求解器的容差。默认值为1e-12
from scipy.optimize import root

def equation(x):
    return x**3 - 2*x - 5

sol = root(equation, 0)

print(sol.x)

least_squares

  • 用于最小二乘问题的求解。它提供了多种算法,如 Levenberg-Marquardt、Trust Region Reflective 等
import numpy as np
from scipy.optimize import least_squares
import matplotlib.pyplot as plt

#目标函数
def func(x, p):
    return p[0] * np.exp(p[1] / x) - p[2] * x**2

f = lambda x:5*np.e**(2/x) - 4*x**2

#残差函数
def residual(p, x, y):
    return func(x, p) - y


x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
y = f(x)
noise = np.random.uniform(-0.6, 0.6, len(x))
y += noise

#猜测值
p0 = np.array([1., 2., 3.])


result = least_squares(residual, p0, args=(x, y))


print("拟合参数:", result.x)
X = np.linspace(1, 10, 100)
Y = f(X)
plt.plot(X, Y, label="function")
plt.scatter(x, y, label="points")
plt.pause(0.01)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/818264.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python入门一

目录&#xff1a; python基本操作python基本数据类型python字符串基本操作python的运算符python控制流-判断python控制流-循环python常用数据结构-列表python常用数据结构-元组python常用数据结构-集合python常用数据结构-字典python函数python函数进阶与参数处理pythonlambda…

【7.31】C++编写7254是一个不寻常的数,可以表示为7254 = 39 x 186,这个式子中1~9每个数字正好出现一次

题目题干 7254是一个不寻常的数&#xff0c;因为它可以表示为7254 39 x 186&#xff0c;这个式子中1~9每个数字正好出现一次&#xff0c;输出所有这样的不同的式子&#xff08;乘数交换被认为是相同的式子&#xff09;。结果小的先输出&#xff1b;结果相同的&#xff0c;较小…

IPsec VPN小实验

IPSec 是什么&#xff1a; IPSec是一个框架&#xff0c;它不是具体指某个协议&#xff0c;而是定义了一个框架&#xff0c;由各种协议组和协商而成。该框架涉及到的主要有加密算法、验证算法、封装协议、封装模式、密钥有效期等等。 IPSecVPN建立的前提&#xff1a;要想在两个…

【性能测试】性能测试的概念、策略、指标

一、性能测试的概念 1.1 什么是性能 - 时间&#xff1a;系统处理用户请求的响应时间 -资源&#xff1a;系统运行过程中&#xff0c;系统资源的消耗情况 1.2 什么是性能测试 使用自动化工具&#xff0c;模拟不同的场景&#xff0c;对软件各项性能指标进行测试和评估的过程 …

适配器模式与装饰器模式对比分析:优雅解决软件设计中的复杂性

适配器模式与装饰器模式对比分析&#xff1a;优雅解决软件设计中的复杂性 在软件设计中&#xff0c;我们常常面临着需要将不同接口或类协调工作的情况&#xff0c;同时还要满足灵活性和可扩展性的需求。为了应对这些挑战&#xff0c;适配器模式和装饰器模式应运而生&#xff0c…

12-4_Qt 5.9 C++开发指南_创建和使用共享库

文章目录 1. 创建共享库2. 使用共享库2.1 共享库的调用方式2.2 隐式链接调用共享库2.3 显式链接调用共享库 1. 创建共享库 除了静态库&#xff0c;Qt 还可以创建共享库&#xff0c;也就是 Windows 平台上的动态链接库。动态链接库项目编译后生成 DLL 文件&#xff0c;DLL 文件…

【机器学习】Overfitting and Regularization

Overfitting and Regularization 1. 过拟合添加正则化2. 具有正则化的损失函数2.1 正则化线性回归的损失函数2.2 正则化逻辑回归的损失函数 3. 具有正则化的梯度下降3.1 使用正则化计算梯度&#xff08;线性回归 / 逻辑回归&#xff09;3.2 正则化线性回归的梯度函数3.3 正则化…

SpringCloud集成OpenTelemetry的实现

SpringCloud项目做链路追踪&#xff0c;比较常见的会集成SleuthZipKin来完成&#xff0c;但这次的需求要集成开源框架OpenTelemetry&#xff0c;这里整理下实现过程。相关文章&#xff1a; 【SpringCloud集成SleuthZipkin进行链路追踪】 【OpenTelemetry框架Trace部分整理】 …

JavaSE运算符

大体上&#xff0c;与C语言差不多&#xff0c;不同的地方&#xff0c;我用红色字体标注了 算术运算符 1. 基本四则运算符&#xff1a;加减乘除模 ( - * / %) int a 10 ; int b 20 ; System . out . println ( a b ); // 30 System . out . println ( a - b…

校园跑腿小程序开发需要哪些核心功能?

提起校园跑腿小程序大家都不陌生&#xff0c;尤其是对上大学的伙伴们来说,更是熟悉得不能再熟悉了&#xff0c;和我们的生活息息相关&#xff0c;密不可分。 对于现在的年轻人来说&#xff0c;网购是非常简单和方便的一种购物方式&#xff0c;随之快递也会越来越多。在我们国家…

白盒测试和黑盒测试的区别是什么?

前言 曾言道“黑猫&#xff0c;白猫&#xff0c;只要能抓住老鼠就是好猫”。我们的测试亦是如此&#xff0c;不管是黑盒测试还是白盒测试&#xff0c;只要能测试出来bug&#xff0c;可以找出问题所在&#xff0c;保障软件质量就是好的测试方法。 对于刚入门的软件测试小白来说…

【Git系列】Git到远程仓库

&#x1f433;Git到远程仓库 &#x1f9ca;1. github账号注册&#x1f9ca;2. 初始化本地仓库&#x1f9ca;3. 创建GitHub远程仓库&#x1f9ca;4. 给本地仓库起别名&#x1fa9f;4.1 查看远程库的连接地址&#x1fa9f;4.2 起别名 &#x1f9ca;5. git推送操作&#x1f9ca;6.…

【SEO基础】百度权重是什么意思及网站关键词应该怎么选?

百度权重是什么意思及网站关键词应该怎么选&#xff1f; 正文共&#xff1a;3253字 20图 预计阅读时间&#xff1a;9分钟 ​ 1.什么是网站权重&#xff1f; 这段时间和一些朋友聊到网站权重以及关键词&#xff0c;发现蛮多人对于这两个概念的认知还是存在一些错误的&#xf…

【Python】PySpark 数据计算 ② ( RDD#flatMap 方法 | RDD#flatMap 语法 | 代码示例 )

文章目录 一、RDD#flatMap 方法1、RDD#flatMap 方法引入2、解除嵌套3、RDD#flatMap 语法说明 二、代码示例 - RDD#flatMap 方法 一、RDD#flatMap 方法 1、RDD#flatMap 方法引入 RDD#map 方法 可以 将 RDD 中的数据元素 逐个进行处理 , 处理的逻辑 需要用外部 通过 参数传入 map…

RL— 深度强化学习简介

一、说明 深度强化学习是关于从我们看到和听到的东西中采取最好的行动。不幸的是&#xff0c;强化学习强化学习在学习概念和术语方面存在很高的障碍。在本文中&#xff0c;我们将介绍深度强化学习&#xff0c;并概述一般情况。然而&#xff0c;我们不会回避方程式和术语。它们提…

Linux虚拟机中安装MySQL5.6.34

目录 第一章、xshell工具和xftp的使用1.1&#xff09;xshell下载与安装1.2&#xff09;xshell连接1.3&#xff09;xftp下载安装和连接 第二章、安装MySQL5.6.34&#xff08;不同版本安装方式不同)2.1&#xff09;关闭防火墙&#xff0c;传输MySQL压缩包到Linux虚拟机2.2&#x…

canvas实现图片平移,缩放的例子

最近有个水印预览的功能&#xff0c;需要用到canvas 绘制&#xff0c;canvas用的不是很熟&#xff0c;配合chatAI 完成功能。 效果如下 代码如下 原先配置是响应式的&#xff0c;提出来了就不显示操作了&#xff0c;模拟值都写死的 界面给大家参考阅读。 <!DOCTYPE html…

springboot基础--springboot配置说明

一、springboot中的配置文件 1、springboot为什么还需要用配置文件 方便我们修改springboot默认的配置;我们有其他的信息需要保存在配置文件中; 2、springboot中的配置文件有哪些 properties配置文件;yml配置文件; 3、springboot中的配置文件使用中注意事项 文件放入在sr…

黑客技术(网络安全)学习笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识&#xff0c;可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题&#xff0c;可以帮助您更好地解决网络安全的原理和技术…

Java版本spring cloud + spring boot企业电子招投标系统源代码+ 支持二次开+定制化服务

&#xfeff; 电子招标采购软件 解决方案 招标面向的对象为供应商库中所有符合招标要求的供应商&#xff0c;当库中的供应商有一定积累的时候&#xff0c;会节省大量引入新供应商的时间。系统自动从供应商库中筛选符合招标要求的供应商&#xff0c;改变以往邀标的业务模式。招…