【问题标题】:Struggling with simple constraints in constrOptim与 constrOptim 中的简单约束作斗争
【发布时间】:2017-03-17 14:28:26
【问题描述】:

我在 R 中有一个函数,我希望在 optimconstrOptim 中的一些简单约束条件下最大化,但我正在努力让我的头脑围绕 ciui 来适应我的约束。

我的功能是:

negexpKPI <- function(alpha,beta,spend){

  -sum(alpha*(1-exp(-spend/beta)))

}

其中alphabeta 是固定向量,spend 是支出向量c(sp1,sp2,...,sp6),我想改变它以最大化negexpKPI 的输出。我想以三种不同的方式约束spend

1) 每个sp1,sp2,...,sp6 的最小值和最大值,即

0 &lt; sp1 &lt; 10000000 5000 &lt; sp2 &lt; 10000000 ...

2) 总和:

sum(spend)=90000000

3) 一些单个组件的总和:

sum(sp1,sp2)=5000000

有什么帮助吗?对任何其他可行的方法开放,但如果可能的话,更喜欢使用基础 R。

【问题讨论】:

  • 所有向量的长度为 6。我只想更改 spend 向量的分量。所以我们有alpha &lt;- c(a1,a2,...,a6)beta &lt;- c(b1,b2,...,b6),它们是固定的,我想更改c(sp1,sp2,...,sp6)以最大化功能。
  • 对不起,我使用的样本数据我没有完全检查过;真正的优化是针对具有 92 个约束的 40 个 sp 值,如果我在这里完全复制的话,会使问题更难以解释。我添加了一些额外的零以使其现在可行。

标签: r optimization constraints


【解决方案1】:

根据?constrOptim

The feasible region is defined by ‘ui %*% theta - ci >= 0’. The
starting value must be in the interior of the feasible region, but
the minimum may be on the boundary.

因此,只需以矩阵格式重写约束即可。请注意,恒等约束只是两个不等式约束。

现在我们可以在 R 中定义:

## define by column
ui = matrix(c(1,-1,0,0,1,-1,1,-1,
              0,0,1,-1,1,-1,1,-1,
              0,0,0,0,0,0,1,-1,
              0,0,0,0,0,0,1,-1,
              0,0,0,0,0,0,1,-1,
              0,0,0,0,0,0,1,-1), ncol = 6)

ci = c(0, -1000000, 5000, -1000000, 5000000, 90000000, -90000000)

补充说明

我认为这里有问题。 sp1 + sp2 = 5000000,但sp1sp2 都不能大于1000000。所以不存在可行域!请先解决您的问题。

抱歉,我使用的样本数据没有经过全面检查;真正的优化是针对具有 92 个约束的 40 个 sp 值,如果我在这里完全复制的话,会使问题更难解释。我添加了一些额外的零以使其现在可行。

【讨论】:

  • 我正在考虑将其标记为 stackoverflow.com/questions/5436630/… 的副本,但我发现该函数的文档非常混乱,以至于我认为在 SO 上有另一个很好的例子是一个“好主意”。赞成的答案,但不是问题。
  • 我认为您的回答是对我的补充。您的电话,但如果我是您,我建议将其“不被欺骗”至少一两天。可能会得到更多关注,这将是一件“好事”。我喜欢读你的答案。你教会了我一两件事。
  • 无意不尊重@42 的回答,我认为这非常清楚地列出了在最常见的约束类型中处理uici 的过程。无论如何将问题标记为欺骗,但答案非常清楚,我怀疑在其他地方有用。谢谢。
猜你喜欢
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2022-01-08
  • 2013-12-06
  • 2019-04-20
  • 1970-01-01
相关资源
最近更新 更多