DianaOptimization: SensParEstimation.py

File SensParEstimation.py, 3.1 KB (added by gogolenk, 16 years ago)

Parameter estimation with gradient based solver

Line 
1# ---------------------------------------------------------------------
2#  Diana process modelling, simulation and analysis software
3#  Copyright (c) 2006, Sergiy Gogolenko
4#  e-mail: gogolenk@mpi-magdeburg.mpg.de
5#  All rights reserved.
6# ---------------------------------------------------------------------
7#  $Id: HafkeReactor.py Fri Aug 11 13:22:08 2006 gogolenk $
8# ---------------------------------------------------------------------
9#  Written under: i586-suse-linux
10# ---------------------------------------------------------------------
11#  Last update: Fri Aug 11 13:22:08 2006
12# ---------------------------------------------------------------------
13#  Description:
14#   Simple example of using DIANA for solving parmeter fitting problems
15#  with deterministic optimizer (in this case LBFGS-solver).
16
17import diana, sys, os
18
19modelPath = "Substrateuptake.so"
20observedParams = ["c_x", "c_s"]
21fileMesData = "./data/observations.dat"
22integratorName = "ida" # "odessa"
23optimizerName = "lbfgsb" # "ipopt"
24
25# initialize Diana main class
26dmain=diana.GetDianaMain(sys.argv);
27
28# create NMSimplex-optimizer
29sfactory = dmain.GetSolverFactory();
30solver = sfactory.CreateSolver(diana.CAPE_NLP, None, optimizerName);
31
32# set solver's parameters L-BFGS-B
33pars_PEsolver = solver.GetParameters()
34pars_PEsolver["StopCondition"].SetValue(1+8)
35pars_PEsolver["MaxTimeOfWork"].SetValue(200)
36pars_PEsolver["MaxCountOfEvals"].SetValue(1000)
37pars_PEsolver["MaxCorrections"].SetValue(100)
38pars_PEsolver["VerboseLevel"].SetValue(0)
39pars_PEsolver["Factr"].SetValue(1e+7)
40pars_PEsolver["PGradTol"].SetValue(1e-5)
41
42# create model
43mmanager=dmain.GetModelManager()
44model = mmanager.CreateModel(diana.CAPE_CONTINUOUS, modelPath)
45model.Initialize()
46
47# load measured data (state values and time points) from specified file
48md = diana.DianaMeasuredData(model, observedParams)
49md.load(fileMesData)
50
51# create paramerter fitting task
52taskPE = diana.SensParameterFittingTask(dmain, integratorName, model, md)
53
54# describe estimated parameters
55taskPE.AddEstimatedParameterBySpec(
56    diana.DianaNLPRealParameterSpec("mu_max", "", 4.0, 4.0, 6.0, 0.0001),
57    diana.DIANA_PARAMETER)
58taskPE.AddEstimatedParameterBySpec(
59    diana.DianaNLPRealParameterSpec("k_s", "", 3.0, 1.0, 3.0, 0.0001),
60    diana.DIANA_PARAMETER) 
61
62taskPE.Initialize()
63print "Parameter fitting task for %s is initialized" \
64      % model.GetComponentName()
65
66# create report
67report = dmain.CreateReportingInterface(optimizerName)
68# Set parameters for report class
69pars_rep = report.GetParameters()
70pars_rep["Author"].SetValue("SG")
71pars_rep["OutputFolder"].SetValue("./parfit")
72pars_rep["ConsoleOutput"].SetValue(True)
73pars_rep["Samples"].SetValue(True)
74
75report.Initialize()
76print "Report initialized"
77
78# set prepeared task and report to solver
79solver.SetReportingInterface(report);
80solver.SetNLPTask(taskPE);
81solver.Initialize();
82print "Optimizer %s initialized" % solver.GetComponentName()
83
84# start optimization
85print "Parameter fitting for %s..." % model.GetComponentName()
86try:
87    solver.Solve()
88except:
89    print "Best solution: ", solver.GetSolution()
90    raise
91
92print "Solution: ", solver.GetSolution()
93print "Parameter values:"
94print taskPE.GetSoughtParameters()