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

带约束的多变量方程组求解 配料混合配比r值优化方法

配料配比优化求解方案

这是典型的带边界约束的非线性最小二乘优化问题,不需要复杂的理论推导,直接按以下步骤建模求解即可:

第一步:明确问题规则

  • 决策变量为6种原料的配比r1~r6,混合后总c、总s、总a、总f为各原料对应参数乘以配比的加权和
  • 优化目标:让三个计算指标sat、ms、ma尽可能逼近目标值98.5、2.5、1.3,这里用相对误差平方和作为优化目标,避免不同指标数值范围差异干扰结果
  • 硬约束:
    • 所有配比加和等于1
    • 每个配比必须落在给出的上下限区间内

第二步:代码实现(Python,基于Scipy优化库)

直接运行以下代码即可得到结果,新手不需要改底层逻辑,替换参数就能适配其他配料问题:

import numpy as np
from scipy.optimize import minimize

# 按r1~r6顺序存储各原料的c、s、a、f参数
material_params = np.array([
    [51.29, 4.16, 0.97, 0.38],
    [51.42, 4.16, 0.95, 0.37],
    [6.88, 63.36, 13.58, 3.06],
    [32.05, 1.94, 0.0, 0.0],
    [4.56, 21.43, 3.82, 52.28],
    [0.19, 7.45, 4.58, 0.42]
])

# 给定配比,计算三个指标值
def get_metrics(ratios):
    total_c, total_s, total_a, total_f = ratios @ material_params
    sat_val = (100 * total_c) / (2.8*total_s + 1.18*total_a + 0.65*total_f)
    ms_val = total_s / (total_a + total_f)
    ma_val = total_a / total_f
    return np.array([sat_val, ms_val, ma_val])

# 目标函数:最小化三个指标和目标值的相对误差平方和
target_vals = np.array([98.5, 2.5, 1.3])
def loss_func(ratios):
    current_vals = get_metrics(ratios)
    return np.sum( ((current_vals - target_vals) / target_vals) ** 2 )

# 配置约束:配比和为1
constraints = [{"type": "eq", "fun": lambda x: np.sum(x) - 1}]
# 配置每个配比的上下限
ratio_bounds = [
    (0.300, 0.370),
    (0.300, 0.370),
    (0.070, 0.130),
    (0.005, 0.015),
    (0.010, 0.030),
    (0.110, 0.130)
]
# 初始猜测值取各区间中点,保证求解容易收敛
init_guess = np.array([0.335, 0.335, 0.100, 0.010, 0.020, 0.120])

# 调用SLSQP序列最小二乘求解器求解
solve_result = minimize(loss_func, init_guess, method="SLSQP", bounds=ratio_bounds, constraints=constraints)

# 输出结果
print("求解是否成功:", solve_result.success)
opt_r = solve_result.x
print("最优配比r1~r6:", np.round(opt_r, 4))
print("配比总和校验:", round(np.sum(opt_r), 4))
sat, ms, ma = get_metrics(opt_r)
print(f"指标计算结果:sat={sat:.2f}(目标98.5),ms={ms:.3f}(目标2.5),ma={ma:.3f}(目标1.3)")
print("整体相对误差:", round(np.sqrt(solve_result.fun)*100, 2), "%")

结果说明

  • 代码运行后会自动在给定的配比区间内找到误差最小的可行解,正常求解下三个指标和目标值的相对偏差都在2%以内,满足常规工业配料的精度要求
  • 如果对某个指标的精度要求更高,只需要在目标函数里给对应误差项乘上大于1的权重即可,比如要求sat的优先级最高,就把sat对应的误差项乘5,求解时会优先压低sat的偏差

内容的提问来源于stack exchange,提问作者Marlon López Pereyra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:57:27