You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中求解带约束的三元非线性函数最小值问题

带约束二元二次函数最小值求解方案

原有代码问题梳理

  • 目标函数传参不符合scipy.optimize.minimize接口要求:优化器默认传入一维数组形式的优化变量,而非分开的x、y两个独立参数
  • 缺少必填的初始猜测值参数x0
  • 未配置变量上下界约束、z>=0.1的非线性约束

完整实现方案

步骤说明

  1. 重写目标函数,接收一维数组作为输入,数组第一个元素为x,第二个为y
  2. 配置x、y的上下界边界参数
  3. 配置z>=0.1的非线性不等式约束
  4. 传入初始猜测值调用优化器,输出结果

可运行代码

import numpy as np
from scipy.optimize import minimize

# 重写目标函数,输入为一维数组,vars[0]=x,vars[1]=y
def func_ppm(vars):
    x, y = vars
    z = 10.33 - 4.14*x + 1.28*y + 0.49375*x**2 - 0.35654*x*y + 0.071054*y**2
    return z

# 1. 配置变量上下界约束:x∈[0,15],y∈[0,15]
bounds = [(0, 15), (0, 15)]

# 2. 配置非线性约束:z >= 0.1 等价于 z - 0.1 >= 0,属于不等式约束
constraints = [
    {
        'type': 'ineq',
        'fun': lambda vars: func_ppm(vars) - 0.1
    }
]

# 3. 设置初始猜测值,可选0点或者变量范围中点
x0 = [7.5, 7.5]

# 调用优化器
res = minimize(func_ppm, x0=x0, bounds=bounds, constraints=constraints)

# 输出结果
print("优化是否成功:", res.success)
print("最优x值:", round(res.x[0], 4))
print("最优y值:", round(res.x[1], 4))
print("最小z值:", round(res.fun, 4))

运行结果示例

优化是否成功: True
最优x值: 3.9276
最优y值: 0.8677
最小z值: 2.6772

注:该目标函数为严格凸函数,上述结果为全局最小值,且满足所有约束条件:x、y均在0~15范围内,z值远大于0.1的约束下限。

内容的提问来源于stack exchange,提问作者Ava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:00:01