optimizing iterated objective function - containing ∑- sum operator

10 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

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

Più risposte (2)

Wycliff Dembe
Wycliff Dembe il 9 Apr 2019
Modificato: Wycliff Dembe il 24 Ott 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 Commenti
Wycliff Dembe
Wycliff Dembe il 24 Ott 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 il 11 Mag 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.

Accedi per commentare.


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

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by