- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » Time-varying environment variable for...
Time-varying environment variable for the builtin dynamic optimization
Time-varying environment variable for the builtin dynamic optimization
I meet a problem when using the builtin dynamic optimization. How can I add a time-varying environment variable for dynamic optimization?
Here is my situation:
The dynamic programming optimization runs successfully if the environment variable is given in the equation part, e.g. env_var = 1;
But how can I add a time-varying environment variable?
e.g. env_var =
0 0
1 0
1 1
2 4
3 9
4 16
I use Modelica.Blocks.Sources.CombiTimeTable to import the environment variable. The simulation runs successfully in OMEdit, but the optimization shows messages: "stdout | info | ... loading \"
I think it may because CombiTimeTable can only be used for the simulation but not for the optimization.
To simplify and varify this situation the test code is attached in The code and ElectriPrice.mat file or
1. Opt with env_var = 1 successfully
Code:
model env_var_1
Real x(start =0, fixed=true, min=0)"state";
input Real u(min=1, max=2)"control";
Real e "environment variable";
// Obj is -x (maximum x)
equation
e = 1;
der(x) = u + e;
end env_var_1;
setCommandLineOptions("-g=Optimica")
optimization OptClassTemplate(objective=-x)
extends env_var_1;
end OptClassTemplate;
optimize(OptClassTemplate, numberOfIntervals=100, stopTime=24, tolerance=1e-8)
2.Opt with env_var = CombiTimeTable messages: stdout (Remember to change the file path of ElectriPrice7.mat in CombiTimeTable )
Code:
model env_var_TimeTable
Real x(start =0, fixed=true, min=0, max=100)"state";
input Real u(min=1, max=2)"control";
Real e "environment variable";
Modelica.Blocks.Sources.CombiTimeTable combiTimeTable(fileName = "C:/Onedrive/OneDrive - Servers-30/Modelica_n/OMMatlab/ModelicaReadMat/ElectriPrice7.mat", tableName = "env_var", tableOnFile = true) annotation(
Placement(visible = true, transformation(origin = {-28, 30}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Blocks.Interaction.Show.RealValue realValue annotation(
Placement(visible = true, transformation(origin = {56, 30}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
// Obj is -x (maximum x)
equation
e = combiTimeTable.y[1];
der(x) = u + e;
connect(combiTimeTable.y[1], realValue.numberPort) annotation(
Line(points = {{-16, 30}, {44, 30}, {44, 30}, {44, 30}}, color = {0, 0, 127}));
annotation(
uses(Modelica(version = "3.2.3")));
end env_var_TimeTable;
loadModel(Modelica)
setCommandLineOptions("-g=Optimica")
optimization OptClassTemplate(objective=-x)
extends env_var_TimeTable;
end OptClassTemplate;
optimize(OptClassTemplate, numberOfIntervals=100, stopTime=24, tolerance=1e-8)
In the second Opt with env_var = CombiTimeTable case, the optimization result shows as below. It seems that the CombiTimeTable can only import time-varying variables for the simulation but not for the optimization.
I have checked the _res.mat result file. The environment variable e always equals to the initial value (0.3648) rather than a time-varying variable.
Is there a way for importing time-varying environment variables for dynamic optimization?
Thanks for your attention.
Shawnli
shawnli89@163.com
- shawnli89
- 6 Posts
Re: Time-varying environment variable for the builtin dynamic optimization
Here is the solution. When using CombiTimeTable to import environment variables in dynamic programming optimization, the timeEvents in the CombiTimeTable dialog should choose NoTimeEvents.
- shawnli89
- 6 Posts
- Index
- » Usage and Applications
- » OpenModelica Usage and Applications
- » Time-varying environment variable for...