Main Content

optimizeDesign

Optimize circuit design in simulation environment

Since R2024b

Description

[sol,metric] = obj.optimizeDesign optimizes the circuit parameters of the msbOptimizer object obj.

example

[sol,metric] = optimizeDesign(obj,NumParallelSims=8,MaxNumberSims=100) optimizes the circuit parameters by running 8 simulations per iteration and limits the maximum number of simulations to 100.

Examples

collapse all

Define the performance specifications of a second-order DSM.

outputTable=table();
outputTable.Test=["ACMeas";"ACMeas";"ACMeas";"ACMeas";"ACMeas"];
outputTable.Name={'SNR';'SFDR';'SINAD';'ENOB';'NoiseFloor'};
outputTable.Weight=[100;40;35;90;15];
outputTable.Units={'dB';'dB';'dB';'bits';'dB'};
outputTable.Spec={'> 72';'> 74';'> 72';'maximize 11.5';'< -78'}
outputTable=5×5 table
      Test           Name         Weight     Units            Spec       
    ________    ______________    ______    ________    _________________

    "ACMeas"    {'SNR'       }     100      {'dB'  }    {'> 72'         }
    "ACMeas"    {'SFDR'      }      40      {'dB'  }    {'> 74'         }
    "ACMeas"    {'SINAD'     }      35      {'dB'  }    {'> 72'         }
    "ACMeas"    {'ENOB'      }      90      {'bits'}    {'maximize 11.5'}
    "ACMeas"    {'NoiseFloor'}      15      {'dB'  }    {'< -78'        }

Define the variables to optimize.

variableTable=table();
variableTable.parameters={'a1';'a2';'b1';'b2'};
variableTable.values=["0.15:0.005:0.16";"0.55:0.005:0.7";"0.15:0.005:0.16";"0.55:0.005:0.7"]
variableTable=4×2 table
    parameters         values      
    __________    _________________

      {'a1'}      "0.15:0.005:0.16"
      {'a2'}      "0.55:0.005:0.7" 
      {'b1'}      "0.15:0.005:0.16"
      {'b2'}      "0.55:0.005:0.7" 

Create the msbOptimizer object.

moptimizer = msbOptimizer(SimulationEnvironment='simulink',OutputsSetup=outputTable,VariableSetup=variableTable,DesignName='DSM2ndOrder')
moptimizer = 
  msbOptimizer with properties:

               DesignName: 'DSM2ndOrder'
                   Solver: "surrogateopt"
    SimulationEnvironment: 'simulink'
             BestSolution: []
              BestMetrics: []
     FinalOptimizerStatus: []
             OutputsSetup: [5x5 table]
          ParametersSetup: [4x2 table]
           ParameterNames: ["a1"    "a2"    "b1"    "b2"]
          ParameterValues: ["0.15:0.005:0.16"    "0.55:0.005:0.7"    "0.15:0.005:0.16"    "0.55:0.005:0.7"]
                    Eflag: []
                   Trials: []
              Constraints: [5x11 table]
     ParameterScaleFactor: [0.0050 0.0050 0.0050 0.0050]

Optimize the parameters.

[sol,metric] = moptimizer.optimizeDesign
Maximum number of simulations: 64
Number of parallel simulations: 8

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Running 8 simulations in Simulink...

Optimizer was unable to meet some or all the specifications.
You can continue optimization from the current state by using the checkpoint file.
E.g., if your object is called 'optimizer', run the following command:
 [solution, bestMetrics] = optimizer.optimizeDesign('useCheckPoint',true)

Figure Optimization Plot Function contains an axes object. The axes object with title DSM2ndOrder Optimization, xlabel Number of simulations, ylabel ENOB contains a line object which displays its values using only markers. This object represents Infeasible Best.

sol=4×2 table
    Name    Value
    ____    _____

    "a1"    0.155
    "a2"      0.6
    "b1"    0.155
    "b2"     0.66

metric=5×4 table
         Name         FinalMetrics          Specs           Units  
    ______________    ____________    _________________    ________

    {'SNR'       }       70.699       {'> 72'         }    {'dB'  }
    {'SFDR'      }       80.248       {'> 74'         }    {'dB'  }
    {'SINAD'     }       70.699       {'> 72'         }    {'dB'  }
    {'NoiseFloor'}      -78.276       {'< -78'        }    {'dB'  }
    {'ENOB'      }       11.452       {'maximize 11.5'}    {'bits'}

As you can see, the function was not able to meet the required SNR amd SINAD specifications. You can use the check point file to continue optimizing from the current state.

Input Arguments

collapse all

Circuit design to optimize, specified as an msbOptimizer object The object includes the name of the simulation environment, the name of the circuit design, the performance specifications, and the variables to optimize.

Name-Value Arguments

Specify optional pairs of arguments as Name1=Value1,...,NameN=ValueN, where Name is the argument name and Value is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: [sol,metric] =obj.optimizeDesign(ProgressPlot='true') optimizes the circuit design defined in the obj object and shows the optimization progress in a plot.

Number of parallel simulations per iteration, specified as a nonnegative integer scalar.

Data Types: double

Maximum number of simulations to run, specified as a nonnegative integer scalar.

Data Types: double

Minimum number of random sample points to create at the start of a surrogate creation phase, specified as a nonnegative integer scalar.

Data Types: double

Show optimization progress in a plot.

Data Types: logical

Name of the file to create checkpoints and restart the optimization process, specified as a string or char vector.

Use the checkpoint file for optimization. The function can only use this argument after the creation of a checkpoint file at the end of a simulation run.

Data Types: logical

Optimization solver used to optimize circuit parameters. You can only select surrogateopt.

Handle to objective function that evaluates the objective.

Initial points for surrogate optimization, specified as a matrix or struct.

Data Types: double

Random number generator seed, specified as a nonnegative integer scalar.

Data Types: double

Random number generator algorithm used by optimization solver, specified as a string.

Data Types: char

Output Arguments

collapse all

Optimized variables or parameters, returned as a table. The elements of the table matches the variables or parameters defined in the VariableSetup argument in mbsOptimizer object.

Performance metrics using optimized variables or parameters, returned as a table. The elements of the table matches the variables or parameters defined in the OutputsSetup argument in mbsOptimizer object.

Version History

Introduced in R2024b