MATLAB Answers

optimizing iterated objective function - containing ∑- sum operator

50 views (last 30 days)
I am writing MATLAB code to minimize objective function f(x,y) - please see attached image. P and Q are readily available (known) arrays of equal size n. My major challenge is on how to deal with P and Q to formulate the objective function f(x,y) for input to the optimization algorithm (genetic algorithm). I tried using a loop to iterate through all P and Q before the optimization process but i could not understand the resulting objective function and how to apply it in the optimization algorithm. Same challenge exists with the first constraint, dealing with P and Q. Is there any possible way i can resolve this? (n,a,b,R,K and L are all known constants). Thanks in advance.

Accepted Answer

More Answers (2)

Wycliff Dembe
Wycliff Dembe on 9 Apr 2019
Edited: Wycliff Dembe on 24 Oct 2019
Define a custom objective function as:
function f_sum = objectiveFun(inParam)
global N p q
x = inParam(1);
y = inParam(2);
for i=1:N
f_xy(i) = sqrt((x-p(i))^2+(y-q(i))^2);
end
f_sum = sum(f_xy);
end
Define a custom constraint function as:
function [ c, ceq ] = constraintsFun(inParam)
global R
a = rand; b = rand;
x = inParam(1);
y = inParam(2);
%inequality constraint. please note I didn't use the first constraint during implementation so I haven't written it here
c = (x-a)^2 + (y-b)^2 - R;
%equality constraint
ceq = []; % none
end
Invoke the matlab built-in ga function as:
clc
clear
global N p q R
R = randi(5);
N = randi(20);
p = rand(1,N);
q = rand(1,N);
nvars = 2; % x and y
min_bound = [-rand -rand]; % -K,-L
max_bound = [rand rand]; % K,L
[optim_x_y,f_min,exitflag] = ga(@objectiveFun,nvars,[],[],[],[],min_bound,max_bound,@constraintsFun)
Anything you might want to customise in ga can be passed via options using gaoptimset
  2 Comments
Wycliff Dembe
Wycliff Dembe on 24 Oct 2019
The dimensions of the input parameter (inParam) are defined in nvars.
With nvars gives as 2 (because we have x and y), we define the first dimension of inParam as x and the second dimension of inParam as y. The two can be accessed as:
x = inParam(1)
y = inParam(2)

Sign in to comment.


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!