📌 目录

  1. scipy.optimize 模块简介
  2. 最小化问题:无约束与有约束优化
  3. 常见优化方法:minimizeleast_squares
  4. 多目标优化
  5. 示例:最小化函数与约束优化
  6. 出站链接与参考资料

1. scipy.optimize 模块简介

scipy.optimize 模块提供了一系列函数,用于求解最优化问题,包括无约束和有约束的最小化、最小二乘拟合、非线性方程求解等。它支持多种优化方法,如梯度下降法、牛顿法、遗传算法等。


2. 最小化问题:无约束与有约束优化

无约束优化

无约束优化是最常见的优化问题,其中目标函数的最小值不受任何约束。scipy.optimize 提供了 minimize 函数来处理这类问题。

from scipy.optimize import minimize

# 定义目标函数(最小化问题)
def objective(x):
    return x[0]**2 + x[1]**2  # 二次函数

# 初始猜测值
x0 = [1, 2]

# 调用 minimize 函数进行优化
result = minimize(objective, x0)

# 输出结果
print("最小值的位置:", result.x)
print("最小值:", result.fun)

有约束优化

有约束优化问题不仅需要最小化目标函数,还需要满足一定的约束条件。SciPy 提供了对线性和非线性约束的支持。

# 定义约束条件
def constraint(x):
    return x[0] + x[1] - 1  # x[0] + x[1] 应等于 1

# 初始猜测值
x0 = [0.5, 0.5]

# 约束条件的字典
cons = ({'type': 'eq', 'fun': constraint})

# 调用 minimize 函数进行优化
result = minimize(objective, x0, constraints=cons)

# 输出结果
print("最小值的位置:", result.x)
print("最小值:", result.fun)


3. 常见优化方法:minimizeleast_squares

minimize 函数

minimize 是 SciPy 中最常用的最小化函数,支持多种优化方法。例如,BFGS(拟牛顿法)、TNC(梯度投影法)等。

# 使用 BFGS 方法进行最小化
result = minimize(objective, x0, method='BFGS')

print("最小值的位置:", result.x)
print("最小值:", result.fun)

least_squares 函数

least_squares 函数用于解决最小二乘问题,适用于拟合数据或解过定方程组的优化问题。

from scipy.optimize import least_squares

# 定义残差函数
def residuals(x):
    return x[0] * np.exp(-x[1] * np.linspace(0, 10, 100)) - np.sin(np.linspace(0, 10, 100))

# 初始猜测值
x0 = [1, 1]

# 使用 least_squares 函数进行优化
result = least_squares(residuals, x0)

# 输出结果
print("最优参数:", result.x)
print("最小化后的残差:", result.fun)


4. 多目标优化

在某些应用中,我们需要进行多目标优化,即同时优化多个目标函数。这类问题通常没有明确的最优解,而是找到一个帕累托最优解集(Pareto optimal solutions)。

虽然 scipy.optimize 没有直接提供多目标优化的函数,但可以通过将多个目标函数结合成一个复合目标函数来进行求解。

# 定义两个目标函数
def objective1(x):
    return x[0]**2 + x[1]**2

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

# 合并目标函数
def combined_objective(x):
    return objective1(x) + objective2(x)

# 初始猜测值
x0 = [1, 2]

# 使用 minimize 进行优化
result = minimize(combined_objective, x0)

# 输出结果
print("最优解位置:", result.x)
print("最小化后的目标值:", result.fun)


5. 示例:最小化函数与约束优化

无约束优化示例

from scipy.optimize import minimize

# 定义目标函数
def f(x):
    return (x - 2) ** 2

# 初始猜测
x0 = [0]

# 调用 minimize 函数进行最小化
res = minimize(f, x0)

# 输出结果
print("最小值位置:", res.x)
print("最小值:", res.fun)

有约束优化示例

# 定义目标函数
def objective(x):
    return (x[0] - 1)**2 + (x[1] - 2.5)**2

# 定义约束
def constraint(x):
    return x[0] + x[1] - 3

# 初始猜测值
x0 = [0, 0]

# 约束条件
cons = {'type': 'eq', 'fun': constraint}

# 使用 minimize 函数进行优化
res = minimize(objective, x0, constraints=cons)

# 输出结果
print("最优解:", res.x)


🔗 出站链接与参考资料

📘 官方文档

🎓 教程与实战