【问题标题】:Fminbox Constrained Optimisation JuliaFminbox 约束优化 Julia
【发布时间】:2015-11-06 11:54:38
【问题描述】:

当我运行下面的代码时,fminbox 或 Optim.autodiff 函数似乎创建了一个 Array{Dual{Float64},1} 类型的向量,因为我收到错误“fbellmanind has no method matching...Array{双{Float64},1}”。我已经指定函数 fbellmanind 接受 Array{Any,1} 但没有运气。有什么想法吗?

function fbargsolve(x::Vector)
 fbellmanind(probc,EV,V,Ind,x,V0,VUnemp0,Vnp,Vp,q,obj,assets,EmpState,i)
 fbellmanfirm(probc,poachedwage,minw,x,jfirm1,jfirm0,Ind,i)
 @inbounds for ia in 1:na
  Vnp[ia]=V[ia]
  Indnp[ia]=Ind[ia]
  firmratio[ia]=jfirm1[ia]/jfirmres[ia]
  hhratio[ia]=((Vnp[ia]-VUnemp0[ia])/(Vp[ia]-VUnemp0[ia]))
  end
  Crit_bwr=vnormdiff(firmratio,hhratio,Inf)
  return Crit_bwr
end

f=fbargsolve 
df = Optim.autodiff(f, Float64, na)
x0=vec(bargwage0)
l=vec(max(reswage,minw))
u=vec(poachedwage*ones(na))

sol=fminbox(df,x0,l,u)

【问题讨论】:

  • 注意Array{T, 1} !<: Array{Any,1} where T<:Any

标签: optimization julia


【解决方案1】:

参考Julia doc中很重要的一段

Julia 的类型参数是不变的......

您至少可以遵循以下两种可能的解决方案:

1- 改变你的函数声明,最好是明确地使用正确的数据类型Array{Dual{Float64},1} 但如果你喜欢一个通用的方式:

使用参数数据类型:

julia> function fbellmanind{T}(::Array{T,1})
  "OK"
end
julia> fbellmanind(["test"])
 "OK"

2- 输入你的论点

julia> function fbellmanind(::Array{Any,1})
  "OK"
end
julia> fbellmanind(Any["test"])
 "OK"

【讨论】:

  • 最好明确地做convert(Array{Dual{Float64},1}, x)而不是使用::Array{Any,1}--Any["test"]对,因为当所有的东西都可以合法地传递给fbellmanind时,它很容易出错。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
相关资源
最近更新 更多