User Tools

Site Tools


optimization

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
optimization [2018/09/18 10:21]
mark.naves created
optimization [2022/01/12 13:41] (current)
jan.dejong
Line 1: Line 1:
 ===== Example: Shape optimization of cross-hinge ===== ===== Example: Shape optimization of cross-hinge =====
  
-This example provides a shape optimization of a single cross flexure by using matlab's <code>fmincon</code> function+This example provides a shape optimization of a single cross flexure by using matlab'''fmincon'' function. For this optimization a crosshinge is considered with a mass and inertia connected to node 3. Furthermore, the optimization objective is to maximize the first parasitic frequency of the system (note: rotation of the cross-hinge is prescribed to de desired rotation angle. Therefore, the first parasitic frequency of the system is given by the first eigenfrequency). A rotation of 0.5rad, a maximum stress of 300MPa and and a maximum actuation force of 2.5Nm is considered. 
 + 
 +The cost function of the optimization is defined by the inverse of the first eigenfrequency. Additionally, a limit on the maximum stress and actuation force is implemented by applying a penalty on the value of the cost function. The matlab function which calls spacarlight and computes the cost function is defined by: 
 + 
 +<code matlab run_sim.m> 
 +function [cost, out] = run_sim(P, Silent)% EXAMPLE SCRIPT FOR RUNNING SPACAR LIGHT 
 +if nargin == 1 
 +    Silent = true; %run in silent mode when called by optimizer 
 +end  
 +     
 +% DESIGN PARAMETERS 
 +H = P(1); 
 +B = P(2); 
 +w = P(3); 
 +t = P(4); 
 + 
 +% Optimization parameters 
 +stressmax = 300e6; %Max stress [MPa] 
 +Mmax = 2.5; %Max actuation moment [Nm] 
 +Stroke = 0.5; %Max stroke [Rad] 
 + 
 + 
 +%% NODE POSITIONS 
 +%           x y z 
 +nodes = [   0 0 0;    %node 1   
 +            0 H 0;    %node 2   
 +            B H 0;    %node 3 
 +            B 0 0];   %node 4 
 + 
 +         
 +%% ELEMENT CONNECTIVITY 
 +%                 q 
 +elements = [    1   3;  %element 1 
 +                2   3;  %element 2 
 +                2   4]; %element 3 
 +         
 +%% NODE PROPERTIES   
 +%node 1 
 +nprops(1).fix               = true;         %Fix node 1 
 + 
 +%node 3 
 +nprops(3).rot_z           = Stroke; 
 +nprops(3).mass            = 1; 
 +nprops(3).mominertia      = [1e-3 0 0 1e-3 0 1e-3]; 
 + 
 +%node 4 
 +nprops(4).fix               = true;         %Fix node 4 
 + 
 + 
 +%% ELEMENT PROPERTIES 
 +%Property set 1 
 +eprops(1).elems    = [1 3];            %Add this set of properties to elements 1 and 3 
 +eprops(1).emod     = 210e9;            %E-modulus [Pa] 
 +eprops(1).smod     = 70e9;             %G-modulus [Pa] 
 +eprops(1).dens     = 7800;             %Density [kg/m^3] 
 +eprops(1).cshape   = 'rect';           %Rectangular cross-section 
 +eprops(1).dim      = [w t];   %Width: 50 mm, thickness: 0.2 mm 
 +eprops(1).orien    = [0 0 1];          %Orientation of the cross-section as a vector pointing along "width-direction" 
 +eprops(1).nbeams   = 2;                %Number of beams used to model this element  
 +eprops(1).flex     = 1:6;              %Consider all deformation modes (1 to 6) as flexible 
 +eprops(1).color    = 'grey';           %Color 
 +eprops(1).opacity  = 0.7;              %Opacity 
 +eprops(1).cw       = true;             %Constrain warping at nodes (typical condition for flexure clamped at both ends). For a "free" end, warping is typically not constrained 
 + 
 +%Property set 2 
 +eprops(2).elems    = 2;                %Add this set of properties to element 2 
 +eprops(2).dens     = 3000;             %Density [kg/m^3] 
 +eprops(2).cshape   = 'rect';           %Rectangular cross-section 
 +eprops(2).dim      = [w 10e-3];    %Width: 50 mm, thickness: 10 mm 
 +eprops(2).orien    = [0 0 1];          %Orientation of the cross-section as a vector pointing along "width-direction" 
 +eprops(2).nbeams   = 1;                %1 beam for simulating this element (as it is rigid an no more elements are required) 
 +eprops(2).color    = 'darkblue'; 
 + 
 + 
 +%% OPTIONAL ARGUMENTS 
 +opt.filename    = 'crosshinge';     %Filename 
 +opt.calccompl   = false;            %Disable calculation of compliance matrices (can reduce computation time for large simulations) 
 +opt.silent      = Silent;            %Run in silent mode 
 + 
 +%% CALL SPACAR_LIGHT AND COMPUTE COST FUNCTION 
 +try 
 +    out = spacarlight(nodes, elements, nprops, eprops, opt); 
 +    cost = 1/min(out.freq(1,:)); %cost function (inverse of first frequency ) 
 +    stress = max(out.stressmax); %max stress 
 +    Mact = max(out.node(3).Mreac(3,:));%max actuation moment 
 +     
 +    %add penalty if limits are exceeded 
 +    if stress > stressmax 
 +        cost = cost * (1 + (stress-stressmax)/stressmax)^5; 
 +    end 
 +    if Mact > Mmax 
 +        cost = cost * (1 + (Mact-Mmax)/Mmax)^5; 
 +    end 
 +catch %if sumulation fails, cost is inf 
 +    cost = inf; 
 +end 
 +</code> 
 + 
 +An example to conduct the optimization is provided below, taking into account additional boundary conditions on the design parameters of the cross-hinge. See matlab's documentation on ''fmincon'' for more information. 
 + 
 +<code matlab optimization.m> 
 +%filename 
 +simulation = @run_sim; 
 + 
 +%starting point 
 +x0 = [0.1;  0.1;  50e-3; 0.2e-3]; 
 + 
 +%constraints 
 +b1 = [0.05; 0.05; 25e-3; 0.1e-3];   % Lower bound (b1 < x) 
 +b2 = [0.2;  0.2;  75e-3; 1e-3  ];       % Upper bound (x < b2) 
 + 
 +A = [-eye(4); eye(4)]; 
 +b = [-b1;b2]; 
 + 
 +%optimization 
 +x_opt = fmincon(simulation, x0, A, b); 
 + 
 +%show results 
 +[cost, out] = run_sim(x_opt,false); 
 +</code> 
 +//Note: prescribing input rotation is only supported for SPACAR light version 1.27 or higher.//
optimization.1537258888.txt.gz · Last modified: 2018/09/18 10:21 by mark.naves