DianaOptimization: OEDSigmaPoint.py

File OEDSigmaPoint.py, 5.7 KB (added by gogolenk, 16 years ago)

Optimal experimental design with Sigma Point approach

Line 
1# -----------------------------------------------------------------------
2#  Diana process modelling, simulation and analysis software
3#  Copyright (c) 2009, Sergiy Gogolenko
4#  e-mail: gogolenk@mpi-magdeburg.mpg.de
5#  All rights reserved.
6# -----------------------------------------------------------------------
7#  Description:
8#   Simple example of using DIANA for solving parameter fitting problems
9#  with deterministic optimizer (in this case LBFGS-solver).
10
11import diana, sys, os
12#from math import *
13
14modelPath = "Substrateuptake.so"
15observedParams = ["c_x", "c_s"]
16fileMesData = "./data/observations.dat"
17integratorName = "odessa" #"ida"
18optimizerPEName = "nmsimplex"
19methodOEDName = "oedsigmapoint"
20optimizerOEDName = "direct" #"genetic" #"nmsimplex"
21
22# initialize Diana main class
23dmain=diana.GetDianaMain(sys.argv)
24
25##########################################################################
26#                          PI Definition Section                         #
27##########################################################################
28
29# create optimizer for PI
30sfactory = dmain.GetSolverFactory()
31optimizerPE = sfactory.CreateSolver(diana.CAPE_NLP, None, optimizerPEName)
32
33# set optimizer's parameters
34pars_PEsolver = optimizerPE.GetParameters()
35pars_PEsolver["StopCondition"].SetValue(1+8)
36pars_PEsolver["MaxTimeOfWork"].SetValue(10)
37pars_PEsolver["MaxCountOfEvals"].SetValue(1)
38pars_PEsolver["VerboseLevel"].SetValue(0)
39
40pars_PEsolver["Step"].SetValue(0.01)
41pars_PEsolver["MaxFn"].SetValue(40)
42pars_PEsolver["StopCr"].SetValue(1e-2)
43pars_PEsolver["NLoop"].SetValue(20)
44pars_PEsolver["IQuad"].SetValue(True)
45pars_PEsolver["Simp"].SetValue(1e-6)
46
47# create model
48mmanager = dmain.GetModelManager()
49model = mmanager.CreateModel(diana.CAPE_CONTINUOUS, modelPath)
50model.Initialize()
51#print model.GetActiveESO().GetParameters()
52
53# load measured data (state values and time points) from specified file
54md = diana.DianaMeasuredData(model, observedParams)
55md.load(fileMesData)
56
57# describe estimated parameters
58sps = [
59    diana.DianaNLPRealParameterSpec("k_s", "", 1.0, 1.0, 3.0, 0.0001),
60    diana.DianaNLPRealParameterSpec("mu_max", "",  4.0, 4.0, 6.0, 0.0001)
61    ]
62
63# create paramerter fitting task
64taskPE = diana.ParameterFittingTask(dmain, integratorName, model, md, sps)
65taskPE.Initialize()
66print "Parameter fitting task "\
67      "for %s is initialized" % model.GetComponentName()
68
69# set prepeared PI task to PI optimizer
70optimizerPE.SetNLPTask(taskPE)
71optimizerPE.Initialize()
72print "PI optimizer %s initialized" % optimizerPE.GetComponentName()
73
74#########################################################################
75#                          OED Definition Section                       #
76#########################################################################
77# describe design variables
78colDesignVars = [
79    diana.DianaNLPRealParameterSpec("q_0", "",  0.09, 0.07, 0.08, 0.0001)
80    ]
81
82# create OED problem
83nlptaskfactory = dmain.GetNLPTaskFactory()
84taskOED = nlptaskfactory.CreateOEDTask(taskPE, optimizerPE,
85                                       colDesignVars, methodOEDName)
86pars_OEDtask = taskOED.GetParameters()
87pars_OEDtask["OptimalityCriterion"].SetValue(diana.DIANA_OED_EStar)
88pars_OEDtask["ExecException"].SetValue(True)
89pars_OEDtask["Alpha"].SetValue(0.5)
90taskOED.Initialize()
91print "OED task initialized..."
92
93########################################################################
94#                     Create OED task reporting                       #
95########################################################################
96
97# create reportOEDTask
98reportOEDTask = dmain.CreateReportingInterface(methodOEDName)
99# set parameters for reportOEDTask class
100pars_taskOEDrep = reportOEDTask.GetParameters()
101pars_taskOEDrep["OutputFolder"].SetValue("./oedtask")
102pars_taskOEDrep["ConsoleOutput"].SetValue(True)
103pars_taskOEDrep["SamplingPoints"].SetValue(True)
104
105reportOEDTask.Initialize()
106
107taskOED.SetReportingInterface(reportOEDTask)
108print "OED task report initialized"
109
110########################################################################
111#                          OED Solving Section                         #
112########################################################################
113
114# create optimizer for OED problem
115optimizerOED = sfactory.CreateSolver(diana.CAPE_NLP,
116                                     None, optimizerOEDName)
117
118# settings for OED optimizer
119pars_OEDsolver = optimizerOED.GetParameters()
120pars_OEDsolver["Eps"].SetValue(1.0000000000e-4)
121pars_OEDsolver["Maxf"].SetValue(5000)
122pars_OEDsolver["MaxT"].SetValue(1000)
123pars_OEDsolver["Algmethod"].SetValue(False)
124pars_OEDsolver["FGlPer"].SetValue(1.0000000000e-02)
125pars_OEDsolver["VolPer"].SetValue(-1.0000000000e+00)
126pars_OEDsolver["SigmaPer"].SetValue(-1.0000000000e+00)
127pars_OEDsolver["FGlobal"].SetValue(-10.15320)
128pars_OEDsolver["VerboseLevel"].SetValue(2)
129
130# create report
131report = dmain.CreateReportingInterface(optimizerOEDName)
132# set parameters for report class
133pars_solverOEDrep = report.GetParameters()
134pars_solverOEDrep["Author"].SetValue("SG")
135pars_solverOEDrep["OutputFolder"].SetValue("./oed")
136pars_solverOEDrep["ConsoleOutput"].SetValue(True)
137pars_solverOEDrep["Samples"].SetValue(True)
138
139report.Initialize()
140print "Report initialized"
141
142# set prepeared task and report to OED optimizer
143optimizerOED.SetReportingInterface(report)
144optimizerOED.SetNLPTask(taskOED)
145optimizerOED.Initialize()
146print "OED optimizer %s initialized" % optimizerOED.GetComponentName()
147
148# start optimization
149print "OED by %s for %s..." % (taskOED.GetComponentName(),
150                               model.GetComponentName())
151try:
152    optimizerOED.Solve()
153except:
154    print "Best solution: ", optimizerOED.GetSolution()
155    raise
156print "Solution: ", optimizerOED.GetSolution()
157print "Parameter values:"
158print task.GetSoughtParameters()