can I use a compiled (.exe) file to generate my objective functions while running optimisation in MATLAB?
1 view (last 30 days)
Show older comments
Mohsen2015
on 16 Jun 2015
Commented: Kurt Stewart
on 18 Sep 2019
I have developed a Fortran code which simulates a thermodynamic cycle. I want to optimise the cycle for few objectives (like cost, efficiency etc.). My Fortran program reads design variables [X] from a file and writes the objectives values F[X] in a separate file. I can call the .exe file of my program in MATLAB and it communicates with the input and output files without problem. I want to see whether it is possible to call this .exe file to generate objective functions from [X] in each iteration of optimisation procedure? If yes, which types of optimisation solvers I may choose?
0 Comments
Accepted Answer
Andrew Schenk
on 17 Jun 2015
Optimization functions like fminunc simply need a MATLAB function of the form y = f(x) to operate on. To interface with your external code, you should create a MATLAB function similar to the one below:
function y = myfun(x)
%write the x data
xh = fopen('x.txt', 'w');
fprintf(xh, '%f', x);
fclose(xh);
%run your program
system('yourProgram.exe');
%read the f data
fh = fopen('f.txt');
y = fscanf(fh, '%f');
fclose(fh);
Then use fminunc:
minunc(@myfun,x0);
6 Comments
Kurt Stewart
on 18 Sep 2019
fminunc is a local solver - thus it gets stuck in local minima, that is why you would need to have the initial conditions very close to the solution to actually find it in a non-convex problem. gamultiobj uses a genetic algorithm. They just inherently take quite a long time. Try ParetoSearch and see how that works, probably faster than gamultiobj
More Answers (0)
See Also
Categories
Find more on Fortran with MATLAB 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!