Skip to content

Commit

Permalink
Update optimizer_main.c (#11979)
Browse files Browse the repository at this point in the history
* Update optimizer_main.c

pass return value from ipopt

* Update perform_simulation.c.inc

update retValue for optimisation

* Update CC.mos
  • Loading branch information
vruge committed Feb 14, 2024
1 parent c34be33 commit 3a47d5e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 6 deletions.
11 changes: 7 additions & 4 deletions OMCompiler/SimulationRuntime/c/optimization/optimizer_main.c
Expand Up @@ -37,7 +37,7 @@
#include "simulation_data.h"
#include "simulation/options.h"

static inline void optimizationWithIpopt(OptData*optData);
static inline int optimizationWithIpopt(OptData*optData);
static inline void freeOptimizerData(OptData*optData);

int runOptimizer(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo){
Expand All @@ -52,17 +52,19 @@ int runOptimizer(DATA* data, threadData_t *threadData, SOLVER_INFO* solverInfo){
initial_guess_optimizer(optData, solverInfo);
allocate_der_struct(&optData->s, &optData->dim ,data, optData);

optimizationWithIpopt(optData);
const int res = optimizationWithIpopt(optData);
res2file(optData, solverInfo, optData->ipop.vopt);
freeOptimizerData(optData);
return 0;
if(res == 0 /*Solve_Succeeded*/ || res == 1 /*Solved_To_Acceptable_Level*/)
return 0;
return -1;
}

/*!
* run optimization with ipopt
* author: Vitalij Ruge
**/
static inline void optimizationWithIpopt(OptData*optData){
static inline int optimizationWithIpopt(OptData*optData){
IpoptProblem nlp = NULL;

const int NV = optData->dim.NV;
Expand Down Expand Up @@ -218,6 +220,7 @@ static inline void optimizationWithIpopt(OptData*optData){
if(res != 0 && !ACTIVE_STREAM(LOG_IPOPT))
warningStreamPrint(LOG_STDOUT, 0, "No optimal solution found!\nUse -lv=LOG_IPOPT for more information.");
FreeIpoptProblem(nlp);
return res;
}


Expand Down
Expand Up @@ -549,7 +549,13 @@ int prefixedName_performSimulation(DATA* data, threadData_t *threadData, SOLVER_
infoStreamPrint(LOG_SOLVER, 0, "finished solver step %g", solverInfo->currentTime);
messageClose(LOG_SOLVER);

if (S_OPTIMIZATION == solverInfo->solverMethod) break;
if (S_OPTIMIZATION == solverInfo->solverMethod){
if(retValIntegrator != 0){
retValue = -1;
infoStreamPrint(LOG_STDOUT, 0, "model terminate | optimization failed.");
}
break;
}
syncStep = simulationUpdate(data, threadData, solverInfo);
retry = 0; /* reset retry */

Expand Down
2 changes: 1 addition & 1 deletion testsuite/openmodelica/cruntime/optimization/basic/CC.mos
Expand Up @@ -40,7 +40,7 @@ getErrorString();
// true
// ""
// true
// "CheckConstraintViolation_res.mat"
// ""
// EXIT: Problem has inconsistent variable bounds or constraint sides.
//
// "Warning: Alias variables $con$con2 = x with invalid limits min 3.0 > max 0.0
Expand Down

0 comments on commit 3a47d5e

Please sign in to comment.