#!/usr/bin/env python
'''
Solves Langermann Multimodal Problem with Automatic Optimization Refinement.
'''
# =============================================================================
# Standard Python modules
# =============================================================================
import os, sys, time
# =============================================================================
# External Python modules
# =============================================================================
from numpy import cos,pi,exp
from numpy.linalg import norm
# =============================================================================
# Extension modules
# =============================================================================
from pyOpt import Optimization
from pyOpt import NSGA2
from pyOpt import SLSQP
# =============================================================================
#
# =============================================================================
def objfunc(x):
a = [3,5,2,1,7]
b = [5,2,1,4,9]
c = [1,2,5,2,3]
f = 0.0
for i in xrange(5):
f += -(c[i]*exp(-(1/pi)*((x[0]-a[i])**2 + (x[1]-b[i])**2))*cos(pi*((x[0]-a[i])**2 + (x[1]-b[i])**2)))
#end
g = [0.0]*1
g[0] = 20.04895 - (x[0]+2.0)**2 - (x[1]+1.0)**2
fail = 0
return f,g,fail
# =============================================================================
#
# =============================================================================
opt_prob = Optimization('Langermann Function 11',objfunc)
opt_prob.addVar('x1','c',lower=-2.0,upper=10.0,value=8.0)
opt_prob.addVar('x2','c',lower=-2.0,upper=10.0,value=8.0)
opt_prob.addObj('f')
opt_prob.addCon('g','i')
print opt_prob
# Global Optimization
nsga2 = NSGA2()
nsga2(opt_prob)
print opt_prob.solution(0)
# Local Optimization Refinement
slsqp = SLSQP()
slsqp(opt_prob.solution(0))
print opt_prob.solution(0).solution(0)