r - 在 R 中寻找约束满足算法

标签 r algorithm optimization combinatorics discrete-optimization

我认为我有一个相当简单的约束满足问题,但找不到用于实现算法的合适包。

我希望对一些点的数据集进行子集化。每个点都带有其他数据点的列表,如果要包含它,则必须从子集中排除它。例如:

  points Must_Exclude
1      A            B,E
2      B            
3      C            F,G,H
4      D            
5      E            D
6      F            
7      G            H
8      H            

我想在不违反任何规则的情况下最大化我可以放入我的子集中的点数。我的数据包含 1000 个点。为此类问题设置的算法名称是什么?它们是我应该查看的 R 中的任何包吗?我应该看看其他编程语言吗?

最佳答案

作为整数线性规划 (ILP) 问题求解八 二元变量,每个代表来自的数据点之一 A 到 H,例如在包 lpSolve 的帮助下。

## Define inputs
obj <- rep(1, 8)                # 8 binary variables for A..H
A <- matrix(rbind(              # constraints:
    c(1,1,0,0,0,0,0,0),         # A <> B
    c(1,0,0,0,1,0,0,0),         # A <> E
    c(0,0,1,0,0,1,0,0),         # C <> F
    c(0,0,1,0,0,0,1,0),         # C <> G
    c(0,0,1,0,0,0,0,1),         # C <> H
    c(0,0,0,1,1,0,0,0),         # D <> E
    c(0,0,0,0,0,0,1,1)), 7, 8)  # G <> H
dir <- rep("<=", 7)             # all constraints '<='
rhs <- rep(1, 7)                # all right hand sides = 1
## maximise solution
sol <- lpSolve::lp("max", obj, A, dir, rhs,
                   all.bin = TRUE, num.bin.solns = 1)
sol$solution
## [1] 0 1 0 0 1 1 0 1

即一个解是(B, E, F, H);当然,可能有 其他相同大小的组合,例如(A、D、F、G)。 您可以通过设置选项 num.bin.solns 获得更多解决方案 到某个值 > 1。

关于r - 在 R 中寻找约束满足算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54486732/

相关文章:

r - R 语言中的 plot 函数不考虑绘图类型

r - 如何在不停止执行脚本的情况下使用 tryCatch withTimeout 来使 Rcpp 函数超时

r - 使用 purrr 将计数序列添加到 R 中的嵌套数据帧

r - 根据 R 中其他列中的最早日期值创建新列

c++ - 虚函数和性能 - C++

mysql - 优化 MySql 查询以避免使用 "Using filesort"

algorithm - 具有最大和加约束的最长递增子序列 - 可以跳过允许的元素数量

python - 使用 Python 快速排序

java - 滑下金字塔时通过位移来决定向左或向右的方向

java - 如何从 HackerEarth 优化这个练习?