R

时间:2018-02-21 10:37:05

标签: r excel iteration solver maximization

我正在尝试在R中进行最大化,这是我之前在Excel中使用求解器完成的。问题是我不知道如何处理它(我在R中没有很好的水平)。

让我们谈谈我的数据。我有26个瑞士州和瑞士政府(这是26个州的价值之和)及其人口和“财富”。所以我有27个变量观察。我不确定以下描述是否有用,但我还是把它们放了。从这里,我用while循环计算一些变量。对于每个州[i]:

  • 资源潜力=平均值(财富2011 [i],财富2012 [i],财富2013 [i])
  • 人口平均值=平均值(人口2011 [i],人口2012 [i],人口2013 [i])
  • 人均资源潜力= 1000 *资源潜力[i] /人口[i]
  • 资源指数= 100 *资源潜力人均[i] /资源潜力[瑞士政府]

这里是我使用的循环的一个小例子:

    RI=0
    i = 1
    while(i<28){
      RI[i]=resource potential capita [i]/resource potential capita [27]*100
      i = i+1
    }

瑞士政府(i = 27)的资源指数(RI)为100,因为我们将瑞士政府的资源潜力(当i = 27)除以自己并乘以100因此,所有RI> 100的州都是富州,而其他(IR <100)是贫穷的州。直到这里,没有问题。我刚刚解释了我是如何构建数据集的。

现在我面临的问题是:我必须创建变量加权差异(wd)。它取值:

  • 0 如果RI> 100(富州)
  • (100-RI [i])^(1 + P)* Pop [i] 如果RI <100(贫穷的州)

我像这样创建这个变量:(对不起代码的弱点,我尽我所能)。

wd=-1
i = 1
a = 0
c = 0
tot = 0
while(i<28){
  if(i == 27) {
    wd[i] = a
  } else if (RI[i] < 100) {
    wd[i] = (100-RI[i])^(1+P)*Pop[i]
    c = wd[i]
    a = a+c
  } else {
    wd[i]= 0
  }
  i = i+1
}

但是,我现在不是“p”的值。它是介于0和1之间的值。要查找p的值,我必须使用以下功能进行最大化:

  • RI_26 = 65.9 ,这是我数据中RI的最小值
  • RI_min = 100 - ((x * wd [27])/((1 + p)* z * 100))^(1 / p),其中x和z是固定值(x = 8'677,z = 4'075'977'077)和wd [27]为每个州的wd之和。

我们在两个等式中有 p :RI_min和wd。为了在Excel中解决它,我使用了具有以下功能的Excel解算器:

  • p_dot = RI_26 / RI_min * p ==&gt; p_dot = [65.9 / 100 - ((x * wd [27])/((1 + p)* z * 100))^(1 / p)] * p
  • RI_26 = RI_min ==&gt; 65.9 = 100 - ((x * wd [27])/((1 + p)* z * 100))^(1 / p)< / LI>

在Excel中, p 是我的可变单元格(唯一允许更改的值), p_dot 是我定义的目标, RI_26 = RI_min 是我的约束。

所以我想最大化 p ,我不知道如何在R中这样做。我的主要问题是 RI_min中存在 p wd 。我们需要做一个迭代来解决它,但这离我的技能太远了。

是否有人能够帮助我提供我提供的信息?

2 个答案:

答案 0 :(得分:0)

你应该研究一下optim函数。 在这里,我将尝试给你一个非常简单的解释,因为你说你在R中没有一个非常好的水平。

假设我有一个函数f(x),我想要最大化,因此我想找到给出最大值f(x)的参数x。

要做的第一件事就是定义函数,在R中你可以用:

来完成
myfunction<- function(x) {...}

定义了函数后,我可以使用以下命令对其进行优化:

optim(par,myfunction)

其中par是函数初始参数的向量,myfunction是需要优化的函数。请记住,optim执行最小化,但如果控制$ fnscale为负,它将最大化。另一种策略是改变功能(即改变符号)以适应问题。

希望这有帮助, 马可

答案 1 :(得分:0)

根据您提供的描述,如果我没有弄错,看起来您需要做的一切只是一个等式。 特别是你有以下两个表达式:

RI_min = 100-((x*y)/((1+p)*z*100))^(1/p)

并且,由于x,y,z是固定的,唯一的变量是p。 此外,如果RI_26 = RI_min,则得到:

65.9 =100-((x*y)/((1+p)*z*100))^(1/p)

插入您提供的x,y和z的值,这将产生

p=0.526639915936052

我不明白你究竟想要最大限度地发挥作用。