How do I implement simulannealbnd function in simulink?
    2 views (last 30 days)
  
       Show older comments
    
    Carlo Loregian
 on 11 Mar 2021
  
    
    
    
    
    Commented: Carlo Loregian
 on 11 Mar 2021
            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
0 Comments
Accepted Answer
  Abdolkarim Mohammadi
      
 on 11 Mar 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. 
More Answers (0)
See Also
Categories
				Find more on Manual Performance Optimization in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!