Clear Filters
Clear Filters

For each fmincon it overwrites the previous values, meaning at the end there is only 1 set of values when there should be 100. The code is running 100 times and displays all sets of values but not storing all sets. How do I resolve this?

1 view (last 30 days)
for X=1:1:10
for Y=1:1:10
ObjFcn = @myObjective;
x0 = [10 0.001 7];
LB = [0 0 0];
UB = [50 0.5 7.5];
ConsFcn = @(x)myConstraints(x,X,Y);
[x] = fmincon(ObjFcn,x0,[],[],[],[],LB,UB,ConsFcn);
disp(x)
disp(myObjective(x))
end
end

Accepted Answer

Alan Weiss
Alan Weiss on 2 Apr 2018
Your code is inefficient in that you define many things inside the loop that should be assigned outside the loop. Using Walter's suggestion, try this:
ObjFcn = @myObjective;
x0 = [10 0.001 7];
LB = [0 0 0];
UB = [50 0.5 7.5];
x = zeros(10,10); % initialization
for X=1:10
for Y=1:10
ConsFcn = @(x)myConstraints(x,X,Y);
x(X,Y) = fmincon(ObjFcn,x0,[],[],[],[],LB,UB,ConsFcn);
disp(x(X,Y))
disp(myObjective(x(X,Y)))
end
end
  5 Comments
Walter Roberson
Walter Roberson on 2 Apr 2018
ObjFcn = @myObjective;
x0 = [10 0.001 7];
LB = [0 0 0];
UB = [50 0.5 7.5];
x = zeros(10,10,3 ); % initialization
fvals = inf(10,10); % initialization
for X=1:10
for Y=1:10
ConsFcn = @(x)myConstraints(x,X,Y);
[x(X,Y,:), fvals(X,Y)] = fmincon(ObjFcn,x0,[],[],[],[],LB,UB,ConsFcn);
disp(x(X,Y))
disp(myObjective(x(X,Y)))
end
end
Scott Sanders
Scott Sanders on 3 Apr 2018
That seems to have done the trick. The final code that works is:
ObjFcn = @myObjective;
x0 = [10 0.001 7];
LB = [0 0 0];
UB = [100 0.3 7.5];
x=zeros(10,10,3);
fvals=inf(10,10);
for X=1:10
for Y=1:10
ConsFcn = @(x)myConstraints(x,X,Y);
[x(X,Y,:),fvals(X,Y)] = fmincon(ObjFcn,x0,[],[],[],[],LB,UB,ConsFcn);
disp(x(X,Y,:))
disp(myObjective(x(X,Y,:)))
end
end
Thank you all for your help!

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 2 Apr 2018
Instead of assigning to x assign to x(X, Y)

Categories

Find more on Loops and Conditional Statements 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!