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 or DEBUG_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 by with_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

Module contents