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

Revision 1129, 2.5 KB (checked in by dmitrey.kroshko, 20 months ago)

minor changes

Line 
1from scikits.openopt import NLP
2from numpy import cos, arange, ones, asarray, abs, zeros, sqrt, asscalar
3from pylab import legend, show, plot, subplot, xlabel, subplots_adjust
4from string import rjust, ljust, expandtabs
5N = 15
6M = 5
7f = lambda x: -(abs(x-M) ** 1.5).sum()
8
9x0 = cos(arange(N))
10
11#c = lambda x: [2* x[0] **4-32, x[1]**2+x[2]**2 - 8]
12global cc1, cc2, cc3
13
14def c1(x):
15    global cc1
16    cc1 += 1
17    return 2* x[0] **4-32
18
19
20
21def c2(x):
22    global cc2
23    cc2 += 1
24    return x[1]**2+x[2]**2 - 8
25
26
27def c3(x):
28    global cc3
29    cc3 += 1
30    return x[1]**2+x[2]**2 + x[3]**2  - 35
31
32
33c = [c1, c2, c3]
34
35h1 = lambda x: 1e1*(x[-1]-1)**4
36h2 = lambda x: (x[-2]-1.5)**4
37h = (h1, h2)
38
39lb = -6*ones(N)
40ub = 6*ones(N)
41lb[3] = 5.5
42ub[4] = 4.5
43
44colors = ['b', 'k', 'y', 'r', 'g']
45#############
46#solvers = ['ralg','scipy_cobyla', 'lincher']
47solvers = ['ralg', 'ralg3']
48solvers = ['ralg', 'scipy_cobyla', 'lincher','ipopt','algencan' ]
49#solvers = ['ipopt']
50#############
51colors = colors[:len(solvers)]
52
53lines, results = [], {}
54for 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
71for i in range(2):
72    subplot(2,1,i+1)
73    legend(lines, solvers)
74
75subplots_adjust(bottom=0.2, hspace=0.3)
76
77xl = ['Solver                              f_opt     MaxConstr   Time   CPUTime  fEvals  cEvals  hEvals']
78for 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
81xl = '\n'.join(xl)
82subplot(2,1,1)
83xlabel('Time elapsed (without graphic output), sec')
84
85from pylab import *
86subplot(2,1,2)
87xlabel(xl)
88
89show()
90
Note: See TracBrowser for help on using the browser.