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

Gas mixture algorithm:从10种混合气中选最优子集及配比实现目标组分

如何从10种混合气体中配比出目标组分(比如33-33-33)?

嘿,这个问题本质是个**线性规划(Linear Programming, LP)**问题,核心是在满足组分约束的前提下,找到最贴合你需求的原料组合和配比。下面我给你拆解成可落地的实操步骤,结合你说的33-33-33目标来举例:

一、先把问题量化清楚

首先得把所有已知条件转化成数学变量,这样才好求解:

  • 把10种原料气体记为 ( G_1 ) 到 ( G_{10} ),每种的组分占比写成三元组:( G_i = (N_i, O_i, C_i) )(比如 ( N_i ) 是第i种气体中氮气的百分比,且三种组分加起来是100%)
  • 设每种原料的混合比例为 ( x_i )(( x_i \geq 0 ),不能用负的原料;同时所有 ( x_i ) 加起来等于1,代表总混合比例)
  • 你的目标组分是 ( (T_N, T_O, T_C) ),比如33-33-33就是 ( T_N=33%, T_O=33%, T_C=33% )

核心约束条件就是:

N₁x₁ + N₂x₂ + ... + N₁₀x₁₀ = T_N
O₁x₁ + O₂x₂ + ... + O₁₀x₁₀ = T_O
C₁x₁ + C₂x₂ + ... + C₁₀x₁₀ = T_C
∑xᵢ = 1
xᵢ ≥ 0

二、先明确“最优”到底指什么

你说的“最优”得先定个方向,不同的优先级解法不一样:

  • 最少原料种类:优先用最少的气体来混合,减少操作复杂度(比如能用2种就不用3种)
  • 最小成本:如果每种气体采购/使用成本不同,优先选总成本最低的组合
  • 最小组分偏差:如果没法完全达到目标,让三种组分的偏差平方和最小(近似最优)

三、实操步骤(以33-33-33目标为例)

1. 先筛选互补性强的原料

先扫一遍10种原料,挑出那些组分和目标互补的——比如有的原料氮气多但二氧化碳少,有的氧气多但氮气少,互补性强的更容易配出目标。
比如假设你手里有这三种:

  • G1: 40%N, 50%O, 10%C(缺CO₂)
  • G2: 20%N, 20%O, 60%C(缺N和O)
  • G3: 35%N, 30%O, 35%C(接近目标)
    这三个的互补性就很好,优先拿它们来试。

2. 尝试用最少原料求解

先试试2种原料能不能配出来:比如拿G2和G3,列方程组:

20x + 35(1-x) = 33  # 氮组分
20x + 30(1-x) = 33  # 氧组分
60x + 35(1-x) = 33  # 二氧化碳组分

解第一个方程得到x≈0.133,代入第二个方程算出来氧组分≈28.67%,和目标33%差太多,所以2种不行,得用3种。

用3种的话,解方程组:

40x + 20y + 35z = 33
50x + 20y + 30z = 33
10x + 60y + 35z = 33
x + y + z = 1

解出来x≈0.2,y≈0.2,z≈0.6,代入验证:
400.2 + 200.2 +35*0.6 = 8+4+21=33,完美符合目标!这就是一组可行的最优解(如果以最少原料为目标的话)。

3. 针对其他最优目标调整

如果你的最优目标是最小成本,就把每种原料的成本作为系数,把目标函数设为 minimize (Cost₁x₁ + Cost₂x₂ + ... + Cost₁₀x₁₀),再代入约束条件求解就行。

如果遇到无法精确匹配目标的情况(比如所有原料的氮气占比都低于30%,但目标要33%),那就求近似最优,用最小二乘法:把目标函数设为最小化三种组分的偏差平方和,同样带约束条件求解。

四、不用手算的工具推荐

不用自己啃方程组,这些工具能帮你快速求解:

  • Excel的规划求解插件:在数据选项卡里启用,设置好变量、约束和目标函数,一键出结果,适合新手
  • Python的scipy.optimize.linprog库:写几行代码就能解线性规划问题,适合有编程基础的人
  • 专业LP软件(比如Gurobi、CPLEX):适合大规模问题,但个人用前两个完全足够

给你个Python代码的小示例(针对33-33-33目标,假设你已经有了原料组分和成本数据):

from scipy.optimize import linprog

# 假设你有5种原料的组分(这里简化举例)
N = [40, 20, 35, 50, 10]
O = [50, 20, 30, 30, 60]
C = [10, 60, 35, 20, 30]
costs = [10, 15, 8, 12, 9]  # 每种原料的单位成本

# 约束矩阵:组分约束 + 总比例为1
A_eq = [N, O, C, [1]*5]
b_eq = [33, 33, 33, 1]
# 变量非负约束:每个x_i在0到1之间
bounds = [(0, 1) for _ in range(5)]

# 求解最小成本的配比
res = linprog(costs, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
print("最优配比(对应上面的5种原料):", res.x.round(4))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:18:44