How can I pass parameters from the objective function to the nonlcon function when using fmincon

조회 수: 2 (최근 30일)
Hi,
I'm using fmincon in combination with a non-linear simulink model. As one simulation cycle takes a signifikant amount of time I would like to prevent that the simulink model is called twice: Once for the objective function f(x) and once for the non-linear constraint function c(x). During one simulation f(x) and c(x) are calculated, thus I would like to pass the relevant c(x) values during the objective function call to the nonlcon call to save the second simulation run.
Do I have to define a global variable to pass that kind of information or exists a more elegant way to solve that problem?
Kind regards, Oliver

채택된 답변

Walter Roberson
Walter Roberson 2016년 4월 11일
The nonlinear constraint routine may be called multiple times before finding a point within bounds to be run through the objective function. However, the optimizer breaks up the problem into multiple sub-problems that it believes / hopes will not violate the nonlinear constraints. Therefore there is not a one-to-one relationship between f(x) and c(x) being called.
If you have an expensive function that must be called by both, then you may wish to implement that function with a "cache". See for example http://www.mathworks.com/matlabcentral/fileexchange/49949-cachedcall . A similar version that saves in memory could also be programmed.
  댓글 수: 2
walli
walli 2016년 4월 11일
Ah ok, I thought the objective function and non-linear constraint function would be called straight successively. However, I was wrong - Thanks for clarifying.

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

추가 답변 (0개)

카테고리

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

태그

Community Treasure Hunt

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

Start Hunting!

Translated by