optimization_variable
Graph.optimization_variable(count, lower_bound, upper_bound, is_lower_unbounded=False, is_upper_unbounded=False, initial_values=None, *, name=None)
Create a 1D Tensor of optimization variables, which can be bounded, semi-bounded, or unbounded.
Use this function to create a sequence of variables that can be tuned by the optimizer (within specified bounds) in order to minimize the cost function.
Parameters
- count (int) – The number N of individual real-valued variables to create.
- lower_bound (float) – The lower bound vmin for generating an initial value for the variables. This will also be used as lower bound if the variables are lower bounded. The same lower bound applies to all count individual variables.
- upper_bound (float) – The upper bound vmax for generating an initial value for the variables. This will also be used as upper bound if the variables are upper bounded. The same upper bound applies to all count individual variables.
- is_lower_unbounded (bool , optional) – Defaults to False. Set this flag to True to define a semi-bounded variable with lower bound −∞; in this case, the lower_bound parameter is used only for generating an initial value.
- is_upper_unbounded (bool , optional) – Defaults to False. Set this flag to True to define a semi-bounded variable with upper bound +∞; in this case, the upper_bound parameter is used only for generating an initial value.
- initial_values (np.ndarray or List [ np.ndarray ] or None , optional) – Initial values for the optimization variable. You can either provide a single initial value, or a list of them. Note that all optimization variables in a graph with non-default initial values must have the same length. That is, you must set them either as a single array or a list of arrays of the same length. Defaults to None, meaning the optimizer initializes the variables with random values.
- name (str or None , optional) – The name of the node.
Returns
The sequence {vn} of N optimization variables. If both islower_unbounded and is_upper_unbounded are False, these variables are bounded such that $v\mathrm{min}\leq vn\leq v\mathrm{max}.IfoneoftheflagsisTrue(forexampleislowerunbounded=True),thesevariablesaresemi−bounded(forexample-\infty \leq v_n \leq v_\mathrm{max}).IfbothofthemareTrue,thenthesevariablesareunboundedandsatisfythat-\infty \leq v_n \leq +\infty$.
Return type
SEE ALSO
Graph.anchored_difference_bounded_variables
: Create anchored optimization variables with a difference bound.
Graph.complex_optimizable_pwc_signal
: Create a complex optimizable Pwc signal.
Graph.optimizable_scalar
: Create an optimization scalar.
Graph.real_optimizable_pwc_signal
: Create a real optimizable Pwc signal.
boulderopal.run_optimization
: Function to find the minimum of a generic function.
Examples
Perform a simple optimization task.
>>> variables = graph.optimization_variable(
... 2, lower_bound=0, upper_bound=1, name="variables"
... )
>>> x = variables[0]
>>> y = variables[1]
>>> cost = (x - 0.1) ** 2 + graph.sin(y) ** 2
>>> cost.name = "cost"
>>> result = bo.run_optimization(
... graph=graph, cost_node_name="cost", output_node_names="variables"
... )
>>> result["cost"]
0.0
>>> result["output"]["variables"]["value"]
array([0.1, 0.])
See examples about optimal control of quantum systems in the How to optimize controls in arbitrary quantum systems using graphs user guide.