Main Content

Design Optimization to Meet a Custom Objective (GUI)

This example shows how to optimize a design to meet a custom objective using the Response Optimizer app. You optimize the cylinder parameters to minimize the cylinder geometry and satisfy design requirements.

Hydraulic Cylinder Model

The hydraulic cylinder model is based on the Simulink® model sldemo_hydcyl. The model includes:

  • A step change applied to the cylinder control valve orifice area that causes the cylinder piston position to change.

Hydraulic Cylinder Design Problem

You tune the cylinder cross-sectional area and piston spring constant to meet the following design requirements:

  • Ensure that the piston position has a step response rise time of less than 0.04 seconds and setting time of less than 0.05 seconds.

  • Limit the maximum cylinder pressures to 1.75e6 N/m.

  • Minimize the cylinder cross-sectional area.

Open the Response Optimizer

Open the Response Optimizer to configure and run design optimization problems interactively using the following command.

sdotool('sdoHydraulicCylinder')

Specify Design Variables

Specify the following model parameters as design variables for optimization:

  • Cylinder cross-sectional area Ac

  • Piston spring constant K

In the Design Variables Set drop-down list, select New. A dialog box to select model parameters for optimization opens.

Select Ac and K. Click ⇦ to add the selected parameters to the design variables set.

Limit the cylinder cross-sectional area to circular area with radius between 1 and 2 centimeters and the piston spring constant to a range of 1e4 to 10e4 N/m. To do so, specify the maximum and minimum for the corresponding variable in the Maximum and Minimum columns.

Because the variable values are different orders of magnitude, scale Ac by 1e-3 and K by 1e5.

Press Enter after you specify the values.

Click OK. A new variable DesignVars appears in the Response Optimizer browser.

Specify Design Requirements

The design requirements require logged model signals. During optimization, the model is simulated using the current value of the design variables and the logged signal is used to evaluate the design requirements.

Log the cylinder pressures, which is the first output port of the Cylinder Assembly block.

In the New drop-down list, select Signal. A dialog box to select model signals to log opens.

Enter Pressures as the signal name in the Signal set field. Then, in the Simulink model, click the first output port of the Cylinder Assembly block named Pressure. The dialog box updates to display the selected signal.

Select the signal in the dialog box and click ⇨ to add it to the signal set.

Click OK. A new variable Pressures appears in the Response Optimizer browser.

Similarly, log the piston position, which is the second output of the Cylinder Assembly block, in a variable named PistonPosition.

Specify the maximum cylinder pressure requirement of less than 1.75e6 N/m.

In the New drop-down list, select Signal Bound. A dialog box to create a signal bound requirement opens.

Designate the Requirement Name as MaxPressure. In both the start and end Amplitude columns, enter the maximum pressure requirement of 1.75e6 N/m, and set the Edge End Time to 0.1 s. In the Select Signals to Bound area, select Pressures, the signal on which this requirement applies.

Click OK.

  • A new MaxPressure variable appears in the Response Optimizer browser.

  • A graphical view of the maximum pressure requirement is automatically created.

Specify the piston position step response requirement of rise time of less than 0.04 seconds and a settling time of less than 0.05 seconds.

In the New drop-down list of the Response Optimization tab, select Step Response Envelope. A dialog box to create a step response requirement opens.

Specify a requirement named PistonResponse, and the required rise and settling time bounds. Select PistonPosition as the signal to apply the step response requirement to.

Click OK.

Specify Custom Objective

The custom objective is to minimize the cylinder cross-sectional area.

In the New drop-down list, select Custom Requirement. A dialog box to create a custom requirement opens.

Specify a function to call during optimization in the Requirement Function field. At each optimization iteration, the software calls the function and passes the current design variable values. You can also optionally pass logged signals to the custom requirement. Here, you use sdoHydraulicCylinder_customObjective as the custom requirement function, which returns the value of the cylinder cross-sectional area.

In the Requirement Type drop-down list, specify whether the requirement is an objective to minimize (min), an inequality constraint (<=), or an equality constraint (==).

type sdoHydraulicCylinder_customObjective
function objective = sdoHydraulicCylinder_customObjective(data)
%SDOHYDRAULICCYLINDER_CUSTOMOBJECTIVE
%
% The sdoHydraulicCylinder_customObjective function is used to define a
% custom requirement that can be used in the graphical SDTOOL environment.
%
% The |data| input argument is a structure with fields containing the
% design variable values chosen by the optimizer.
%
% The |objective| return argument is the objective value to be minimized by
% the SDOTOOL optimization solver.
%

% Copyright 2011 The MathWorks, Inc.

%For the cylinder design problem we want to minimize the cylinder
%cross-sectional area so return the cylinder cross-sectional area as an
%objective value.
Ac = data.DesignVars(1);
objective = Ac.Value;
end

Evaluate the Initial Design

Click Plot Model Response to simulate the model and check how well the initial design satisfies the design requirements. To show both requirement plots at the same time, use the plot layout widgets in the View tab.

From the plots, see that the maximum pressure requirement is satisfied but the piston position step response requirement is not satisfied.

Optimize the Design

Create a plot to display how the cylinder cross-sectional area and piston spring constant are modified during optimization.

In the Data to Plot drop-down list, select DesignVars, which contains the optimization design variables Ac and K. In the Add Plot drop-down, create a new iteration plot to show the design variable trajectories. For this new plot, click Show scaled values in the Iteration Plot tab, to facilitate viewing the two trajectories on the same axes.

Click Optimize in the Response Optimization tab.

The optimization progress window updates at each iteration and shows that the optimization converged after 4 iterations.

The Pressures and PistonPosition plots indicate that the design requirements are satisfied. The MinimizeAC plot shows that the cylinder cross-sectional area Ac is minimized.

To view the optimized design variable values, click the variable name in the Response Optimizer browser. The optimized values of the design variables are automatically updated in the Simulink model.

Related Examples

To learn how to optimize the cylinder design using the sdo.optimize command, see Design Optimization to Meet a Custom Objective (Code).