Scaled function for optimization

4 次查看(过去 30 天)
Patis Thepsorn
Patis Thepsorn 2023-5-16
移动Torsten 2023-5-16
clear
if true
% Unscaled formulation:
% min (x^3 - y)^2 - x
% subject to
% x^2 + 3150 - y <= 0
% -15 <= x <= 15
% -4000 <= y <= 4000
obj = @(x) (x(1)^3 - x(2))^2 - x(1);
nonlcon = @(x) deal(x(1)^2 + 3150 - x(2), []);
lb = [-15, -4000];
ub = [15, 4000];
% Solve the problem a few times
fprintf("Unscaled optimisation results:\n");
x_unscaled = zeros(5,2);
fval_unscaled = zeros(5,1);
for i = 1:5
options = optimoptions('ga','Display','none','ConstraintTolerance',1e-6,'PlotFcn', @gaplotbestf);
[x_unscaled(i,:), fval_unscaled(i)] = ga(obj, 2, [], [], [], [], lb, ub, nonlcon, options);
fprintf("Objective value: %0.3f, x = %0.3f, y = %0.3f\n",fval_unscaled(i), x_unscaled(i,1), x_unscaled(i,2));
end
end
% Scaled formulation:
% Substitute w = x/15 and z = y/4000
% and multiply the objective and constraints by reasonable factors
% (so that all of their terms are somewhere around the order of 1)
% to obtain...
% min 0.01*(((15*w)^3 - (4000*z))^2 - 15*w)
% subject to
% 0.001*((15*w)^2 + 3150 - (4000*z)) <= 0
% -1 <= w <= 1
% -1 <= z <= 1
if true
obj = @(x) 0.01*(((15*x(1))^3 - (4000*x(2)))^2 - (15*x(1)));
nonlcon = @(x) deal(0.001*((15*x(1))^2 + 3150 - (4000*x(2))), []);
lb = [-1, -1];
ub = [1, 1];
% Solve the problem a few times
fprintf("Scaled optimisation results:\n");
x_scaled = zeros(5,2);
fval_scaled = zeros(5,1);
for i = 1:5
options = optimoptions('ga','Display','none','ConstraintTolerance',1e-6,'PlotFcn', @gaplotbestf);
[x_scaled(i,:), fval_scaled(i)] = ga(obj, 2, [], [], [], [], lb, ub, nonlcon, options);
% Rescale for x and y afterwards
fval_scaled(i,1) = fval_scaled(i,1) * 100;
x_scaled(i,1) = x_scaled(i,1) * 15;
x_scaled(i,2) = x_scaled(i,2) * 4000;
fprintf("Objective value: %0.3f, x = %0.3f, y = %0.3f\n",fval_scaled(i), x_scaled(i,1), x_scaled(i,2));
end
end
From the run, I got this solution. But, I do not understand the coding, especially the 0.01 and 0.001 which multiply in the scaled objective function and constraint. How does it come from?

回答(1 个)

Torsten
Torsten 2023-5-16
移动:Torsten 2023-5-16
From the run, I got this solution. But, I do not understand the coding, especially the 0.01 and 0.001 which multiply in the scaled objective function and constraint. How does it come from?
Did you read the program documentation ?
% Substitute w = x/15 and z = y/4000
% and multiply the objective and constraints by reasonable factors
% (so that all of their terms are somewhere around the order of 1)

类别

Help CenterFile Exchange 中查找有关 Genetic Algorithm 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by