can I use a compiled (.exe) file to generate my objective functions while running optimisation in MATLAB?
조회 수: 3 (최근 30일)
이전 댓글 표시
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
채택된 답변
Andrew Schenk
2015년 6월 17일
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
Kurt Stewart
2019년 9월 18일
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Fortran with MATLAB에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!