Skip to content

Commit

Permalink
- added new flag for dyn. optimization
Browse files Browse the repository at this point in the history
 - greating dyn. optimization became more user friendly with OMEdite
 - change default values like numberOfIntervals for dyn. optimization
 - added test for it
- update application optimize 



git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@22647 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Oct 7, 2014
1 parent 5e59ceb commit 8239c18
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 13 deletions.
2 changes: 1 addition & 1 deletion Compiler/BackEnd/BackendDAECreate.mo
Expand Up @@ -122,7 +122,7 @@ algorithm
// handle alias equations
(vars, knvars, extVars, aliasVars, eqns, reqns, ieqns, whenclauses_1) := handleAliasEquations(aliaseqns, vars, knvars, extVars, aliasVars, eqns, reqns, ieqns, whenclauses_1);
vars_1 := detectImplicitDiscrete(vars, knvars, eqns);
(vars_1, eqns, clsAttrs) := DynamicOptimization.addOptimizationVarsEqns(vars_1, eqns, Config.acceptOptimicaGrammar(), clsAttrs, constrs, knvars);
(vars_1, eqns, clsAttrs) := DynamicOptimization.addOptimizationVarsEqns(vars_1, eqns, Config.acceptOptimicaGrammar(), clsAttrs, constrs, knvars,Flags.getConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM));
eqnarr := BackendEquation.listEquation(eqns);
reqnarr := BackendEquation.listEquation(reqns);
ieqnarr := BackendEquation.listEquation(ieqns);
Expand Down
22 changes: 16 additions & 6 deletions Compiler/BackEnd/DynamicOptimization.mo
Expand Up @@ -51,6 +51,7 @@ protected import BackendVariable;
protected import ComponentReference;

protected import Expression;
protected import Flags;
protected import List;
protected import Util;

Expand All @@ -63,11 +64,12 @@ public function addOptimizationVarsEqns
input list< .DAE.ClassAttributes> inClassAttr;
input list< .DAE.Constraint> inConstraint;
input BackendDAE.Variables knvars;
input Boolean inDynOptimization;
output BackendDAE.Variables outVars;
output list<BackendDAE.Equation> outEqns;
output list< .DAE.ClassAttributes> outClassAttr;
algorithm
(outVars, outEqns, outClassAttr) := match(inVars, inEqns, inOptimicaFlag, inClassAttr, inConstraint, knvars)
(outVars, outEqns, outClassAttr) := match(inVars, inEqns, inOptimicaFlag, inClassAttr, inConstraint, knvars, inDynOptimization)
local
DAE.ComponentRef leftcref;
list<BackendDAE.Equation> objectEqn;
Expand All @@ -79,8 +81,9 @@ algorithm
list< .DAE.Exp> constraintLst;
list< .DAE.Constraint> constraints;
list<BackendDAE.Var> varlst;
list< .DAE.ClassAttributes> tmpClassAttr;

case (v, e, true, {DAE.OPTIMIZATION_ATTRS(objetiveE=mayer, objectiveIntegrandE=lagrange)}, _, _)
case (v, e, true, {DAE.OPTIMIZATION_ATTRS(objetiveE=mayer, objectiveIntegrandE=lagrange)}, _, _,_)
equation
inVarsAndknvars = BackendVariable.mergeVariables(inVars, knvars);
varlst = BackendVariable.varList(inVarsAndknvars);
Expand Down Expand Up @@ -110,9 +113,10 @@ algorithm

constraints = findFinalConstraints(varlst, {});
(v, e) = addOptimizationVarsEqns2(constraints, 1, v, e, knvars, "$OMC$finalConstarintTerm", BackendDAE.OPT_FCONSTR());

then (v, e,inClassAttr);
case (v, e, true, _, _, _)

Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true);
then (v, e, inClassAttr);
case (v, e, true, _, _, _,_)
equation
inVarsAndknvars = BackendVariable.mergeVariables(inVars, knvars);
varlst = BackendVariable.varList(inVarsAndknvars);
Expand All @@ -139,8 +143,14 @@ algorithm

constraints = findFinalConstraints(varlst, {});
(v, e) = addOptimizationVarsEqns2(constraints, 1, v, e, knvars, "$OMC$finalConstarintTerm", BackendDAE.OPT_FCONSTR());


Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true);
then (v, e,{DAE.OPTIMIZATION_ATTRS(mayer1, lagrange1, NONE(), NONE())});
case (v, e, false, _, _, _, true)
equation
Flags.setConfigEnum(Flags.GRAMMAR, Flags.OPTIMICA);
(v, e, tmpClassAttr) = addOptimizationVarsEqns(inVars, inEqns, true, inClassAttr, inConstraint, knvars, true);
then (v,e,tmpClassAttr);
else then(inVars, inEqns, inClassAttr);
end match;
end addOptimizationVarsEqns;
Expand Down
10 changes: 5 additions & 5 deletions Compiler/Script/CevalScript.mo
Expand Up @@ -482,9 +482,10 @@ protected
DAE.Exp startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, fileNamePrefix, options, outputFormat, variableFilter, cflags, simflags;
Boolean UseOtimica;
algorithm
UseOtimica := Config.acceptOptimicaGrammar();
UseOtimica := Config.acceptOptimicaGrammar() or Flags.getConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM);
GlobalScript.SIMULATION_OPTIONS(startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, _, options, outputFormat, variableFilter, cflags, simflags) := inSimOpt;
method := Util.if_(UseOtimica, DAE.SCONST("optimization"),method);
numberOfIntervals := Util.if_(UseOtimica, DAE.ICONST(50),numberOfIntervals);
outSimOpt := GlobalScript.SIMULATION_OPTIONS(startTime, stopTime, numberOfIntervals, stepSize, tolerance, method, DAE.SCONST(inFileNamePrefix), options, outputFormat, variableFilter, cflags, simflags);
end setFileNamePrefixInSimulationOptions;

Expand Down Expand Up @@ -1605,8 +1606,9 @@ algorithm

System.realtimeTick(GlobalScript.RT_CLOCK_SIMULATE_TOTAL);

b = Flags.getConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION);
Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, true);
Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION,true);
Flags.setConfigEnum(Flags.GRAMMAR, Flags.OPTIMICA);
Flags.setConfigBool(Flags.GENERATE_DYN_OPTIMIZATION_PROBLEM,true);

(cache,st,compileDir,executable,_,outputFormat_str,_,simflags,resultValues) = buildModel(cache,env,vals,st_1,msg);
cit = winCitation();
Expand All @@ -1627,8 +1629,6 @@ algorithm
timeSimulation = System.realtimeTock(GlobalScript.RT_CLOCK_SIMULATE_SIMULATION);
timeTotal = System.realtimeTock(GlobalScript.RT_CLOCK_SIMULATE_TOTAL);
(cache,simValue,newst) = createSimulationResultFromcallModelExecutable(resI,timeTotal,timeSimulation,resultValues,cache,className,vals,st,result_file,logFile);
//reset config flag
Flags.setConfigBool(Flags.GENERATE_SYMBOLIC_LINEARIZATION, b);
then
(cache,simValue,newst);

Expand Down
8 changes: 7 additions & 1 deletion Compiler/Util/Flags.mo
Expand Up @@ -926,6 +926,11 @@ constant ConfigFlag RESHUFFLE = CONFIG_FLAG(58, "reshuffle",
constant ConfigFlag NEW_UNIT_CHECKING = CONFIG_FLAG(59,
"newUnitChecking", NONE(), INTERNAL(), BOOL_FLAG(false), NONE(),
Util.notrans(""));

constant ConfigFlag GENERATE_DYN_OPTIMIZATION_PROBLEM = CONFIG_FLAG(60, "gDynOpt",
NONE(), EXTERNAL(), BOOL_FLAG(false), NONE(),
Util.gettext("Generate dynamic optimization problem based on annation approach."));


// This is a list of all configuration flags. A flag can not be used unless it's
// in this list, and the list is checked at initialization so that all flags are
Expand Down Expand Up @@ -989,7 +994,8 @@ constant list<ConfigFlag> allConfigFlags = {
INT_ENUM_CONVERSION,
PROFILING_LEVEL,
RESHUFFLE,
NEW_UNIT_CHECKING
NEW_UNIT_CHECKING,
GENERATE_DYN_OPTIMIZATION_PROBLEM
};

public function new
Expand Down

0 comments on commit 8239c18

Please sign in to comment.