DianaOptimization: ParEstimation.py

File ParEstimation.py, 3.0 KB (added by gogolenk, 16 years ago)

Parameter estimation with derivative free 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 parameter 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 = "direct" # "nmsimplex"
24
25# initialize Diana main class
26dmain=diana.GetDianaMain(sys.argv)
27
28# create NMSimplex-optimizer
29sfactory = dmain.GetSolverFactory()
30solverPE = sfactory.CreateSolver(diana.CAPE_NLP, None, optimizerName)
31
32# create model
33mmanager=dmain.GetModelManager()
34model = mmanager.CreateModel(diana.CAPE_CONTINUOUS, modelPath)
35model.Initialize()
36
37# load measured data (state values and time points) from specified file
38md = diana.DianaMeasuredData(model, observedParams)
39md.load(fileMesData)
40
41# Describe estimated parameters
42sps = [
43    diana.DianaNLPRealParameterSpec("k_s",  # name
44                                    "",     # description
45                                    1.0,    # default value
46                                    1.0,    # lower bound
47                                    3.0,    # upper bound
48                                    0.0001),# precision
49    diana.DianaNLPRealParameterSpec("mu_max", "",  4.0, 4.0, 6.0, 0.0001)
50    ]
51
52# create paramerter fitting task
53taskPE = diana.ParameterFittingTask(dmain, integratorName,
54                                    model, md, sps)
55taskPE.Initialize()
56
57print "Parameter fitting task for %s is initialized" \
58      % model.GetComponentName()
59
60# create report
61report = dmain.CreateReportingInterface(optimizerName)
62# set parameters for reporting
63pars_solverPErep = report.GetParameters()
64pars_solverPErep["Author"].SetValue("SG")
65pars_solverPErep["OutputFolder"].SetValue("./parfit")
66pars_solverPErep["ConsoleOutput"].SetValue(True)
67pars_solverPErep["Samples"].SetValue(True)
68report.Initialize()
69print "Report initialized"
70
71# set prepared task and report to solver
72solverPE.SetReportingInterface(report);
73solverPE.SetNLPTask(taskPE);
74solverPE.Initialize();
75print "Optimizer %s initialized" % solverPE.GetComponentName()
76
77# start optimization
78print "Parameter fitting for %s..." % model.GetComponentName()
79try:
80    solverPE.Solve()
81except:
82    print "Best solution: ", solverPE.GetSolution()
83    raise
84print "Solution: ", solverPE.GetSolution()
85print "Parameter values:"
86print taskPE.GetSoughtParameters()