Optimisation problem not solving for maximum values
Show older comments
I have made the code shown below to find the maximum d/t and kl/r values possible within specific constraints given. I would expect that d would close to 1000 and t close to 35. However in the solution it is giving is d=2 and t=1. Any ideas how I can fix this? When giving these values it is also throwing up the message :
Solving problem using ga.
Optimization terminated: average change in the penalty fitness value less than options.FunctionTolerance
but constraints are not satisfied.
Any help would be greatly apreciated thank you.
%% Clear workspace
clear;
clc;
%% Input Variables
l=14830; % Member length (mm)
k=1; % Effective length factor
d0.d=1000; %initial guess
d0.t=30; %initial guess
%% Equations
prob = optimproblem('ObjectiveSense','maximize');
d = optimvar('d', 1,'Type','integer');
t = optimvar('t',1,'Type','integer');
%% Variables
din=d-(2*t); % Member inner diameter
a=3.1415/4 * ((d^2)-(din^2)); % Member cross sectional area
i=3.1415/64 * ((d^4)-(din^4)); % Member second moment of inertia
r=(a/i)^0.5; % Member radius of gyration
prob.Objective= (d/t) + ((k*l)/r);
%% Constraints
cons1 = d>=1;
cons2 = d<=3000;
cons3 = t>=1;
cons4 = t<=100;
cons5 = d/t<=30;
cons6 = d/t>=1;
cons7 = k*l/r<=40;
cons8 = k*l/r>=1;
prob.Constraints.cons1 = cons1;
prob.Constraints.cons2 = cons2;
prob.Constraints.cons3 = cons3;
prob.Constraints.cons4 = cons4;
prob.Constraints.cons5 = cons5;
prob.Constraints.cons6 = cons6;
prob.Constraints.cons7 = cons7;
prob.Constraints.cons8 = cons8;
show(prob)
sol = solve(prob,d0)
sol.d
sol.t
Answers (1)
We can easily do a discrete sweep over the allowable d and t values to see where the feasible region is, approximately. Based on the sweep below, it does not appear that there are any feasible (d,t) pairs.
l=14830; % Member length (mm)
k=1; % Effective length factor
[d,t]=meshgrid(1:0.5:3000,1:0.5:100);
din=d-(2*t); % Member inner diameter
a=3.1415/4 * ((d.^2)-(din.^2)); % Member cross sectional area
i=3.1415/64 * ((d.^4)-(din.^4)); % Member second moment of inertia
r=(a./i).^0.5; % Member radius of gyration
feas=true(size(d)); %feasibility map
expr=d./t;
feas( expr>30 | expr<1 | ~isfinite(expr) )=false;
expr=k*l./r;
feas( expr>40 | expr<1 | ~isfinite(expr) )=false;
[d,t]=find(feas) %search for feasible d,t
1 Comment
Maximilian
on 6 Oct 2022
Categories
Find more on Surrogate Optimization in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!