Run same nonlinear optimization with coefficients changing each time
조회 수: 2(최근 30일)
I am running an optimization in matlab with both linear and non linear contraints, using fmincon. I have therefore a main file, where the optimization runs and where the linear constraints are and two function files, one with the objective function and one with the nonlinear constraints ([c],[ceq]).
The code is working but now I need it to run multiple times because two constants that I import from excel change (lets call them 'mass' and 'energy'). These constants are present in all files (which has been my biggest problem when I try to write a for loop), this means they are present in the linear constraints, in the nonlinear constraints and in the main function.
This is an easy representation of how it looks like:
Mass= xlsread('Excel_file.xlsx','sheet1','B1:B1'); %this should change to B2:B2, B3:B3, and B4:B4
Energy=xlsread('Excel_file.xlsx','sheet1','A1:A1'); %this should change to A2:A2, A3:A3, and A4:A4
const1 = 2*x(1) + 3*Mass*x(2);
const2 = 4*Energy*x(1) + 4*Mass*x(2);
nonlcon=@(x)NonLinConst (x(1), x(2));
fun = @(x)objective_function(x(1), x(2));
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon);
function optfun = objective_function (y,z)
optfun=32*Energy*y - Mass*z-45;
function [c,ceq] = NonLinConst (y,z)
c = 2*Energy*y^2-10;
ceq = Mass*z^2-120;
What I need now is that the optimization runs, lets say 4 times : first with Mass1 and Energy1, then Mass2 and Energy2.. until Mass4 with Energy4...then save the results in a matrix and find the minimum of them all.
The biggest concern here is the iteration... I´ve tried with for loops for days but still haven´t got it !
I would appreciate any help! Thanks