필터 지우기
필터 지우기

Optimization for multi variables and mulit functions

조회 수: 20 (최근 30일)
Guan Hao
Guan Hao 2023년 8월 21일
답변: Yash 2023년 9월 4일
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
Torsten
Torsten 2023년 8월 21일
Please state your problem in a mathematical notation. I don't understand your weird code.
Pooja Kumari
Pooja Kumari 2023년 8월 28일
편집: Pooja Kumari 2023년 8월 28일
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)

댓글을 달려면 로그인하십시오.

답변 (1개)

Yash
Yash 2023년 9월 4일
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.

카테고리

Help CenterFile Exchange에서 Optimization Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by