我有一组 n 个实数。我还有一组函数,
f_1, f_2, ..., f_m.
这些函数中的每一个都将数字列表作为其参数。我也有一组 m 范围,
[l_1, u_1], [l_2, u_2], ..., [l_m, u_m].
我想重复选择 k 个元素的子集 {r_1, r_2, ..., r_k} 使得
l_i <= f_i({r_1, r_2, ..., r_k}) <= u_i for 1 <= i <= m.
请注意,函数是平滑的。更改 {r_1, r_2, ..., r_k} 中的一个元素不会使 f_i({r_1, r_2, ..., r_k}) 发生太大变化。平均值和方差是常用的两个f_i。
这些是我需要满足的 m 个约束。
此外,我想这样做,以便我选择的子集集均匀分布在满足这些 m 个约束的所有大小为 k 的子集的集上。不仅如此,我还想以一种有效的方式做到这一点。它运行的速度取决于所有可能解决方案空间内的解决方案密度(如果这是 0.0,那么算法可以永远运行)。(假设 f_i(对于任何 i)可以在恒定时间内计算。)
请注意,n 足够大,我不能蛮力解决这个问题。也就是说,我不能只遍历所有 k 元素子集并找出满足 m 个约束的子集。
有没有办法做到这一点?
什么样的技术通常用于这样的 CSP?有人可以向我指出谈论此类问题的好书或文章的方向(不仅仅是一般的 CSP,而是涉及连续的 CSP,而不是离散值)?