Solve and Validate

Solve and Validate#

The Analysis and Synthesis problems can be solved once the appropriate managers are created:

1sys = opt_system([arguments]);
2config = opt_config();
3man_ana = opt_analysis(sys, config);  
4man_syn = opt_synthesis(sys, config); 

Three solution modes are available:

  1. Single Solution

  2. Bisection

  3. Alternation

Single Solution#

The solve_single() routine performs Analysis or Synthesis at given specifications. The output of solve_single() is a solution structure opt_solution. The fields of the solution structure are explained further below in Validation.

Analysis#

The Analysis single solution routine is

1sol_ana_single = man_ana.solve_single(order, specs);

The order input is an \(s\)-length cell array. Each entry of the order cell array is one or two nonnegative integers:

Order Length

Operator Classes

1

op_gen, op_sml_causal, op_quad_causal

2

op_sml, op_pcc, op_quad

The order defines length of the filters in the IQCs. A higher order requries more computation, but can lead to improved bounds. An example order declaration is

1op1 = op_gen([arguments]);
2op2 = op_sml([arguments]);
3op3 = op_quad([arguments]);
4order = {1, [2, 0], [1, 1]};

The two-input order routines default to zero if only one input is passed. As an example for op_sml, order 2 is equivalent to [2, 0].

The specs is a cell array of specifications.

Note

Analysis is performed with respect to a common certificate among all performance specifications in specs [1]. Requiring this common certificate may yield conservatism as compared to doing Analysis separately for each specification in specs.

The common certificate is required if Alternation between Analysis and Synthesis is performed.

Synthesis is invoked by

1sol_syn_single = man_syn.solve_single(iqc_init, specs);

The iqc_init input is an \(s\)-length cell array of IQCs to warm-start the Synthesis process. A default input of iqc=[] will compute valid warm-starts using each operator class’s create_iqc_identity() routine.

The objective in Analysis or Synthesis is set using the target field in the operator class’s. If specs{j}.target = true, then the specification in \(i\) is minimized. At most one specification \(j\) can have specs{j}.target = true. If specs{j}.target=false for all specifications \(j\), then a feasibility problem is solved.

Caution

Different specifications can have different rate \(\rho\) in Synthesis if and only if

  1. the order for each op_gen is 0

  2. the order for each op_sml, op_pcc, op_quad is [nonnegative, 0].

If these conditions fail, then all specifications

  • must have the same rate \(\rho\) (opt_config.gen.same_rho = true),

  • must hold only in an infinite-horizon sense (in the current implementation).

The opt_manager classes will check these conditions, and will override same_rho to true if not already set. This issue is due to the presence of noncausal filters in IQC synthesis.

Bisection#

The routine bisect() performs bisection on a single specification. Parameters of bisection are set using the bisect_opts configuration. The index of the specification in the spec to minimize using bisection is set via bisect_opts.spec_ind, with a default of index of 1.

The outputs of bisect() are the opt_solution structure and the two-element array v_range. The entries of v_range are the lower and upper bounds of the bisected parameter.

As an example, the Analysis and Synthesis routines for minimizing the linear convergence rate \(\rho\) subject to a \(\rho\)-weighted \(\ell_2\) gain bound of 100 is

1spec_rho = spec_stability();
2spec_l2 = spec_e2e(100);
3specs = {spec_rho, spec_l2};
4b_opts = bisect_opts;
5b_opts.spec_ind = 1;
6
7[sol_ana_bisect, v_ana] = man_ana.bisect(order, specs, b_opts);
8[sol_syn_bisect, v_syn] = man_syn.bisect(iqc_init, specs, b_opts);

Alternation#

The alternate() routine switches between Synthesis and Analysis. It solves a Synthesis problem with fixed IQCs to find a controller, and then solves Analysis with the fixed controller to find IQCs. The Analysis and Synthesis problems may include inner bisection steps.

An alternation routine with 3 Synthesis/Analysis steps and inner bisection is performed by

1Niter = 3; 
2[sol_syn_alternate, v_history] = man_syn.alternate(Niter, iqc_init, order, specs, b_opts);

The v_history output is a cell array with 2 rows and Niter columns. Each entry of the cell array stores the lower and upper parameter bounds from bisection. The top row are the Synthesis bounds, and the bottom row are the Analysis bounds.

Caution

The sequence of parameter bounds in v_history ideally forms a monotonically nonincreasing sequence. This may not hold true in implementation due to numerical issues in the solutions and controller recovery. Adjustment of the tolerances in the configuration options (e.g. raising the Analysis option config.tol.G_max) may encourage monotonic decrease.

Further development will attempt to encourage monotonicity of decrease in alternation.

Validate#

The opt_solution structure contains information about the solution of analysis/synthesis. The solution is feasible if the following conditions are met:

Name

Description

Valid Condition

STATUS

Feasibility of problem

STATUS\(=0\) if feasible, STATUS\(\neq 0\) if infeasible

dia

Constraint violation

dia\(<0\) if strictly feasible, dia\(=0\) if marginally feasible, dia \(> 0\) if infeasible

gain

Input passivity index and \(H_\infty\) gain

Feasible if gain(1) \(< 0\) and gain(2) \(< 1\) (for spec_stability)

rho

Convergence rate

Linearly convergent if \(\rho < 1\)

regcl

Closed-loop regulator equation

Nonempty struct with fields (S, R, Pi, Gam, Phi, Th)

If the algorithm has a block-lower-triangular information structure, and Analysis or Synthesis is successful at some \(\rho > 0\), then the algorithm is also well-posed.

Other attributes of opt_solution include

Field

Description

vars

Design variables in the Analysis/Synthesis problem

sys

System that solves the inclusion problem

lmi_out

Solution information from the numerical solver (LMILAB)

cert

Analysis-and-Synthesis-specific certificates