Filter löschen
Filter löschen

Optimization for multi variables and mulit functions

20 Ansichten (letzte 30 Tage)
Guan Hao
Guan Hao am 21 Aug. 2023
Beantwortet: Yash am 4 Sep. 2023
Hi, I've been working on an optimization for multi variables and mulit functions.
gamma1,gamma2,gamma3 are the functions that I want to optimize, and the variables will be a1,a2,a3. I want to use 'gamultiobj' as my optimization tool.
I've tried several ways but I keep getting error, I'm appreciate if someone is wiling to help!
Here's my code:
clear
Z01=50;
Z02=75;
v=3e+8;
section=10;
L=10;
a=L/section;
a0=50;
B1=0.4;
B2=1.6;
w1=2*pi*v*B1/L;
w2=2*pi*v*B2/L;
syms x w a1 a2 a3
beta=w/v;
% ABCD elements
for m=1:1:section
l=m*a;
Z0=a0+(a1*l)+(a2*(l^2))+(a3*(l^3));
A(m)=1;
B(m)=1i*Z0*sin(beta*a);
C(m)=1i*(1/Z0)*sin(beta*a);
D(m)=1;
end
% Turn into a cell array
for n=1:1:section
M{n}=[A(n) B(n) ; C(n) D(n)];
end
% Cascade each ABCD matrix
ABCD=M{1};
for m=2:1:section
ABCD=(ABCD)*(M{m});
end
ABCDcas=ABCD;
% Convert into S11
S11=((ABCDcas(1,2)-ABCDcas(2,1)*Z01*Z02)+((ABCDcas(1,1)*Z02)-(ABCDcas(2,2)*Z01)))/((ABCDcas(1,2)+ABCDcas(2,1)*Z01*Z02)+((ABCDcas(1,1)*Z02)+(ABCDcas(2,2)*Z01)));
gamma=(abs(S11));
gamma_edge=(1/abs(S11));
% Optimize objective
gamma1=vpa(subs(gamma_edge,w,w1),3);
gamma2=vpa(subs(gamma,w,(w1+w2)/2),3);
gamma3=vpa(subs(gamma_edge,w,w2),3);
function F = optfun(z)
  2 Kommentare
Torsten
Torsten am 21 Aug. 2023
Please state your problem in a mathematical notation. I don't understand your weird code.
Pooja Kumari
Pooja Kumari am 28 Aug. 2023
Bearbeitet: Pooja Kumari am 28 Aug. 2023
Variable "z" is not defined. Can you specify the error. Could you provide the complete code for the optimization function optfun?
function F = optfun(z)

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Yash
Yash am 4 Sep. 2023
Hi Guan,
I understand that you would like to use the 'gamultiobj' function for multi-variable and multi-function optimization. For this, you need to define an objective function that takes a vector of variables as input and returns a vector of objective function values.
Based on your code, it seems like you have already defined the objective functions 'gamma1', 'gamma2', and 'gamma3'. To use them in the 'gamultiobj' optimization, you can define an anonymous function as your objective function.
Here's an example of how you can modify your code:
gamma1 = @(a) vpa(subs(gamma_edge, [w a1 a2 a3], [w1 a(1) a(2) a(3)]), 3);
gamma2 = @(a) vpa(subs(gamma, [w a1 a2 a3], [(w1+w2)/2 a(1) a(2) a(3)]), 3);
gamma3 = @(a) vpa(subs(gamma_edge, [w a1 a2 a3], [w2 a(1) a(2) a(3)]), 3);
% Define the objective function to be optimized
objective = @(a) [gamma1(a), gamma2(a), gamma3(a)];
% Define the number of variables and their bounds
nvars = 3;
lb = [lower_bound1, lower_bound2, lower_bound3]; % Replace with appropriate lower bounds
ub = [upper_bound1, upper_bound2, upper_bound3]; % Replace with appropriate upper bounds
% Perform multi-objective optimization using gamultiobj
options = optimoptions('gamultiobj','Display','final');
[x,fval] = gamultiobj(objective, nvars, [], [], [], [], lb, ub, options);
In this example, the 'objective' function is defined as an anonymous function that takes a vector of variables 'a' as input and returns a vector of objective function values '[gamma1(a), gamma2(a), gamma3(a)]'. The 'nvars' variable represents the number of variables, and 'lb' and 'ub' represent the lower and upper bounds for each variable.
The 'gamultiobj' function performs the multi-objective optimization using the defined objective function and variable bounds. The resulting optimal variable values are stored in x, and the corresponding objective function values are stored in 'fval'.
Make sure to replace the placeholder values in the code with the appropriate values based on your specific problem and constraints.
I hope this helps you address the issue.

Kategorien

Mehr zu Optimization Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by