FMU Parameter Optimization

Tutorial by Tobias Thummerer

License

# Copyright (c) 2021 Tobias Thummerer, Lars Mikelsons
# Licensed under the MIT license. 
# See LICENSE (https://github.com/thummeto/FMI.jl/blob/main/LICENSE) file in the project root for details.

Introduction to the example

This example shows how a parameter optimization can be set up for a FMU. The goal is to fit FMU parameters (and initial states), so that a reference trajectory is fit as good as possible.

Note, that this tutorial covers optimization without gradient information. Basically, FMI.jl supports gradient based optimization, too.

Other formats

Besides, this Jupyter Notebook there is also a Julia file with the same name, which contains only the code cells and for the documentation there is a Markdown file corresponding to the notebook.

Getting started

Installation prerequisites

DescriptionCommand
1.Enter Package Manager via]
2.Install FMI viaadd FMI
3.Install FMIZoo viaadd FMIZoo
4.Install Optim viaadd Optim
5.Install Plots viaadd Plots

Code section

To run the example, the previously installed packages must be included.

# imports
using FMI
using FMIZoo
using Optim
using Plots
using DifferentialEquations
┌ Warning: Error requiring `FMIImport` from `FMIZoo`
│   exception =
│    UndefVarError: `fmi2Load` not defined
│    Stacktrace:
│      [1] getproperty(x::Module, f::Symbol)
│        @ Base .\Base.jl:31
│      [2] top-level scope
│        @ C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:46
│      [3] eval
│        @ .\boot.jl:385 [inlined]
│      [4] eval
│        @ C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:6 [inlined]
│      [5] (::FMIZoo.var"#14#20")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:101
│      [6] macro expansion
│        @ timing.jl:395 [inlined]
│      [7] err(f::Any, listener::Module, modname::String, file::String, line::Any)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:47
│      [8] (::FMIZoo.var"#13#19")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:100
│      [9] withpath(f::Any, path::String)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:37
│     [10] (::FMIZoo.var"#12#18")()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:99
│     [11] listenpkg(f::Any, pkg::Base.PkgId)
│        @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:20
│     [12] macro expansion
│        @ C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:98 [inlined]
│     [13] __init__()
│        @ FMIZoo C:\Users\runneradmin\.julia\packages\FMIZoo\Yw7SL\src\FMIZoo.jl:42
│     [14] run_module_init(mod::Module, i::Int64)
│        @ Base .\loading.jl:1197
│     [15] register_restored_modules(sv::Core.SimpleVector, pkg::Base.PkgId, path::String)
│        @ Base .\loading.jl:1185
│     [16] _include_from_serialized(pkg::Base.PkgId, path::String, ocachepath::String, depmods::Vector{Any})
│        @ Base .\loading.jl:1129
│     [17] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt128)
│        @ Base .\loading.jl:1655
│     [18] _require(pkg::Base.PkgId, env::String)
│        @ Base .\loading.jl:2012
│     [19] __require_prelocked(uuidkey::Base.PkgId, env::String)
│        @ Base .\loading.jl:1886
│     [20] #invoke_in_world#3
│        @ .\essentials.jl:926 [inlined]
│     [21] invoke_in_world
│        @ .\essentials.jl:923 [inlined]
│     [22] _require_prelocked(uuidkey::Base.PkgId, env::String)
│        @ Base .\loading.jl:1877
│     [23] macro expansion
│        @ .\loading.jl:1864 [inlined]
│     [24] macro expansion
│        @ .\lock.jl:270 [inlined]
│     [25] __require(into::Module, mod::Symbol)
│        @ Base .\loading.jl:1827
│     [26] #invoke_in_world#3
│        @ .\essentials.jl:926 [inlined]
│     [27] invoke_in_world
│        @ .\essentials.jl:923 [inlined]
│     [28] require(into::Module, mod::Symbol)
│        @ Base .\loading.jl:1820
│     [29] eval
│        @ .\boot.jl:385 [inlined]
│     [30] include_string(mapexpr::typeof(REPL.softscope), mod::Module, code::String, filename::String)
│        @ Base .\loading.jl:2160
│     [31] execute_request(socket::ZMQ.Socket, kernel::IJulia.Kernel, msg::IJulia.Msg)
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\execute_request.jl:129
│     [32] #invokelatest#2
│        @ .\essentials.jl:892 [inlined]
│     [33] invokelatest
│        @ .\essentials.jl:889 [inlined]
│     [34] eventloop(socket::ZMQ.Socket, kernel::IJulia.Kernel)
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\eventloop.jl:26
│     [35] (::IJulia.var"#40#43"{IJulia.Kernel})()
│        @ IJulia C:\Users\runneradmin\.julia\packages\IJulia\Vl5w1\src\eventloop.jl:71
└ @ Requires C:\Users\runneradmin\.julia\packages\Requires\1eCOK\src\require.jl:51


Precompiling packages...




   2414.7 ms  ✓ DiffEqNoiseProcess → DiffEqNoiseProcessOptimExt
  1 dependency successfully precompiled in 4 seconds. 133 already precompiled.

Simulation setup

Next, the start time and end time of the simulation are set.

tStart = 0.0
tStop = 5.0
tStep = 0.1
tSave = tStart:tStep:tStop
0.0:0.1:5.0

Import FMU

In the next lines of code the FMU model from FMIZoo.jl is loaded and the information about the FMU is shown.

# we use an FMU from the FMIZoo.jl
fmu = loadFMU("SpringPendulum1D", "Dymola", "2022x"; type=:ME)
info(fmu)
#################### Begin information for FMU ####################
	Model name:			SpringPendulum1D
	FMI-Version:			2.0
	GUID:				{fc15d8c4-758b-48e6-b00e-5bf47b8b14e5}
	Generation tool:		Dymola Version 2022x (64-bit), 2021-10-08
	Generation time:		2022-05-19T06:54:23Z
	Var. naming conv.:		structured
	Event indicators:		0
	Inputs:				0


	Outputs:			0
	States:				2
		33554432 ["mass.s"]
		33554433 ["mass.v"]
	Parameters:			7
		16777216 ["mass_s0"]
		16777217 ["mass_v0"]
		16777218 ["fixed.s0"]
		16777219 ["spring.c"]
		16777220 ["spring.s_rel0"]
		16777221 ["mass.m"]
		16777222 ["mass.L"]
	Supports Co-Simulation:		true
		Model identifier:	SpringPendulum1D
		Get/Set State:		true
		Serialize State:	true
		Dir. Derivatives:	true
		Var. com. steps:	true
		Input interpol.:	true
		Max order out. der.:	1
	Supports Model-Exchange:	true
		Model identifier:	SpringPendulum1D
		Get/Set State:		true
		Serialize State:	true
		Dir. Derivatives:	true
##################### End information for FMU #####################

Now, the optimization objective (the function to minimize) needs to be defined. In this case, we just want to do a simulation and compare it to a regular sin wave.

s_tar = 1.0 .+ sin.(tSave)

# a function to simulate the FMU for given parameters
function simulateFMU(p)
    s0, v0, c, m = p # unpack parameters: s0 (start position), v0 (start velocity), c (spring constant) and m (pendulum mass)

    # pack the parameters into a dictionary
    paramDict = Dict{String, Any}()
    paramDict["spring.c"] = c 
    paramDict["mass.m"] = m

    # pack the start state
    x0 = [s0, v0]

    # simulate with given start stae and parameters
    sol = simulate(fmu, (tStart, tStop); x0=x0, parameters=paramDict, saveat=tSave)

    # get state with index 1 (the position) from the solution
    s_res = getState(sol, 1; isIndex=true) 

    return s_res
end

# the optimization objective
function objective(p)
    s_res = simulateFMU(p)

    # return the position error sum between FMU simulation (s_res) and target (s_tar)
    return sum(abs.(s_tar .- s_res))    
end
objective (generic function with 1 method)

Now let's see how far we are away for our guess parameters:

s0 = 0.0 
v0 = 0.0
c = 1.0
m = 1.0 
p = [s0, v0, c, m]

obj_before = objective(p) # not really good!
54.43227838824932

Let's have a look on the differences:

s_fmu = simulateFMU(p); # simulate the position

plot(tSave, s_fmu; label="FMU")
plot!(tSave, s_tar; label="Optimization target")

<img src="data:image/png;base64,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hg0btm7dOleemhByIsmo1apcXBm68TzPsqxaLY5rgzwHwzAqlQr79N4SBKHnczC4qLsI5XI57SB3S6MhJKz/n7YvftlcOowYERGhUqnKysq6F0tLS0ePHv2TdcaMGVNSUnKbFQAAADyQS0WoVCrT0tJeffXVxsbGQ4cOFRUVzZ8/nxCi1+tnzZrVvU56evr27dtLS0srKys3bdqUnp7eh6kBAADcxNUvJ9evX798+fIJEyaEhoYePHgwODiYEMLzvM3241dyycnJq1atevLJJ51O56JFi1JTU/sqMgAAgPu4eoalVqvNyMiora399ttvH3744e6/HDt2bF5eXs86S5cu1ev1lZWVf/vb39z4Lcs777zjdDrdtTUvUV1dvX//ftopxGffvn01NTW0U4iMw+HYvHkz7RTic/bs2Vv3n+Cibdu2mUwm925TBJcavPfeezdv3qSdQmTKysoyMzNppxCfQ4cOXbx4kXYKkTEYDO+//z7tFOJTUFCQm5tLO4X4ZGRkNDQ0uHebIihCAACAvoMiBAAAr4YiBAAAr8b0/+QjCxcu/OKLL/z9/V1c//r16xEREXecGgBuZbFYjEbjv897ALfX1NTk6+urVCppBxETnufr6uqGDu3XySEHgM7OTo7jAgICaAcRmbq6utDQUNfvbpSamrp27drbr0OhCK1Wa11dnev3LLTZbCKefIESQRAcDodMJqMdRGTsdruPjw9mlukt/Ce9CxzHCYJA/XZ1otPbX7bBgwff8aMthSIEAADwHDjeCAAAXg1FCAAAXg1FCAAAXg1FCAAAXs2jT1jief7jjz8uKSkZOXLks88+i9PSXOFwOMrLy8vKypRK5bx582jHEY1r164dOXLk+vXrQ4YMSUtL0+l0tBOJgMViOXjwoF6vdzgc8fHxc+fOdf1scCCE5OTk1NfXL1iwgHYQccjMzGxubu5+rNPpnnjiCXdt2aPPGl2xYkVubu7ixYs///xzX1/fw4cP004kArt37167dm1QUJDRaLx06RLtOKIRExMzefLksWPHFhUV5efnl5SUDB48mHYoT1dVVfXKK6/ExcVJJJI9e/bExsZ+8skntEOJhl6vnzZtms1m67mlOdzepEmThg4dGhkZSQgJDw9ftmyZ2zYteKq2tjalUnnlyhVBEIxGo0ajKS8vpx1KBLovTsrMzLz//vtpZxETq9Xa8zghIeGDDz6gGEaMSktLpVKp3W6nHUQcOI6bMmXK5s2bfX19aWcRjYkTJx49erQvtuy53xF+9913oaGhUVFRhBCNRjNp0qSCggLaoUQAU/DcHYVC0fPYZrNpNBqKYcTo1KlTo0eP9vHxoR1EHDZv3hwfHz958mTaQUTmyJEjmzZtOnbsmODWY5me+x1hY2NjUFBQz2JISIjbb70B8O927NhhsVjmzp1LO4hoxMXF1dTUqFSqnJwc2lnEobq6es+ePefOnauoqKCdRUyio6NlMllTU9PWrVtjYmIyMzPdNQmU5xahVCrlOK5nEROGQT84fvz4a6+99vXXX6tUKtpZRCM3N7ejo2Pr1q1z5swpKSnBSW23x/P8woUL3377bRx16K2MjIzuBy+//PKoUaNOnjzZc5f4e+S5h9HCwsJuHQLW19eHhYVRzAMDXnZ29tNPP52VlTV+/HjaWcTEz89v+PDhGzZsqK2tvXDhAu04nq6uru7MmTOvv/56QkLCggULzGZzQkJCZWUl7VxiEhgYOHr06Orqandt0HNHhImJiQ6Ho7CwcMqUKbW1tcXFxQcOHKAdCgaswsLCtLS0zz77bMKECbSziIbFYukZOv/www9Wq3XIkCF0I3m+0NDQoqKi7sfl5eVLlizZsWMHXrc7cjgcEomk+/qcmpqasrKysWPHumvjnluEcrn8rbfemjt3bkpKSl5e3vLlyzEidMXFixcXLlxoMBjq6+sTEhLGjx+/a9cu2qFEYM6cOYSQFStWdC+mpaW9+OKLVBOJwO7du3ft2hUbG2symfLz89988038J70jmUwWHx/f/djpdLIs27MIt1FdXT19+vRJkyaxLJuTk7No0aLExER3bdyjryMkhOj1+tLS0qioqISEBNpZxMFsNt96+aBGo7n//vsp5hGL0tLSW7+TDgkJwYf0O+J5/sKFC5cvX1ar1ePHj8cr1ltms7mysnLcuHG0g4iAIAh6vV6v1xNCYmNjuy8ocBdPL0IAAIA+5bknywAAAPQDFCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHg1FCEAAHi1/wO0mQnOBRWmbgAAAABJRU5ErkJggg==" />

Not that good. So let's do a bit of optimization!

opt = Optim.optimize(objective, p, Optim.Options(iterations=250)) # do max. 250 iterations
obj_after = opt.minimum # much better!
p_res = opt.minimizer # the optimized parameters
4-element Vector{Float64}:
 1.0016124058400697
 0.9774427379520967
 0.12344353847795433
 0.10750968631279459

Looks promising, let's have a look on the results plot:

s_fmu = simulateFMU(p_res); # simulate the position

plot(tSave, s_fmu; label="FMU")
plot!(tSave, s_tar; label="Optimization target")

<img src="data:image/png;base64,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" />

Actually a pretty fit! If you have higher requirements, check out the Optim.jl library.

unloadFMU(fmu)

Summary

This tutorial showed how a parameter (and start value) optimization can be performed on a FMU with a gradient free optimizer. This tutorial will be extended soon to further show how convergence for large parameter spaces can be improoved!