我正在尝试在R中设置全局约束优化。

实验数据可能看起来像

set.seed(123)
data.frame(main.goal = abs(rnorm(100)),
                     minor.goal.1 = abs(rnorm(100)),
                     minor.goal.2 = abs(rnorm(100))) -> d2optim

mean(sort(d2optim$minor.goal.1,
                    decreasing = TRUE)[1:20]) -> minor.goal.1.treshhold
mean(sort(d2optim$minor.goal.2,
                    decreasing = TRUE)[1:20]) -> minor.goal.2.treshhold

我想在哪里找到20行的索引(ind)

编辑
  • 最大化mean(d2optim$main.goal[ind])
  • mean(d2optim$minor.goal.1[ind]) >= 0.3 minor.goal.1.treshhold
  • mean(d2optim$minor.goal.2[ind]) >= 0.5 minor.goal.2.treshhold

  • END EDIT

    有没有一种方法可以使用诸如lpSolve之类的任何线性编程软件包,而不是使用网格检查每个$ \ choose {100,20} $配置,然后对其进行排序?喜欢
    all_configuration_of_indexes <- combn(100, 20) # doesn't fit in RAM
    for( i in 1:length(all_configuration_of_indexes) ) {
       i <- all_configuration_of_indexes[[i]]
       if ( mean(d2optim$minor.goal.1[i]) >= 0.3 minor.goal.1.treshhold &
            mean(d2optim$minor.goal.2[i]) >= 0.5 minor.goal.2.treshhold) {
          res[[i]] <- mean(d2optim$major.goal[i])
       } else {
          res[[i]] <- 0
       }
    }
    res[[which(max(unlist(res) = unlist(res))]]
    

    我正在寻找100个行的最佳子集,该子集给出1个变量的最大平均值,但其其余2个变量的平均值不小于0.3 * minor.goal.1.treshhold nor 0.5 * minor.goal.2.treshhold

    最佳答案

    我不是线性编程专家,也不知道如何在R中实现它,但这就是我的想法。我将其视为整数线性规划问题,其建模如下:

    x1,...,x100-逻辑(即0到1之间的整数)变量,其中xi表示是否采用第i行数据。

    目标函数:

    x1 * d2optim $ main.goal [1] + ... + x100 * d2optim $ main.goal [100]-> max

    约束:

    0
    x1 + ... + x100 = 20

    x1 * d2optim $ minor.goal.1 [1] + ... + x100 * d2optim $ minor.goal.1 [100]> = c1

    x1 * d2optim $ minor.goal.2 [1] + ... + x100 * d2optim $ minor.goal.2 [100]> = c2

    而不是意味着我们可以在任何地方求和,并且c1,c2是足以满足您的问题说明的条件。

    关于r - R中的全局约束优化规范,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35481912/

    10-10 10:22