Effacer les filtres
Effacer les filtres

optimize four functions together

2 vues (au cours des 30 derniers jours)
nadia nadi
nadia nadi le 24 Mai 2023
Commenté : Walter Roberson le 25 Mai 2023
Hello,
I have four functions and I want to optimize them together by ga. I know that I can solve each function alone and I already got an answer about that, but if I have all of them. The values I want to get is F1=0.405, F2=24.736 ,F3=0.525, F4=14.97. I approciate any help.
F1=@(x) 0.25-4.27*x(1)+0.61*x(2)+13.34*x(1)*x(2)-4.69*x(2).^2;
F2 = @(x) 30.07+71.68*x(1)-21.83*x(2)-306.55*x(1)*x(2)+179*x(2)^2;
F3 = @(x) 0.54-18.32*x(3)-10.6*x(1)-3.22*x(2)+0.3*x(4)+273.71*x(3)*x(1)+60.28*x(1)*x(2)-19.81*x(2).^2;
F4 = @(x) 17.39+1246.36*x(3)+348.83*x(1)-88.27*x(2)-43.72*x(4)-24455.25*x(3)*x(1)-1164.66*x(1)*x(2)+347.38*x(2)*x(4);
FitnessFunction=[F1;F2;F3;F4];
% [ fn, fc, f0, ff] ; % the range like this
lb = [0.001,0.01,0.0002,0.1];
ub = [0.045,0.1,0.0045,0.2];
numberOfVariables = 4;
A = []; b = [];
Aeq = []; beq = [];
[x,fval] = ga(FitnessFunction, numberOfVariables, A, b, Aeq, beq, lb, ub)
Many thanks

Réponse acceptée

Walter Roberson
Walter Roberson le 24 Mai 2023
Déplacé(e) : Matt J le 24 Mai 2023
  6 commentaires
Walter Roberson
Walter Roberson le 25 Mai 2023
Option 1: functions are independent, but for some reason you want to call an optimizer only once instead of making four separate optimization calls. Note that this approach will always be less efficient than making separate optimization calls:
F1=@(x) 0.25-4.27*x(1)+0.61*x(2)+13.34*x(1)*x(2)-4.69*x(2).^2;
F2 = @(x) 30.07+71.68*x(1)-21.83*x(2)-306.55*x(1)*x(2)+179*x(2)^2;
F3 = @(x) 0.54-18.32*x(3)-10.6*x(1)-3.22*x(2)+0.3*x(4)+273.71*x(3)*x(1)+60.28*x(1)*x(2)-19.81*x(2).^2;
F4 = @(x) 17.39+1246.36*x(3)+348.83*x(1)-88.27*x(2)-43.72*x(4)-24455.25*x(3)*x(1)-1164.66*x(1)*x(2)+347.38*x(2)*x(4);
FitnessFunction = @(x)[F1(x(1:2));F2(x(3:4));F3(x(5:8));F4(x(9:12))];
lb = [0.001,0.01,0.001,0.01,0.001,0.01,0.0002,0.1,0.001,0.01,0.0002,0.1]
lb = 1×12
0.0010 0.0100 0.0010 0.0100 0.0010 0.0100 0.0002 0.1000 0.0010 0.0100 0.0002 0.1000
ub = [0.045,0.1,0.045,0.1,0.045,0.1,0.0045,0.2,0.045,0.1,0.0045,0.2]
ub = 1×12
0.0450 0.1000 0.0450 0.1000 0.0450 0.1000 0.0045 0.2000 0.0450 0.1000 0.0045 0.2000
numberOfVariables = length(lb);
A = []; b = [];
Aeq = []; beq = [];
[x,fval] = gamultiobj(FitnessFunction, numberOfVariables, A, b, Aeq, beq, lb, ub)
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.
x = 70×12
0.0069 0.0874 0.0029 0.0699 0.0449 0.0998 0.0044 0.1174 0.0228 0.0671 0.0045 0.1266 0.0197 0.0478 0.0209 0.0822 0.0237 0.0424 0.0014 0.1303 0.0023 0.0850 0.0003 0.1963 0.0428 0.0262 0.0249 0.0678 0.0434 0.0967 0.0043 0.1480 0.0424 0.0103 0.0036 0.1437 0.0450 0.0133 0.0194 0.0335 0.0375 0.0753 0.0036 0.1438 0.0368 0.0509 0.0022 0.1538 0.0233 0.0527 0.0104 0.0886 0.0072 0.0194 0.0009 0.1574 0.0022 0.0842 0.0009 0.1781 0.0283 0.0451 0.0159 0.0898 0.0034 0.0173 0.0005 0.1603 0.0018 0.0845 0.0008 0.1790 0.0295 0.0369 0.0066 0.0876 0.0050 0.0162 0.0014 0.1669 0.0107 0.0921 0.0010 0.1376 0.0097 0.0709 0.0010 0.0641 0.0448 0.0706 0.0045 0.1184 0.0090 0.0996 0.0045 0.1625 0.0277 0.0369 0.0066 0.0872 0.0031 0.0162 0.0003 0.1669 0.0105 0.0910 0.0010 0.1376 0.0281 0.0523 0.0101 0.0892 0.0037 0.0188 0.0009 0.1593 0.0021 0.0844 0.0009 0.1784
fval = 70×4
0.2461 29.5665 -0.1761 18.1384 0.1969 30.4569 0.2000 8.0086 0.0949 30.6783 -0.1471 25.7319 0.0731 30.7326 -0.0284 20.2926 0.1861 30.0021 0.4339 9.0363 0.1641 30.2558 0.4850 8.7437 0.1546 29.8277 0.4598 11.2062 0.2375 29.4582 -0.0617 13.7948 0.1615 29.8246 0.4979 11.2112 0.1686 29.9956 0.4701 8.9272
Walter Roberson
Walter Roberson le 25 Mai 2023
Option 2: variables are shared, x(1) is the same variable for each, x(2) is the same for each, x(3) is the same for each that uses it, etc.
F1=@(x) 0.25-4.27*x(1)+0.61*x(2)+13.34*x(1)*x(2)-4.69*x(2).^2;
F2 = @(x) 30.07+71.68*x(1)-21.83*x(2)-306.55*x(1)*x(2)+179*x(2)^2;
F3 = @(x) 0.54-18.32*x(3)-10.6*x(1)-3.22*x(2)+0.3*x(4)+273.71*x(3)*x(1)+60.28*x(1)*x(2)-19.81*x(2).^2;
F4 = @(x) 17.39+1246.36*x(3)+348.83*x(1)-88.27*x(2)-43.72*x(4)-24455.25*x(3)*x(1)-1164.66*x(1)*x(2)+347.38*x(2)*x(4);
FitnessFunction = @(x)[F1(x(1:2));F2(x(1:2));F3(x(1:4));F4(x(1:4))];
lb = [0.001,0.01,0.0002,0.1];
ub = [0.045,0.1,0.0045,0.2];
numberOfVariables = length(lb);
A = []; b = [];
Aeq = []; beq = [];
[x,fval] = gamultiobj(FitnessFunction, numberOfVariables, A, b, Aeq, beq, lb, ub)
Optimization terminated: average change in the spread of Pareto solutions less than options.FunctionTolerance.
x = 20×4
0.0450 0.0100 0.0045 0.2000 0.0435 0.0991 0.0023 0.1445 0.0018 0.0867 0.0011 0.1504 0.0015 0.0672 0.0020 0.1515 0.0015 0.0627 0.0021 0.1536 0.0027 0.0203 0.0025 0.1472 0.0353 0.0101 0.0043 0.1983 0.0021 0.0138 0.0023 0.1839 0.0409 0.0872 0.0031 0.1794 0.0404 0.0106 0.0044 0.1578
fval = 20×4
0.0695 32.9573 0.0889 24.2877 0.1360 31.4632 -0.1465 17.8785 0.2620 29.6038 0.1286 9.4199 0.2646 29.4904 0.2332 11.2367 0.2645 29.4862 0.2587 11.4209 0.2497 29.8765 0.4412 14.0291 0.1098 32.2882 0.1753 22.0645 0.2491 29.9413 0.4849 12.5083 0.1403 31.3677 -0.0786 18.1736 0.0891 32.6241 0.1160 24.8790

Connectez-vous pour commenter.

Plus de réponses (1)

nadia nadi
nadia nadi le 25 Mai 2023
Modifié(e) : nadia nadi le 25 Mai 2023

Hello Walter,

I have two variables in First and second equations and four variables in the third and fourth. So you mean I need to write 12 different variables, I set their range and run the code ??

  1 commentaire
Torsten
Torsten le 25 Mai 2023
Modifié(e) : Torsten le 25 Mai 2023
If these 12 variables are not interconnected, you have 4 independent problems to solve. Thus call "fmincon" 4 times, with F_i as objective function for the i-th call.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by