root/trunk/openopt/scikits/openopt/examples/nlp_bench_2.py

Revision 1129, 3.4 kB (checked in by dmitrey.kroshko, 5 months ago)

minor changes

Line 
1 from scikits.openopt import NLP
2 from numpy import cos, arange, ones, asarray, abs, zeros, sqrt, sign, asscalar
3 from pylab import legend, show, plot, subplot, xlabel, subplots_adjust
4 from string import rjust, ljust, expandtabs, center, lower
5 from scipy import rand
6 N = 10
7 M = 5
8 s = 1.3
9 f = lambda x: (abs(x-M) ** s).sum()
10 df = lambda x: s * sign(x-M) * abs(x-M) ** (s-1)
11
12 x0 = cos(arange(N)) #+ rand(N)
13
14 c = lambda x: [2* x[0] **4-32, x[1]**2+x[2]**2 - 8]
15 def dc(x):
16     r = zeros((len(c(x0)), p.n))
17     r[0,0] = 2 * 4 * x[0]**3
18     r[1,1] = 2 * x[1]
19     r[1,2] = 2 * x[2]
20     return r   
21
22 K = 1e2
23 h1 = lambda x: K*(x[-1]-1)**4
24 h2 = lambda x: (x[-2]-1.5)**4
25 h3 = lambda x: (x[-5]+x[-6]-2*M+1.5)**6
26 h = (h1, h2, h3)
27 def dh(x):
28     r = zeros((len(h), N))
29     r[0, -1] = 4 * K * (x[-1]-1)**3
30     r[1, -2] = 4 * (x[-2]-1.5)**3
31     r[2, -5] = 6 * (x[-5]+x[-6]-2*M+1.5)**5
32     r[2, -6] = 6 * (x[-5]+x[-6]-2*M+1.5)**5
33     return r
34
35
36 lb = -6*ones(N)
37 ub = 6*ones(N)
38 lb[3] = 5.5
39 ub[4] = 4.5
40 gradtol=1e-1
41 ftol = 1e-6
42 xtol = 1e-6
43 diffInt = 1e-8
44 contol = 1e-6
45 maxTime = 5
46 colors = ['b', 'k', 'y', 'g', 'r']
47
48 ########################################
49 #solvers = ['ralg', 'scipy_cobyla', 'lincher', 'ALGENCAN',  'scipy_slsqp']
50 solvers = ['ralg', 'scipy_cobyla', 'lincher', 'scipy_slsqp']
51 #solvers = ['scipy_cobyla', 'ralg']
52 #solvers = ['lincher', 'scipy_cobyla']
53 #solvers = ['ralg']
54 ########################################
55 colors = colors[:len(solvers)]
56 lines, results = [], {}
57 for j in range(len(solvers)):
58     solver = solvers[j]
59     color = colors[j]
60     p = NLP(f, x0, name = 'bench2', df = df, c=c, dc = dc, h=h, dh = dh, lb = lb, ub = ub, gradtol=gradtol, ftol = ftol, maxFunEvals = 1e7, maxIter = 1e4, maxTime = maxTime,  plot = 1, color = color, iprint = 0, legend = [solvers[j]], show=False,  contol = contol)
61 #    p = NLP(f, x0, name = 'bench2', df = df, c=c, dc = dc, lb = lb, ub = ub, gradtol=gradtol, ftol = ftol, maxFunEvals = 1e7, maxIter = 1e4, maxTime = maxTime,  plot = 1, color = color, iprint = 0, legend = [solvers[j]], show=False,  contol = contol)
62     if solver in ['ralg', 'ralg2']:
63         p.gradtol = 1e-8
64         p.ftol = 1e-7
65         p.xtol = 1e-7
66     elif solver == 'lincher':
67         #p.iprint = 1
68         p.maxTime = 1e15
69         p.maxIter = 100
70  
71 ##    p.check.df = 1
72 ##    p.check.dc = 1
73 ##    p.check.dh = 1
74     r = p.solve(solver)
75     for fn in ('h','c'):
76         if not r.evals.has_key(fn): r.evals[fn]=0 # if no c or h are used in problem
77     results[solver] = (r.ff, p.getMaxResidual(r.xf), r.elapsed['solver_time'], r.elapsed['solver_cputime'], r.evals['f'], r.evals['c'], r.evals['h'])
78     subplot(2,1,1)
79     F0 = asscalar(p.f(p.x0))
80     lines.append(plot([0, 1e-15], [F0, F0], color= colors[j]))
81    
82
83 for i in range(2):
84     subplot(2,1,i+1)
85     legend(lines, solvers)
86
87 subplots_adjust(bottom=0.2, hspace=0.3)
88
89 xl = ['Solver                              f_opt     MaxConstr   Time   CPUTime  fEvals  cEvals  hEvals']
90
91 for i in range(len(results)):
92     s=(ljust(lower(solvers[i]), 40-len(solvers[i]))+'%0.3f'% (results[solvers[i]][0]) + '       %0.1e' % (results[solvers[i]][1]) + ('      %0.2f'% (results[solvers[i]][2])) + '     %0.2f      '% (results[solvers[i]][3]) + str(results[solvers[i]][4]) + '   ' + rjust(str(results[solvers[i]][5]), 5) + ' '*5 +str(results[solvers[i]][6]))
93     xl.append(s)
94
95 xl = '\n'.join(xl)
96 subplot(2,1,1)
97 xlabel('Time elapsed (without graphic output), sec')
98
99 from pylab import *
100 subplot(2,1,2)
101 xlabel(xl)
102 show()
Note: See TracBrowser for help on using the browser.