How to use four Gaussian process regression trained machine learning models as objective functions in multiobjective optimization?
2 views (last 30 days)
Show older comments
Saurabh Sharma
on 18 Dec 2023
Answered: Ayush Aniket
on 22 Dec 2023
I have trained four Gaussian process regression machine learning models with each model having six input variables and one output variable. In all four models, the input variables are same but output variables are different. Out of four output variables, I want to minimise three variables and maximise one variable, all four at same time. So, I have four objectives. I am using multiobjective optimization and I want to use the 4 trained models as objective functions. How can I use these 4 models as objective functions. If there is a way to get the trained model in a single mathematical equation form, then it will also be helpful. For constraints, I have 6 inequalities, each inequality having lower and upper bounds, each inequality for each input variable. Code: fun = @(X) [modell1,modell3,modell4,modell5];
A = [1,0,0,0,0,0;0,1,0,0,0,0;0,0,1,0,0,0;0,0,0,1,0,0;0,0,0,0,1,0;0,0,0,0,0,1]; b = [5;5;5;1;1;1]; Aeq = []; beq = []; lb = [1,1,1,0.4,0.4,0.4]; ub = [5,5,5,1,1,1];
x0 = [0,0,0,0,0,0];
[x fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
0 Comments
Accepted Answer
Ayush Aniket
on 22 Dec 2023
Hi Saurabh,
As per my understanding you want to use four trained Gaussian process regression models with six input variables as objective functions in a multiobjective optimization problem in MATLAB. For this purpose, you need to create a function that takes the decision variables as input and returns the predictions of the GPR models as the objectives as shown below:
function objectives = myObjectiveFunction(X, modell1, modell2, modell3, modell4)
% Predictions from the trained GPR models passed as parameters
obj1 = predict(modell1, X);
obj2 = -predict(modell2, X); % Negate to maximize
obj3 = predict(modell3, X);
obj4 = predict(modell4, X);
objectives = [obj1, obj2, obj3, obj4];
end
Since you want to minimize three of the outputs and maximize one, you should negate the output of the model you wish to maximize. This function can then be passed to an optimizer that supports multiobjective optimization such as 'gamultiobj' in MATLAB.
You can modify your code after defining the objective function as shown below:
% Create an anonymous function that captures the trained models and passes them to the objective function
objectiveWithModels = @(X) myObjectiveFunction(X, modell1, modell2, modell3, modell4);
% Run the multiobjective optimization using the anonymous function
options = optimoptions('gamultiobj', 'PlotFcn', @gaplotpareto, 'PopulationSize', 50, 'MaxGenerations', 30);
[x, fval] = gamultiobj(objectiveWithModels, 6, A, b, Aeq, beq, lb, ub, options);
You can refer to the following documentation link to read more about 'gamultiobj' function:
Hope it helps.
0 Comments
More Answers (0)
See Also
Categories
Find more on Classification Trees 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!