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

如何在R的paradox中生成带a>b约束的Sobol抽样设计?

解决paradox包中Sobol抽样的参数约束问题

你用.extra_trafo实现a > b约束没生效,是因为这个参数的作用是转换参数值,而非过滤不符合条件的样本。返回NULL不会让生成器丢弃该样本,而是直接保留原始值,所以约束起不到作用。

下面给两种可行的解决方案:

方案一:直接定义依赖型参数空间

把b的上限设为a,让参数空间本身就满足b < a,生成的样本天然符合约束:

test_ps <- paradox::ps(
  a = paradox::p_dbl(0, 1),
  # 让b的上限依赖a,自动保证b ∈ [0, a)
  b = paradox::p_dbl(0, expr = a)
)

# 生成Sobol设计
test <- paradox::generate_design_sobol(test_ps, n = 100)$data
# 验证约束
unique(test$a > test$b)

这种方法无需后续过滤,生成效率更高,样本分布也更均匀。

方案二:生成后过滤并补全样本

如果无法修改参数空间,可以先生成样本,过滤掉不符合a > b的部分,再循环补充直到达到目标数量:

test_ps <- paradox::ps(
  a = paradox::p_dbl(0, 1),
  b = paradox::p_dbl(0, 1)
)

target_n <- 100
final_data <- data.frame()

while(nrow(final_data) < target_n) {
  # 生成剩余需要的样本数
  need_n <- target_n - nrow(final_data)
  new_samples <- paradox::generate_design_sobol(test_ps, n = need_n)$data
  # 筛选符合条件的样本
  valid_samples <- new_samples[new_samples$a > new_samples$b, ]
  final_data <- rbind(final_data, valid_samples)
}

# 验证约束
unique(final_data$a > final_data$b)

这种方法适合参数空间无法修改的场景,但循环补全会增加一定计算开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:31:04