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

如何编写提升实验室工作效率的样本混样pooling算法

混样检测最优Pooling算法实现方案

最优混样组合计算方案

你描述的场景属于分组检测(Group Testing)的经典优化问题,核心目标是基于给定的阳性发生率最小化总检测次数,实现逻辑如下:

  • 首先计算单池最优容量:已知阳性发生率p=0.036,单样本期望检测次数的计算公式为 E = 1/k + 1 - (1-p)^k,其中k为单池样本量。遍历计算可得,当k=17时E取最小值0.28,即单样本平均仅需0.28次检测,比单检降低72%的工作量。
  • 跨种群分组策略:你支持任意拆分种群的前提下,无需按种群维度绑定分组,直接将所有207株样本按17株/池的最优大小拆分即可,初始仅需跑13次检测。如果需要保留种群溯源维度,可以优先将同种群样本凑满最优池大小,不足部分再跨种群拼接,降低后续阳性拆分的溯源成本。

阳性池高效拆分策略

根据实验室的运行模式可以二选一:

  • 递归二分拆分(适合小通量、逐轮出结果的场景):
    • 阳性池容量≤4时直接单检所有样本,该规模下拆分的检测成本高于直接单检
    • 阳性池容量>4时平均拆为2个子池分别检测,子池阴性则整组排除,子池阳性则继续按上述规则拆分,直到定位到阳性单株
      0.036的阳性率下,单个17样本的阳性池平均仅含0.6个阳性,二分法平均仅需额外5次检测即可定位阳性,加上初始1次池检测,总次数远低于全池单检。
  • 二进制编码矩阵法(适合高通量、单轮出结果的场景):
    给每个样本分配唯一的二进制编码,编码的每一位对应一个检测池的入组标识,编码位为1则加入对应池。最终根据阳性池的组合匹配编码即可直接定位所有阳性样本,无需等待上一轮检测结果。207个样本仅需8次检测即可一次性定位所有阳性,适合需要快速出结果的场景。

参考实现代码

最优池大小计算

import math
p = 0.036
min_expected = float('inf')
best_pool_size = 1
for k in range(2, 50):
    # 计算单样本期望检测次数
    expected = (1 / k) + 1 - pow(1 - p, k)
    if expected < min_expected:
        min_expected = expected
        best_pool_size = k
print(f"最优池大小:{best_pool_size},单样本期望检测次数:{round(min_expected, 3)}")

样本自动分组实现(基于给定种群数据)

data = {'pop':[1,2,3,4,5], 'size':[23,45,65,31,43]}
# 生成带种群标识的全量样本列表
all_samples = []
for pop_id, count in zip(data['pop'], data['size']):
    all_samples.extend([f"pop{pop_id}_sample_{idx}" for idx in range(count)])
# 按最优池大小拆分
best_pool_size = 17
pools = [all_samples[i:i+best_pool_size] for i in range(0, len(all_samples), best_pool_size)]
print(f"初始池总数:{len(pools)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:45:04