/*CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C IMPLEMENTATION OF THE EXTENDED ORACLE PENALTY FUNCTION C ------------------------------------------------------ C C Input arguments: C ---------------- C f Objective function value C res Residual function value C omega Oracle parameter C acc Accuracy for constraint violation C C Output arguments: C ----------------- C p Penalty function value C C ------------------------------------------------------ C C Reference: C C Schlueter M., Gerdts M.: "The oracle penalty method", C Journal of Global Optimization (Springer), C Vol. 47, Issue 2, Page 293-325, 2010. C C ------------------------------------------------------ C C Author (C) : Dr. Martin Schlueter C Information Initiative Center (IIC), C Division of Large Scale Computing Systems, C Hokkaido University, JAPAN. C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC*/ #include double oracle_penalty( double f, double res, double omega, double acc) { double p; double alpha; if(f <= omega && res <= acc) { p = f - omega; } else { if(f <= omega) { p = res; } else { if(res < (f-omega)/3.0) { alpha = ((f-omega) * 0.80754991-res) / (f-omega-res); } if(res >= (f-omega)/3.0 && res <= (f-omega)) { alpha = 1.0 - 0.5 / sqrt((f-omega)/res); } if(res > (f-omega)) { alpha = 0.5 * sqrt((f-omega)/res); } p = alpha * (f-omega) + (1.0-alpha) * res; } } return p; }