opengen.config package
Submodules
opengen.config.build_config module
- class opengen.config.build_config.BuildConfiguration(build_dir='.')
Bases:
object
Build configuration
Configuration for the code generator
- DEBUG_MODE = 'debug'
Debug mode (fast compilation, worse performance)
- RELEASE_MODE = 'release'
Release mode (great performance, very slow compilation)
- __init__(build_dir='.')
Construct an instance of BuildConfiguration
- Parameters
build_dir – Target directory, defaults to the current directory
- Returns
A new instance of BuildConfiguration
- property allocator: RustAllocator
Memory allocator for generated Rust solver
- property build_c_bindings
Whether to build C bindings
- property build_dir
Directory in which the auto-generated optimizer will be stored
- property build_mode
Build mode (
RELEASE_MODE
orDEBUG_MODE
)
- property build_python_bindings
Whether to build Python bindings
- property local_path
Local path of OpEn (if any)
- property open_version
OpEn version used with the auto-generated solver
- Returns
The method returns either a specific version of OpEn, which will be used with the auto-generated optimizer, or None, in which case, the latest version will be used. You may set your preferred version of OpEn with with_open_version
- property rebuild
Whether to re-build the optimizer from scratch
- property ros_config: RosConfiguration
ROS package configuration
- Returns
instance of RosConfiguration
- property target_system
Target system
See also:
with_target_system
- property tcp_interface_config
Whether to build a TCP interface
- with_allocator(allocator: RustAllocator)
Specify a Rust memory allocator.
With this method the user can choose an alternative memory allocator such as jemalloc and rpalloc. For example, if you choose jemalloc as your memory allocator, the autogenerated project will have a Cargo.toml file where optimization-engine is loaded as a dependency with the “jem” feature.
- Parameters
allocator – allocator; instance of RustAllocator
- Returns
current instance of BuildConfiguration
- with_build_c_bindings(build_c_bindings=True)
If activated, OpEn will generate C/C++ bindings for the auto-generated solver
- Parameters
build_c_bindings – whether to build C/C++ bindings for auto-generated solver; default: True, i.e., it suffices to call build_config.with_build_c_bindings() instead of build_config.with_build_c_bindings(True)
- Returns
current instance of BuildConfiguration
- with_build_directory(build_dir)
Specify the build directory
- Parameters
build_dir – build directory as string
- Returns
current instance of BuildConfiguration
- with_build_mode(build_mode)
Set the build mode (debug/release)
- Parameters
build_mode – Choose either ‘debug’ or ‘release’; the former is fast, but suboptimal, while the later may take a while to compile, but the generated binary is significantly faster
- Returns
current instance of BuildConfiguration
- with_build_python_bindings(build_python_bindings=True)
If activated, OpEn will generate python bindings for the auto-generated solver
- Parameters
build_python_bindings – whether to build python bindings for auto-generated solver; default: True, i.e., it suffices to call build_config.with_build_python_bindings() instead of build_config.with_build_python_bindings(True)
- Returns
current instance of BuildConfiguration
- with_open_version(open_version='*', local_path=None)
Specify the version of OpEn to link to
- Parameters
open_version – version of OpEn (in case you want to compile with an older version of OpEn; if not, the latest version of OpEn will be used)
local_path – you can compile using a local version of OpEn. In that case, you need to provide the full absolute path to that local OpEn directory. This option is intended for developers.
- Returns
current instance of BuildConfiguration
- with_rebuild(do_rebuild)
Whether to clean and rebuild the code generator, if it already exists
- Parameters
do_rebuild – if set to True, the target code generator will be cleaned and rebuilt from scratch
- Returns
current instance of BuildConfiguration
- with_ros(ros_config: RosConfiguration)
Activates the generation of a ROS package. The caller must provide an instance of RosConfiguration
- Parameters
ros_config – Configuation of ROS package
- Returns
current instance of BuildConfiguration
- with_target_system(target_system)
Specify the target system
- Parameters
target_system – target system as string (e.g., use “arm-unknown-linux-gnueabihf” or “rpi” for Raspberry Pi). Note that you must have installed the target using rustup if you need to cross-compile.
- Returns
current instance of BuildConfiguration
- with_tcp_interface_config(tcp_interface_config=<opengen.config.tcp_server_config.TcpServerConfiguration object>)
Specify a TCP server configuration object
- Parameters
tcp_interface_config – Custom TCP server configuration
- Returns
current instance of BuildConfiguration
- class opengen.config.build_config.RustAllocator(value)
Bases:
Enum
Memory Allocator for the auto-generated project
- DefaultAllocator = 0
Default allocator
- JemAlloc = 1
Memory allocator: jemalloc
Jemalloc is a generic implementation of malloc that emphasises fragmentation avoidance
- RpAlloc = 2
Memory allocator: rpmalloc
Rpmalloc is a very efficient lock-free thread caching 16-byte aligned memory allocator implemented in C.
opengen.config.meta module
- class opengen.config.meta.OptimizerMeta(optimizer_name='open_optimizer', optimizer_version='0.0.0', optimizer_licence='MIT', optimizer_authors=['John Smith'])
Bases:
object
Metadata of auto-generated parametric optimizer
General metadata for the auto-generated optimizer
The most important piece of information is the name of the optimizer. The optimizer will be stored in a namesake folder inside the target build directory.
- __init__(optimizer_name='open_optimizer', optimizer_version='0.0.0', optimizer_licence='MIT', optimizer_authors=['John Smith'])
Constructor of OptimizerMeta
- Parameters
optimizer_name – optimizer name (default: open_optimizer)
optimizer_version – version (default: 0.0.0)
optimizer_licence – licence name or URL (default: MIT)
optimizer_authors – list of authors, as list of strings (default: [“John Smith”])
- Returns
The current instance of OptimizerMeta
- Examples:
>>> import opengen as og >>> meta = og.config.OptimizerMeta() \ >>> .with_version("0.0.2") \ >>> .with_authors(["P. Sopasakis", "E. Fresk"]) \ >>> .with_licence("CC4.0-By") \ >>> .with_optimizer_name("wow_optimizer")
- property alm_mapping_f1_function_name
- property authors
List of authors of optimizer
- property constraint_penalty_function_name
- property cost_function_name
- property grad_function_name
- property initial_penalty_function_name
- property optimizer_name
Name of optimizer
- property preconditioning_file_name
- property version
Version of optimizer
- property w_cost_function_name
- property w_f1_function_name
- property w_f2_function_name
- with_authors(optimizer_authors)
Specify list of authors
- Parameters
optimizer_authors – list of authors
- Returns
The current instance of OptimizerMeta
- with_licence(optimizer_licence)
Specify licence of auto-generated code
- Parameters
optimizer_licence – licence name (e.g., MIT) or licence URL
- Returns
The current instance of OptimizerMeta
- with_optimizer_name(optimizer_name)
Specify the name of the optimizer
- Parameters
optimizer_name – name of build, may only contain letters, numbers and underscores, and may not start with a number
- Returns
The current instance of OptimizerMeta
- with_version(optimizer_version)
Specify version
Specify the version of the auto-generated optimizer.
- Parameters
optimizer_version – version of auto-generated optimizer
- Returns
The current instance of OptimizerMeta
opengen.config.ros_config module
- class opengen.config.ros_config.RosConfiguration
Bases:
object
Configuration of auto-generated ROS package
- __init__()
Constructor of an instance of RosConfiguration
- property description
Description of ROS package (in
package.xml
)- Returns
description
- property node_name
Node name (default: ros_node_optimizer)
- Returns
node name
- property package_name
Package name
- Returns
package name (default: ‘open_ros’)
- property params_topic_queue_size
Size of “parameter” topic queue
- Returns
parameter topic name, defaults to 100
- property publisher_subtopic
Name of publisher sub-topic (default: “result”)
- Returns
publisher sub-topic
- property rate
ROS node rate in Hz
- Returns
rate, defaults to 10.0
- property result_topic_queue_size
Size of “result” topic
- Returns
result topic name, defaults to 100
- property subscriber_subtopic
Name of subscriber sub-topic
- Returns
subscriber sub-topic, defaults to “parameters”
- with_description(description)
Set the description of the ROS package
- Parameters
description (string) – description, defaults to “parametric optimization with OpEn”
- Returns
current object
- with_node_name(node_name)
Set the node name. The node name can contain lowercase and uppercase characters and underscores, but not spaces or other symbols
- Parameters
node_name (str) – name of node, defaults to “ros_node_optimizer”
- Returns
current object
- Raises
ValueError – if node_name is not a legal node name
- with_package_name(pkg_name)
Set the package name, which is the same as the name of the folder that will store the auto-generated ROS node. The node name can contain lowercase and uppercase characters and underscores, but not spaces or other symbols
- Parameters
pkg_name (str) – package name, defaults to “open_ros”
- Returns
current object
- Raises
ValueError – if pkg_name is not a legal package name
- with_publisher_subtopic(publisher_subtopic)
The auto-generated node will output its results to the topic ~/{publisher_subtopic}. The subtopic (publisher_subtopic) can be specified using this method. The default subtopic name is ‘result’. This can be configured after the package is generated, in config/open_params.yaml.
- Parameters
publisher_subtopic (str) – publisher sub-topic name, defaults to “result”
- Returns
current object
- with_queue_sizes(result_topic_queue_size=100, parameter_topic_queue_size=100)
Set queue sizes for ROS node
- Parameters
result_topic_queue_size (int, optional) – queue size of results, defaults to 100
parameter_topic_queue_size (int, optional) – queue size of topic, defaults to 100
- Returns
current object
- with_rate(rate)
Set the rate of the ROS node
- Parameters
rate (float) – rate in Hz
- Returns
current object
- with_subscriber_subtopic(subscriber_subtopic)
The auto-generated node will listen for input at
~/{subscriber_subtopic}
. The subtopic (subscriber_subtopic) can be specified using this method. The default subtopic name is ‘parameters’. This can be configured after the package is generated, in config/open_params.yaml.- Parameters
subscriber_subtopic (str) – subscriber sub-topic name
- Returns
- return
current object
opengen.config.solver_config module
- class opengen.config.solver_config.SolverConfiguration
Bases:
object
Configuration of solver parameters
- __init__()
Construct an instance of solver configuration parameters
- Returns:
- return
New instance of SolverConfiguration
- property cbfgs_alpha
- property cbfgs_epsilon
- property cbfgs_sy_epsilon
- property constraints_tolerance
Tolerance on the satisfaction of the constraints
- property initial_penalty
Initial penalty
- property initial_tolerance
Initial tolerance of inner solver
- property inner_tolerance_update_factor
“Update factor for inner tolerance
- property lbfgs_memory
LBFGS memory for the inner solver
- property max_duration_micros
Maximum execution time in microseconds
- Returns:
- return
Integer value
- property max_inner_iterations
Maximum number of iterations for the inner solver
- property max_outer_iterations
Maximum number of iterations for the outer solver
- property penalty_weight_update_factor
Multiplicative factor for the update of the penalty weights
- property preconditioning
Whether an automatic preconditioning should be applied
- Returns:
- return
True iff preconditioning is active
- property sufficient_decrease_coefficient
Sufficient decrease coefficient
- property tolerance
Tolerance of inner solver
- with_cbfgs_parameters(alpha, epsilon, sy_epsilon)
Specify the CBFGS parameters alpha and epsilon
- Parameters
alpha – CBFGS parameter alpha
epsilon – CBFGS parameter epsilon
sy_epsilon – Tolerance on the s-y inner product
- Returns
the current object
- with_delta_tolerance(constraints_tolerance)
Tolerance on constraint violation
- Parameters
constraints_tolerance – tolerance delta (related to constraint violation)
- Returns
the current object
- with_initial_penalty(initial_penalty)
Initial penalty
If preconditioning is activated, then the initial penalty is computed internally following the recommendations of the book of Brigin and Martinez (Chapter 12). If you enable the preconditioning and you use this method, then you will be overriding the value of the initial penalty.
If preconditioning is not enabled, you can set the initial penalty using this method; if you don’t do so, the solver will use the default value (which is 1.0).
- Parameters
initial_penalty – initial value of penalty
- Returns
The current object
- with_initial_tolerance(initial_tolerance)
Specify the initial tolerance
- Parameters
initial_tolerance – initial tolerance
- Returns
The current object
- with_inner_tolerance_update_factor(inner_tol_update_factor)
Tolerance update factor
The tolerance is initially given by
with_initial_tolerance()
and it is then updated by this update factor until the target tolerance which is given bywith_tolerance()
- with_lbfgs_memory(lbfgs_memory)
Specify L-BFGS memory
- Parameters
lbfgs_memory – LBFGS memory
- Raises
It is required that the L-BFGS memory is larger than or equal to 2, otherwise an Exception is raised
- Returns
Returns the current instance of SolverConfiguration
- with_max_duration_micros(max_duration_micros)
Specify the maximum duration in microseconds (must be an integer)
The solver will interrupt the computation after this time limit and will return the current iterate.
- Parameters
max_duration_micros – maximum execution duration in microseconds (integer)
- Raises
Exception: if max_duration_micros is less than 1
- Returns
The current object
- with_max_inner_iterations(max_iters)
Maximum number of inner iterations
- Parameters
max_iters – maximum number of iterations
- Returns
The current object
- with_max_outer_iterations(max_outer_iterations)
Maximum number of outer iterations
- Parameters
max_outer_iterations – maximum number of outer iterations
- Returns
the current object
- with_penalty_weight_update_factor(penalty_weight_update_factor)
Penalty update factor
At every outer iteration of the penalty method, the weights are multiplied by this factor.
- Parameters
penalty_weight_update_factor – penalty weight update factor
- Raises
Exception, if the update factor is less than 1.0
- Returns
the current object
- with_preconditioning(do_preconditioning=True)
Whether to apply preconditioning using the approach of [1]
Note that this overrides the computation of the initial penalty
Note also that unless this method is called, no preconditioning is applied (this may change in a future release; we may make enable preconditioning by default)
[1] E.G. Birgin and J.M. Martinez, Practical Augmented Lagrangian Methods for Constrained Optimization, SIAM, 2014
- Parameters
do_preconditioning – whether to precondition
- Returns
the current object
- with_sufficient_decrease_coefficient(sufficient_decrease_coefficient)
Specify the sufficient decrease coefficient of the algorithm
- param sufficient_decrease_coefficient
sufficient decrease coefficient
- returns
The current object
- with_tolerance(tolerance)
Specify tolerance
- Parameters
tolerance – tolerance
- Raises
Exception: if tolerance <= 0
- Returns
The current object
opengen.config.tcp_server_config module
- class opengen.config.tcp_server_config.TcpServerConfiguration(bind_ip='127.0.0.1', bind_port=8333)
Bases:
object
TCP server configuration
- __init__(bind_ip='127.0.0.1', bind_port=8333)
Configuration of the TCP server
- Parameters
bind_ip – IP address of generated TCP server. The default value is “127.0.0.1” (localhost). Use “0.0.0.0” for the generated TCP server to bind on all IPs.
bind_port – Port on which the generated TCP server will bind. The default is 8333. Make sure you use an available port and avoid using privileged ports (i.e., 1 to 1024), well-known ports that are potentially used by other services and you should also avoid ephemeral ports (32768 to 65535 on Linux, 1025 to 5000 on Windows)
- Returns
new instance of TcpServerConfiguration, which can then be provided to an instance of OpEnOptimizerBuilder via enable_tcp_interface
- property bind_ip
IP at which the TCP server should bind, as a string
- Returns
TCP server IP
- property bind_port
Port at which the TCP server should bind, as int
- Returns
TCP server port