小编Stu*_*art的帖子

R中约束优化的非单调输出

问题

constOptim函数是R给我一组参数估计.这些参数估计值是一年中12个不同点的消费值,应该是单调递减的.

我需要它们是单调的,并且每个参数之间的间隙都适合我想到的应用程序.出于此目的,支出值中的模式很重要,而不是绝对值.我想在优化术语中,这意味着我需要与参数估计值的差异相比较小的容差.

最小工作示例(具有简单的实用功能)

# Initial Parameters and Functions
Budget          = 1
NumberOfPeriods = 12
rho = 0.996
Utility_Function <- function(x){ x^0.5 }
Time_Array = seq(0,NumberOfPeriods-1)

# Value Function at start of time.
ValueFunctionAtTime1   = function(X){
  Frame                = data.frame(X, time = Time_Array)
  Frame$Util           = apply(Frame, 1, function(Frame) Utility_Function(Frame["X"]))
  Frame$DiscountedUtil = apply(Frame, 1, function(Frame) Frame["Util"] * rho^(Frame["time"])) 
  return(sum(Frame$DiscountedUtil))
}

# The sum of all spending in the year should be less than than the annual budget.
# This gives the ui …
Run Code Online (Sandbox Code Playgroud)

r mathematical-optimization

9
推荐指数
1
解决办法
502
查看次数

获取 Julia 方法的关键字名称

我有一个类似的功能

function f(a = 1; first = 5, second = "asdf")
    return a
end
Run Code Online (Sandbox Code Playgroud)

有没有办法以编程方式返回带有关键字参数名称的向量。就像是:

kwargs(f)
# returns [:first, :second]
Run Code Online (Sandbox Code Playgroud)

我意识到这可能会因函数名的多种方法而变得复杂。但我希望如果指定了确切的方法,这仍然是可能的。例如:

kwargs(methods(f).ms[1])
# returns [:first, :second]
Run Code Online (Sandbox Code Playgroud)

keyword-argument julia

7
推荐指数
1
解决办法
73
查看次数

组内插值

目标

我想在数据帧中的组内插值.这将为数据帧中的每个组提供任意数量的中间点.

最小的工作示例

我有一个数据帧,如:

OldDataFrame <- data.frame(ID   = c(1,1,1,2,2,2),
                           time = c(1,2,3,1,2,3),
                           Var1 = c(-0.6 , 0.2, -0.8 , 1.6 , 0.3 , -0.8),
                           Var2 = c(0.5 , 0.7, 0.6 , -0.3 , 1.5 , 0.4) )
Run Code Online (Sandbox Code Playgroud)

我想得到一个像这样的函数:

TimeInterpolateByGroup <- function(DataFrame, 
                                   GroupingVariable, 
                                   TimeVariable,
                                   TimeInterval){
  #Something Here
}
Run Code Online (Sandbox Code Playgroud)

这将是方便的,如果我没有指定列上做到这一点,它可以像每一个数字列自动工作numcolwiseplyr

所以我可以像这样应用它:

NewDataFrame = TimeInterpolateByGroup(DataFrame         = OldDataFrame,
                                      GroupingVariable  = "ID",
                                      TimeVariable      = "time",
                                      TimeInterval      = 0.25)
Run Code Online (Sandbox Code Playgroud)

获取NewDataFrame为:

NewDataFrame = data.frame(ID    =   c(  1,  1,  1,  1,  1,  1,  1,  1, …
Run Code Online (Sandbox Code Playgroud)

interpolation r plyr

6
推荐指数
1
解决办法
1319
查看次数

将固定和可变参数传递给 Optimx

这是一个语法问题,可能有一个简单的解决方案,但我无法在 optimx 包的 SO 上的任何地方找到它。

最小的工作示例和问题

我有一个功能,如:

ToOptimise = function(a,b,d,e){
(a-1)^2 + (b-2)^2 + (d-3)^2 +(e-4)^2
}
Run Code Online (Sandbox Code Playgroud)

我可以很容易地优化 mle2 中的选择参数:

library(bbmle)

Calib2 = mle2(ToOptimise,
              start = list(a = 1, d = 10),
              fixed = list(b = 2, e = 2))
Run Code Online (Sandbox Code Playgroud)

这并不是真正正确的工具,因为它不是最大似然问题。

我想找到一种方法来轻松地将固定和可优化的参数传递给 Optimx

我计划进行多次校准,随时固定不同的参数,因此不想在某些参数中重做函数硬编码。

我的尝试不起作用

library(optimx)

ToOptimiseVector = function(Theta){
  a = Theta[1]
  b = Theta[2]
  d = Theta[3]
  e = Theta[4]
  (a-1)^2 + (b-2)^2 + (d-3)^2 +(e-4)^2
}


Calib1  = optimx( par = c(1,2,1,2),
                  fn = ToOptimiseVector,
                  Theta[2] = 2, …
Run Code Online (Sandbox Code Playgroud)

r mathematical-optimization

5
推荐指数
1
解决办法
2149
查看次数

相当于 Julia 中 R 的 dput

有没有办法将 Julia 中的对象转换为生成相同对象的代码表示?我基本上是在寻找与 Rdput函数等效的函数。

因此,如果我有一个对象,例如:

A = rand(2,2)
# Which outputs
>2×2 Array{Float64,2}:
 0.0462887  0.365109
 0.698356   0.302478
Run Code Online (Sandbox Code Playgroud)

我可以做一些类似的dput(A)事情,将类似以下内容打印到控制台,可以复制粘贴以便能够复制对象:

[0.0462887  0.365109; 0.698356   0.302478]
Run Code Online (Sandbox Code Playgroud)

julia

4
推荐指数
1
解决办法
124
查看次数

朱莉娅的Refs和Broadcasting之间有什么联系

对于两个对象A,B我们以前可以[A*A, A*B]使用代码获取向量A .* [A, B].根据Julia 0.7中的弃用警告,似乎新方法是使用第一个A的引用.所以它变成了Ref(A) .* [A,B].

似乎参考和广播业务之间没有强大的联系.这里有什么链接以及为什么使用参考首选(至少通过弃用警告)?

最小工作示例

import Base.*
struct example
    num::Int
end
function *(lhs::example, rhs::example)
    return example(lhs.num * rhs.num)
end
A = example(2)
B = example(4)
# Previously this could be done as follows.
A .* [A, B]
# Now we need to use Refs
Ref(A) .* [A, B]
Run Code Online (Sandbox Code Playgroud)

julia

4
推荐指数
1
解决办法
167
查看次数

朱莉娅:如何在朱莉娅中随机置换一个载体?

我有一个随机数的向量,我想使用randperm()函数随机置换,如下所示,但它不起作用.

X=rand(100000) # a vector of 100000 random elements
Y=randperm(X) # want to permute randomly the vector x
Run Code Online (Sandbox Code Playgroud)

返回的错误是: 错误:MethodError:没有方法匹配./boot.jl:237中的eval(:: Module,:: Any)中的randperm(:: Array {Float64,1})

谢谢

julia permute

2
推荐指数
1
解决办法
4379
查看次数

在Julia中将数组的集合折叠为单集

如何以下列方式将一组集合折叠为包含所有唯一集合元素的单个集合?

Array_of_sets = Set{String}[Set(["EUR", "GBP", "USD"]), Set(["AUD"])]
# do something to Array_of_sets which produces
Set{String}(["EUR", "GBP", "USD", "AUD"])
Run Code Online (Sandbox Code Playgroud)

union,vcat并且unique似乎没有在这种情况下工作.

set julia

2
推荐指数
1
解决办法
116
查看次数

广播代码之间的代数运算

我有两个dicts,我想从两个dicts中减去匹配值以生成第三个dict.

A = Dict("w" => 2, "x" => 3)
B = Dict("x" => 5, "w" => 7)
# Ideally I could go B .- A and get a dict like 
C = Dict("w" => 5, "x" => 2)
# but I get ERROR: ArgumentError: broadcasting over dictionaries and `NamedTuple`s is reserved
Run Code Online (Sandbox Code Playgroud)

一个丑陋的解决方案是重载减法运算符,但我不想为像dict这样的内置类型重载,因为它害怕破坏其他代码.

import Base.-
function -(dictA::Dict, dictB::Dict)
   keys_of_A = keys(dictA)
   subtractions = get.(Ref(dictB), keys_of_A, 0) .- get.(Ref(dictA), keys_of_A, 0)
   return Dict(keys_of_A .=> subtractions)
end
Run Code Online (Sandbox Code Playgroud)

是否有一种更清晰的方法来对匹配来自不同dicts的值进行代数运算?

dictionary julia

1
推荐指数
1
解决办法
206
查看次数