Hello everyone and welcome!
In this post, I’m going to show you how to solve multi-objective optimization with linear and nonlinear constraints in Matlab. This method is very easy and effective. Minimum programming skill is required.
Here are the details of the benchmark problem to test the performance of the method.
To solve this problem, we need to convert the linear and nonlinear constraints of the problem to these forms.
Let’s see how this multi objective optimization method works.
For more videos like this, check my YouTube channel here.
Matlab code
objective_function.m
function Output = objective_function(Input)
x1 = Input(1);
x2 = Input(2);
x3 = Input(3);
x4 = Input(4);
x5 = Input(5);
x6 = Input(6);
F1 = - (25*(x1-2)^2 + (x2-2)^2 + (x3-1)^2 + (x4-4)^2 + (x5-1)^2);
F2 = x1^2 + x2^2 + x3^2 + x4^2 + x5^2 + x6^2;
Output = [F1 F2];
nonlinear_constraints.m
function [C Ceq] = nonlinear_constraints(Input)
x1 = Input(1);
x2 = Input(2);
x3 = Input(3);
x4 = Input(4);
x5 = Input(5);
x6 = Input(6);
C(1)=(x3-3)^2 + x4 -4;
C(2)= -(x5-3)^2 - x6 +4;
Ceq = [];
solver.m
function [x,fval,exitflag,output,population,score] = solver(nvars,Aineq,bineq,lb,ub,MaxGenerations_Data)
%% This is an auto generated MATLAB file from Optimization Tool.
%% Start with the default options
options = optimoptions('gamultiobj');
%% Modify options setting
options = optimoptions(options,'MaxGenerations', MaxGenerations_Data);
options = optimoptions(options,'CrossoverFcn', { @crossoverintermediate [] });
options = optimoptions(options,'Display', 'off');
options = optimoptions(options,'PlotFcn', { @gaplotpareto });
[x,fval,exitflag,output,population,score] = ...
gamultiobj(@objective_function,nvars,Aineq,bineq,[],[],lb,ub,@nonlinear_constraints,options);
main_program.m
clc
clear all
nvars =6;
Aineq = [-1 -1 0 0 0 0; 1 1 0 0 0 0; -1 1 0 0 0 0; 1 -3 0 0 0 0];
bineq = [-2; 6; 2; 2];
lb = [0; 0; 1; 0; 1; 0];
ub = [10; 10; 5; 6; 5; 10];
MaxGenerations_Data =100;
[x,fval,exitflag,output,population,score] = solver(nvars,Aineq,bineq,lb,ub,MaxGenerations_Data);
fval
x
P/s: If you find the post useful, share it to remember and to help other people as well.
Hi dear
First of all i would like to thanks you for a very interesting content of your channel really very useful. Secondly, if i will send you some problems to go on above them .
Thanks so much.
Best Regards
Hi Nidal, thanks for your nice comment!
can you please teach NSGA ii using matlab code??
Hi, thanks for the great suggestion. NSGA ii in Python has been done and its Matlab version will be very soon.
Hi, dear! Thank you for the code sharing. Could you please let me know if you have dome NSGA ii in its Matlab version? thank you
Hello, many thanks for your interest. I don’t have that code in Matlab
I tried but got an error, is there any suggestion
Error using optimoptions (line 124)
Invalid solver specified. Provide a solver name or handle (such as ‘fmincon’ or @fminunc).
Type DOC OPTIMOPTIONS for a list of solvers.
Error in solver (line 5)
options = optimoptions(‘gamultiobj’);
This is because your Matlab does not have fmincon solver. Please, use Matlab version 2016a.
Thankyou
fval =
-42.4672 4.0325
-64.4425 4.3167
-204.9162 25.4560
-68.4659 4.4200
-176.3779 23.3690
-117.1029 9.2984
-187.3962 24.2004
-137.3266 20.3133
-245.4875 37.6128
-42.4672 4.0325
-244.0463 33.8560
-244.9977 36.3944
-242.8695 31.1689
-149.2609 21.4148
-116.6668 8.4164
-189.4040 24.3959
-85.4876 4.8998
-117.9602 18.7262
-116.1207 6.9885
-98.0002 5.4020
-242.2967 30.1695
-80.2893 4.7804
-201.9388 25.1849
-169.1371 22.7629
-75.2741 4.6611
-227.2502 27.2069
-58.1491 4.1957
-152.1515 21.7272
-215.3331 26.2422
-158.9071 21.9578
-131.5660 19.9300
-131.9951 20.0866
-53.0899 4.1138
-105.0623 5.6095
-218.7035 26.5650
-72.7025 4.5284
-245.5291 37.8639
-116.3443 7.5633
-145.3884 21.1045
-115.9527 6.0011
-235.5090 27.8822
-192.0645 24.6629
-165.5557 22.4768
-223.8144 26.9094
-154.7908 21.7831
-120.5257 19.0029
-95.6976 5.2437
-117.1029 9.3063
-179.6290 23.7339
-244.3910 34.7710
-142.8774 21.0709
-109.5279 5.7853
-139.8956 20.6589
-242.2426 29.0887
-162.0649 22.2859
-183.6902 24.0545
-127.6009 19.6715
-88.9368 5.0713
-213.4980 26.1139
-197.1802 24.9800
-243.4899 32.6342
-170.8270 22.9209
-229.8207 27.5322
-219.8152 26.8394
-93.0124 5.1635
-59.8934 4.2268
-240.9637 28.6544
-210.9423 25.9079
-48.0658 4.0562
-244.0555 33.8565
x =
0.9902 1.0089 1.0083 0.0010 1.0011 0.1235
0.6133 1.3866 1.0052 0.0007 1.0007 0.0770
4.7417 0.9267 1.0346 0.0205 1.0031 0.1899
0.5553 1.4466 1.0047 0.0026 1.0023 0.0695
4.5241 0.8750 1.0391 0.0207 1.0128 0.1739
0.0001 2.0000 2.0548 0 1.0000 0.2760
4.6107 0.9073 1.0345 0.0242 1.0052 0.1933
4.1906 0.8299 1.0177 0.0015 1.0008 0.1610
5.0009 1.0001 2.8319 0.0039 1.1594 1.4965
0.9902 1.0089 1.0083 0.0010 1.0011 0.1235
5.0008 1.0002 2.3868 0.0005 1.1213 0.9455
5.0008 1.0001 2.6883 0.0000 1.1433 1.3608
5.0007 1.0003 1.9016 0.0060 1.0769 0.6211
4.2989 0.8820 1.0471 0.0142 1.0163 0.1644
0.0003 2.0000 1.8383 0.0012 1.0000 0.1927
4.6270 0.9081 1.0426 0.0405 1.0155 0.2046
0.3339 1.6654 1.0030 0.0029 1.0028 0.0561
4.0055 0.7808 1.0303 0.0094 1.0046 0.0423
0.0004 2.0005 1.4038 0.0002 1.0000 0.1255
0.1889 1.8308 1.0059 0.0037 1.0007 0.0356
5.0006 1.0004 1.6977 0.0352 1.0346 0.4571
0.3973 1.6081 1.0040 0.0096 1.0092 0.0999
4.7192 0.9112 1.0346 0.0127 1.0025 0.0885
4.4653 0.8501 1.0245 0.0161 1.0097 0.1789
0.4622 1.5618 1.0019 0.0046 1.0013 0.0422
4.9008 0.9847 1.0690 0.0188 1.0164 0.2084
0.7089 1.2909 1.0060 0.0033 1.0020 0.1036
4.3240 0.9017 1.0735 0.0105 1.0104 0.2096
4.8163 0.9454 1.0327 0.0089 1.0315 0.1453
4.3801 0.8153 1.0333 0.0148 1.0059 0.1680
4.1382 0.8190 1.0458 0.0162 1.0078 0.1575
4.1441 0.8628 1.0577 0.0295 1.0127 0.1520
0.7922 1.2073 1.0067 0.0008 1.0009 0.1155
0.1125 1.8931 1.0054 0.0015 1.0008 0.0184
4.8404 0.9550 1.0547 0.0107 1.0329 0.2111
0.4969 1.5054 1.0052 0.0034 1.0008 0.0562
5.0009 1.0001 2.8632 0.0137 1.1906 1.4965
0.0000 1.9995 1.5986 0.0013 1.0000 0.0981
4.2644 0.8392 1.0840 0.0198 1.0115 0.1271
0.0004 1.9998 1.0010 0.0003 1.0000 0.0010
4.9576 1.0025 1.0846 0.0226 1.0361 0.2216
4.6478 0.9221 1.0539 0.0460 1.0185 0.2464
4.4358 0.8373 1.0254 0.0160 1.0086 0.1737
4.8766 0.9804 1.0515 0.0124 1.0089 0.2081
4.3469 0.8635 1.0452 0.0246 1.0127 0.1537
4.0315 0.8069 1.0361 0.0090 1.0046 0.1271
0.2145 1.7861 1.0018 0.0062 1.0014 0.0334
0.0001 2.0000 2.0548 0 1.0039 0.2760
4.5496 0.9019 1.0755 0.0112 1.0110 0.2072
5.0005 1.0001 2.5241 0.0034 1.1192 1.0685
4.2420 0.8848 1.0648 0.0047 1.0061 0.3837
0.0657 1.9407 1.0068 0.0013 1.0005 0.0102
4.2158 0.8758 1.0414 0.0150 1.0072 0.1389
5.0008 1.0002 1.3927 0.0039 1.0304 0.2808
4.4065 0.8153 1.0489 0.0148 1.0371 0.1680
4.5822 0.9270 1.0599 0.0197 1.0158 0.2075
4.1012 0.8473 1.0438 0.0130 1.0125 0.1382
0.2925 1.7232 1.0059 0.0036 1.0010 0.0492
4.8035 0.9395 1.0524 0.0142 1.0064 0.1937
4.6834 0.8994 1.0421 0.0061 1.0092 0.3636
5.0007 1.0002 2.1813 0.0028 1.1025 0.8081
4.4793 0.8628 1.0284 0.0181 1.0119 0.1738
4.9189 1.0331 1.0970 0.0149 1.0221 0.1467
4.8482 0.9549 1.1478 0.0135 1.0321 0.1992
0.2453 1.7576 1.0043 0.0023 1.0020 0.0408
0.6817 1.3194 1.0064 0.0025 1.0009 0.0814
4.9939 1.0040 1.2049 0.0193 1.0491 0.3936
4.7851 0.9471 1.0170 0.0101 1.0181 0.2078
0.8810 1.1183 1.0074 0.0017 1.0012 0.1108
5.0008 1.0001 2.3868 0.0005 1.1213 0.9455
Dear Sir,
Out of all these values which one is the Optimal value of fval and x?
In multi objective optimization, all of them are optimal. They are equally important
Thank you a lot for this video. May God bless you.
I have some question
1) In the case of binary variables (for example in knapsack problem). How to specify the lower and uper bound?
2) Also I would know the matlab code to obtain the result in decision space
O and 1 could be the bounds of binary variables. This is solver in Matlab
Thank you very much Dr, other question, I dont anderstan how to manupulate the contraint with genetic algorithm
Hello, for that, the simple way is to use penalty function. Good luck!
Thank you a lot for this video. May God bless you. I have some question
1) In the case of binary variables (for example in knapsack problem). How to specify the lower and uper bound? 2) Also I would know the matlab code to obtain the result in decision space
For binary variables, lower bound is 0 and the upper is 1.