Closed hzgzh closed 4 years ago
I think the problem is that your objective function is not a scalar, it's a distribution. I'm not sure if it makes sense to have the decision variable be uncertain, it makes more sense if the parameters of the cost function are uncertain. Here's an example where the problem parameters are uncertain and where the objective is reduced to a scalar
Example:
julia> const p1, p2 = 1 ∓ 0.3, 100 ∓ 5
(1.0 ± 0.3, 100.0 ± 5.0)
julia> f(x) = maximum((p1 - x[1])^2 + p2 * (x[2] - x[1]^2)^2)
f (generic function with 1 method)
julia> x = [0.5, 0.5]
2-element Array
{Float64,1}:
0.5
0.5
julia> res = optimize(f, x);
julia> @show res.minimizer
res.minimizer = [0.9999999905310097, 0.9999984765966677]
2-element Array{Float64,1}:
0.9999999905310097
0.9999984765966677
learn lot,need optim to support
ERROR: MethodError: no method matching -(::Particles{Float64,2000}, ::Array{Float64,1}) Closest candidates are: -(::Particles{T,N}) where {T, N} at C:\Users\Administrator.julia\packages\MonteCarloMeasurements\J2g8U\src\register_primitive.jl:95 -(::Real, ::Complex{Bool}) at complex.jl:304 -(::Real, ::Complex) at complex.jl:316 ... Stacktrace: [1] (::Statistics.var"#8#9"{Array{Float64,1}})(::Particles{Float64,2000}) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:219 [2] _mapreduce(::Statistics.var"#8#9"{Array{Float64,1}}, ::typeof(+), ::IndexLinear, ::Array{Particles{Float64,2000},1}) at .\reduce.jl:400 [3] _mapreduce_dim(::Function, ::Function, ::NamedTuple{(),Tuple{}}, ::Array{Particles{Float64,2000},1}, ::Colon) at .\reducedim.jl:312 [4] #mapreduce#580 at .\reducedim.jl:307 [inlined] [5] mapreduce(::Function, ::Function, ::Array{Particles{Float64,2000},1}) at .\reducedim.jl:307 [6] centralize_sumabs2(::Array{Particles{Float64,2000},1}, ::Array{Float64,1}) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:220 [7] _varm(::Array{Particles{Float64,2000},1}, ::Array{Float64,1}, ::Bool, ::Colon) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:307 [8] #varm#11 at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:297 [inlined] [9] _var at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:340 [inlined] [10] #var#15 at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:335 [inlined] [11] var at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\Statistics\src\Statistics.jl:335 [inlined] [12] nmobjective(::Array{Particles{Float64,2000},1}, ::Int64, ::Int64) at C:\Users\Administrator.julia\packages\Optim\SFpsz\src\multivariate\solvers\zeroth_order\nelder_mead.jl:104 [13] initial_state(::NelderMead{Optim.AffineSimplexer,Optim.AdaptiveParameters}, ::Optim.Options{Float64,Nothing}, ::NonDifferentiable{Particles{Float64,2000},Array{Particles{Float64,2000},1}}, ::Array{Particles{Float64,2000},1}) at C:\Users\Administrator.julia\packages\Optim\SFpsz\src\multivariate\solvers\zeroth_order\nelder_mead.jl:171 [14] optimize(::NonDifferentiable{Particles{Float64,2000},Array{Particles{Float64,2000},1}}, ::Array{Particles{Float64,2000},1}, ::NelderMead{Optim.AffineSimplexer,Optim.AdaptiveParameters}, ::Optim.Options{Float64,Nothing}) at C:\Users\Administrator.julia\packages\Optim\SFpsz\src\multivariate\optimize\optimize.jl:33 [15] optimize(::Function, ::Array{Particles{Float64,2000},1}; inplace::Bool, autodiff::Symbol, kwargs::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}) at C:\Users\Administrator.julia\packages\Optim\SFpsz\src\multivariate\optimize\interface.jl:64 [16] optimize(::Function, ::Array{Particles{Float64,2000},1}) at C:\Users\Administrator.julia\packages\Optim\SFpsz\src\multivariate\optimize\interface.jl:58
[18] eval(::Module, ::Any) at .\boot.jl:331 [19] eval_user_input(::Any, ::REPL.REPLBackend) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.4\REPL\src\REPL.jl:86 [20] run_backend(::REPL.REPLBackend) at C:\Users\Administrator.julia\packages\Revise\tV8FE\src\Revise.jl:1165 [21] top-level scope at none:0