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

Revision 1129, 2.5 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, asscalar
3 from pylab import legend, show, plot, subplot, xlabel, subplots_adjust
4 from string import rjust, ljust, expandtabs
5 N = 15
6 M = 5
7 f = lambda x: -(abs(x-M) ** 1.5).sum()
8
9 x0 = cos(arange(N))
10
11 #c = lambda x: [2* x[0] **4-32, x[1]**2+x[2]**2 - 8]
12 global cc1, cc2, cc3
13
14 def c1(x):
15     global cc1
16     cc1 += 1
17     return 2* x[0] **4-32
18
19
20
21 def c2(x):
22     global cc2
23     cc2 += 1
24     return x[1]**2+x[2]**2 - 8
25
26
27 def c3(x):
28     global cc3
29     cc3 += 1
30     return x[1]**2+x[2]**2 + x[3]**2  - 35
31
32
33 c = [c1, c2, c3]
34
35 h1 = lambda x: 1e1*(x[-1]-1)**4
36 h2 = lambda x: (x[-2]-1.5)**4
37 h = (h1, h2)
38
39 lb = -6*ones(N)
40 ub = 6*ones(N)
41 lb[3] = 5.5
42 ub[4] = 4.5
43
44 colors = ['b', 'k', 'y', 'r', 'g']
45 #############
46 #solvers = ['ralg','scipy_cobyla', 'lincher']
47 solvers = ['ralg', 'ralg3']
48 solvers = ['ralg', 'scipy_cobyla', 'lincher','ipopt','algencan' ]
49 #solvers = ['ipopt']
50 #############
51 colors = colors[:len(solvers)]
52
53 lines, results = [], {}
54 for j in range(len(solvers)):
55     cc1,  cc2,  cc3 = 0, 0, 0
56     solver = solvers[j]
57     color = colors[j]
58     p = NLP(f, x0, c=c, h=h, lb = lb, ub = ub, ftol = 1e-4, maxFunEvals = 1e7, maxIter = 1e4, plot = 1, color = color, iprint = 0, legend = [solvers[j]], show=False, xlabel='time', goal='maximum', name='nlp3')
59     if solver == 'algencan':
60         p.gradtol=1e-1
61     elif solver == 'ralg':
62         p.debug = 1
63
64     r = p.solve(solver)
65     print 'c1 evals:', cc1, 'c2 evals:', cc2, 'c3 evals:', cc3
66     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'])
67     subplot(2,1,1)
68     F0 = asscalar(p.f(p.x0))
69     lines.append(plot([0, 1e-15], [F0, F0], color= colors[j]))
70
71 for i in range(2):
72     subplot(2,1,i+1)
73     legend(lines, solvers)
74
75 subplots_adjust(bottom=0.2, hspace=0.3)
76
77 xl = ['Solver                              f_opt     MaxConstr   Time   CPUTime  fEvals  cEvals  hEvals']
78 for i in range(len(results)):
79     xl.append((expandtabs(ljust(solvers[i], 16)+' \t', 15)+'%0.2f'% (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) + expandtabs('\t' +str(results[solvers[i]][6]),8)))
80
81 xl = '\n'.join(xl)
82 subplot(2,1,1)
83 xlabel('Time elapsed (without graphic output), sec')
84
85 from pylab import *
86 subplot(2,1,2)
87 xlabel(xl)
88
89 show()
Note: See TracBrowser for help on using the browser.