optimization of nested loop with two variables
2 views (last 30 days)
Show older comments
I have an optimization problem of minimizing a two-stage sampling variance subject to the expected variable cost as constraint, and here are my functions:
the objective function is:
function dblSum=dblSumFun(n_h,m_hi)
h=length(N_h);
dblSum=0;
for h=1:length(N_h)
iSum=0;
for i=1:N_h(h)
iTerm=(1/m_hi(i)-1/M_hi(i))*M_hi(i).^2*swh2(h);
iSum=iSum+iTerm;
end
hTerm = (1/n_h(h)-1/N_h(h))*N_h(h)^2*sbh2(h)+N_h(h)/n_h(h)*iSum;
dblSum=dblSum+hterm;
end
end
and the constraint is:
function [c,ceq]=nonlcon(n_h,m_hi)
h=length(N_h)
function dblSumc=dblSumFun(n_h,m_hi)
dblSumc=0;
for h=1:length(N_h)
iSum=0;
for i=1:N_h(h)
iTerm=(0.5*m_hi(i))
iSum=iSum+iTerm;
end
hTerm = 3.5-n_h(h)*0.7-n_h(h)/N_h(h)*iSum;
dblSumc=dblSumc+hterm;
end
end
ceq=dblSumc;% this will be satisfied if it eval to zero
c=[];
and the main coding for optimization is as follows
n_h0=zeros(length(N_h),1);%initial guess
m_hi0=zeros(26*n_h(h),1);
X0=[n_h0;m_hi0];
A=[];
B=[];
Aeq=[];
Beq=[];
options=optimoptions('fmincon','Algorithm','sqp','Display','iter-detailed',...
'MaxFunctionEvaluations',100000,'MaxIterations',2000,...
'FunctionTolerance',1e-10);
[n_h,m_hi,const]=fmincon(@(n_h,m_hi) obj_function(n_h,m_hi),X0,A,B,Aeq,Beq,LB,UB,@(n_h,m_hi) nonlcon(n_h,m_hi),options)
I wanted to obtain a vector of n_h for h=1,...,26; and a vector of m_hi for h=1,...,26 and i=1,...,n_h(h). Any help?
0 Comments
Answers (1)
Amal Raj
on 13 May 2024
Hi Nilton, To obtain the vectors n_h and m_hi for your optimization problem, you can modify your code as follows:
% Define the objective function
objective = @(x) obj_function(x(1:length(N_h)), x(length(N_h)+1:end));
% Define the constraint function
constraint = @(x) nonlcon(x(1:length(N_h)), x(length(N_h)+1:end));
% Set initial guess
x0 = [n_h0; m_hi0];
% Set lower and upper bounds for variables
LB = [zeros(length(N_h), 1); zeros(26*sum(N_h), 1)];
UB = [inf(length(N_h), 1); inf(26*sum(N_h), 1)];
% Solve the optimization problem
x = fmincon(objective, x0, [], [], [], [], LB, UB, constraint, options);
% Extract the optimized values
n_h = x(1:length(N_h));
m_hi = x(length(N_h)+1:end);
In this code, the fmincon function is used to minimize the objective function obj_function subject to the constraint nonlcon. The initial guess x0, lower bounds LB, upper bounds UB, and optimization options options are also provided. The optimized values of n_h and m_hi are extracted from the solution vector x.
0 Comments
See Also
Categories
Find more on Nonlinear Optimization 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!