From Dynamic Optimization

Main: Dynamic Optimization Basics

Two tools used in this course are MATLAB and Python. APMonitor is used as a toolbox in MATLAB or as a package within Python to provide support for solution of dynamic simulation, estimation, and control.

There are many tools for simulation and optimization of dynamic systems. There are also many factors to consider when selecting the appropriate tool for a particular task. Some of the considerations for a dynamic optimization tool are size (scaling with number equations and degrees of freedom), speed (use in real-time estimation or control), usability (training requirements and ease of adaptation), extensibility (ability to modify for new or complex systems), support (commercial sustainment or open-source community), and portability (ability to embed on a system or communicate with a particular platform).

The objective of this section is to introduce MATLAB and Python. This is not intended to be a general tutorial but more specifically to cover topics that are relevant for dynamic optimization. Topics of interest for dynamic optimization are listed below.

Introduction to Programming Languages

Many programming languages can be used in this course with examples in both MATLAB and Python programming languages. There are many resources to get started in MATLAB or get started with Python. There are also excellent resources for experienced MATLAB programmers who would like to learn Python such as Numpy for Matlab Users. Introductory material on programming with MATLAB or Python is in the Computational Tools Course.

Introduction to Nonlinear Optimization

This course uses principles from nonlinear programming but does not delve into the details of solution strategies. Instead of detailing how a nonlinear programming solver iterates to find a solution, this course focuses on formulating problems and the use of differential constraints in describing and optimizing dynamic systems. For more background on how nonlinear programming solvers work, refer to the Course on Optimization and the associated online Design Optimization Textbook. A good illustrative example is the Two Bar Truss optimization or the example below.

APMonitor Commands

APMonitor is a tool for nonlinear optimization and dynamic optimization. Source files are available for Julia, Python, and MATLAB. Users can select either a public server or a local host if the APMonitor Server is installed locally. The user must also specify an application name.

 server = 'http://127.0.0.1'         # for local server
 server = 'http://byu.apmonitor.com' # for public server
 app = myApp                         # application name

Once the server and application name are defined, the following is a list of available commands in each package.

An example script is below. The same commands are used in Python, MATLAB, and Julia with minor modifications such as the ';' in MATLAB to suppress console output or change in the comment characters.

Model Predictive Control Example (MATLAB and Python)
# import apm.py, available from
#   http://apmonitor.com/wiki/index.php/Main/PythonApp
from apm import *
# for MATLAB use: addpath('apm')

s = 'http://byu.apmonitor.com'
a = 'myApp'

# clear prior application
apm(s,a,'clear all')

# load model and data
apm_load(s,a,'model.apm')
csv_load(s,a,'data.csv')

# specify FV, MV, SV, CV
apm_info(s,a,'FV','K')
apm_info(s,a,'MV','u')
apm_info(s,a,'SV','x')
apm_info(s,a,'CV','y')

# configuration parameters
apm_option(s,a,'nlc.imode',6)
apm_option(s,a,'nlc.nodes',3)

# turn on MV as a degree of freedom
apm_option(s,a,'u.status',1)
# turn on CV to add terms to objective function
apm_option(s,a,'y.status',1)

# tune MV in the controller
apm_option(s,a,'u.lower',0)
apm_option(s,a,'u.upper',100)
apm_option(s,a,'u.dcost',0.1)

# tune CV in the controller
apm_option(s,a,'y.tau',5)
apm_option(s,a,'y.sphi',26)
apm_option(s,a,'y.splo',24)

# solve and retrieve results
output = apm(s,a,'solve')
print(output)

# open web-viewer
apm_web(s,a)

# retrieve solution
z = apm_sol(s,a)
Retrieved from http://apmonitor.com/do/index.php/Main/ModelingLanguages
Page last modified on February 17, 2017, at 04:41 PM