CDS 110: Introduction to Control Theory

Week 13: Receding Horizon Control

22 January 2003

Overview Reading FAQ Homework CDS 110b

Overview

Receding horizon control makes use of online optimization over a (receding) finite time interval to provide closed loop stability and performance. Its main advantage is its ability to explicitly deal with constraints. We introduce the basic ideas of receding horizon control and demonstrate its use with linear quadratic regulators.

Mud card responses [advanced search]:

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }

Reading

Homework

The homework considers a single state system, where receding horizon control can be computed analytically.

Homework #11

Frequently asked questions and homework hints [advanced search]

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }