How do I implement simulannealbnd function in simulink?

1 Ansicht (letzte 30 Tage)
Hello,
I am trying to implement simulated annealing optimisation into my simulink model through the Matlab function block. Unfortunatey when I run the simulation I get the error 'Function 'simulannealbnd' not supported for code generation.'. I understand this is a limitation of the function and it cannot be directly implemented in simulink, however I was wondering if there were any workarounds or equivalent simulink functions that I can use. Here is a snippet of the code I am using:
function [c_batt, c_sc] = sa_optimisation(P_dem, Pmax_batt, Pmax_sc)
%Prerequisites
lb = [-1,-1];
ub = [1,1];
x0 = lb;
rng default
%Execute cost function
cost_function = @(x,y)powerCostFunction(P_dem, x, y, Pmax_batt, Pmax_sc);
loss = @(p)cost_function(p(1),p(2));
x = simulannealbnd(loss,x0,lb,ub);
c_batt = x(1);
c_sc = x(2);
end

Akzeptierte Antwort

Abdolkarim Mohammadi
Abdolkarim Mohammadi am 11 Mär. 2021
You can declare the functions that are not compatible with code generation using coder.extrinsic() as extrinsic functions. Simply try this code as the very first command in your function:
coder.extrinsic ('simulannealbnd');
However, you should notice that extrinsic functions are executed in the MATLAB environment. Therefore, this adds an overhead to the overall execution time, but it is often negligible.
  2 Kommentare
Carlo Loregian
Carlo Loregian am 11 Mär. 2021
Thanks for the quick reply.
I have tried that, however that creates another error stating: 'Function handles cannot be passed to extrinsic functions.'. Is there a way to call simulannealbnd without a function handle as an argument?
Carlo Loregian
Carlo Loregian am 11 Mär. 2021
Following this answer and this workaround for function handles, the simulation now runs.
@Abdolkarim Mohammadi-Balani Thanks for the help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Simulink Coder finden Sie in Help Center und File Exchange

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by