optimizing iterated objective function - containing ∑- sum operator

16 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

Wycliff Dembe
Wycliff Dembe am 23 Aug. 2018
I later figured it out. I had to apply loops and function handles and it worked.

Weitere Antworten (2)

Wycliff Dembe
Wycliff Dembe am 9 Apr. 2019
Bearbeitet: Wycliff Dembe am 24 Okt. 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
  3 Kommentare
Wycliff Dembe
Wycliff Dembe am 24 Okt. 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)
Shahrooz Pouryousef
Shahrooz Pouryousef am 11 Mai 2022
Hi Wycliff, I need your help. I have almost the same objective function. But I have sum over three different sets in my objective function and also for each variable I need to call a function. Would you please help me on this? I can explain more if you are here.

Melden Sie sich an, um zu kommentieren.


Hanne Vanduffel
Hanne Vanduffel am 9 Apr. 2019
Could you please share your code?
Thanks in advance!

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by