root / Final-Parameters_sm_fsn_fss_fsv / pulvinus-optimize.py @ 16
Historique | Voir | Annoter | Télécharger (3,69 ko)
1 | 9 | akiss | import os |
---|---|---|---|
2 | 9 | akiss | import numpy as np |
3 | 9 | akiss | from scipy.optimize import minimize |
4 | 9 | akiss | outputfile='temporary.csv'
|
5 | 9 | akiss | |
6 | 9 | akiss | |
7 | 9 | akiss | # initial parameters
|
8 | 9 | akiss | sm=0.95
|
9 | 9 | akiss | fsn=0.5
|
10 | 9 | akiss | fss=0.5
|
11 | 9 | akiss | fsv=0.5
|
12 | 9 | akiss | |
13 | 9 | akiss | x0=[sm, fsn, fss, fsv] |
14 | 9 | akiss | |
15 | 9 | akiss | # parameters obey the following bounds
|
16 | 9 | akiss | #bnds = ((0, 1), (0, 1), (0, 1))
|
17 | 9 | akiss | |
18 | 13 | akiss | #bnds = ((0.5, 1.0), (0.1, 0.9), (0.1, 1.5), (0.1, 0.5))
|
19 | 13 | akiss | bnds = ((0.25, 1.0), (0.1, 1.5), (0.1, 1.5), (0.1, 0.75)) |
20 | 9 | akiss | |
21 | 9 | akiss | # possible target quantities
|
22 | 9 | akiss | # --------------------------
|
23 | 9 | akiss | theta0=1 #38 |
24 | 9 | akiss | # region deformation
|
25 | 9 | akiss | am0=1.672631 # Mesophyl |
26 | 9 | akiss | an0=1.608788 # Nectary |
27 | 9 | akiss | as0=1.790434 # Side |
28 | 9 | akiss | av0=1.294615 # Vasculature |
29 | 9 | akiss | # strain anisotropy
|
30 | 9 | akiss | anim=0.6247 # Mesophyl |
31 | 9 | akiss | anin=0.6172 # Nectary |
32 | 9 | akiss | anis=0.5489 # Side |
33 | 9 | akiss | aniv=0.6958 # Vasculature |
34 | 9 | akiss | |
35 | 9 | akiss | # experimental standard deviation
|
36 | 9 | akiss | stdtheta=0.21 #38 |
37 | 9 | akiss | stdam=0.23 # Mesophyl |
38 | 9 | akiss | stdan=0.11 # Nectary |
39 | 9 | akiss | stdas=0.21 # Side |
40 | 9 | akiss | stdav=0.06 # Vasculature |
41 | 9 | akiss | #
|
42 | 9 | akiss | stdanim=0.0532 # Mesophyl |
43 | 9 | akiss | stdanin=0.0378 # Nectary |
44 | 9 | akiss | stdanis=0.0741 # Side |
45 | 9 | akiss | stdaniv=0.0333 # Vasculature |
46 | 9 | akiss | |
47 | 9 | akiss | a0=[theta0, am0, an0, as0, av0, anim, anin, anis, aniv] |
48 | 9 | akiss | stda=[stdtheta, stdam, stdan, stdas, stdav, stdanim, stdanin, stdanis, stdaniv] |
49 | 9 | akiss | |
50 | 9 | akiss | # target quantities included in the objective function
|
51 | 9 | akiss | var=np.array([1, 2, 3, 4]) # here theta is not included |
52 | 9 | akiss | #var=np.array([0, 1, 2, 3, 4]) # here theta (side angle) is included
|
53 | 9 | akiss | #var=np.array([0, 1, 2, 3, 4, 5, 6, 7, 8]) # side angle, deformation and anisotropy are included
|
54 | 9 | akiss | #var=np.array([5, 6, 7, 8]) # side angle, deformation and anisotropy are included
|
55 | 9 | akiss | |
56 | 9 | akiss | '''
|
57 | 9 | akiss | # objectiv function 1
|
58 | 9 | akiss | def f(x):
|
59 | 9 | akiss | res=0
|
60 | 9 | akiss | for i in range(len(x)):
|
61 | 9 | akiss | res+=(x[i]-a0[var[i]])**2/(x[i]+a0[var[i]])**2
|
62 | 9 | akiss | return res
|
63 | 9 | akiss | '''
|
64 | 9 | akiss | |
65 | 9 | akiss | # objectiv function taking into account the experimental standard deviation for the weight
|
66 | 9 | akiss | def f(x): |
67 | 9 | akiss | res=0
|
68 | 9 | akiss | for i in range(len(x)): |
69 | 9 | akiss | res+=(x[i]-a0[var[i]])**2/(stda[var[i]])**2 |
70 | 9 | akiss | return res
|
71 | 9 | akiss | |
72 | 9 | akiss | |
73 | 9 | akiss | |
74 | 9 | akiss | def objective(x): |
75 | 9 | akiss | [sm, fsn, fss, fsv] = x |
76 | 9 | akiss | os.system("FreeFem++ pulvinus4optimize.cpp -fsn "+str(fsn)+" -fss "+str(fss)+" -fsv "+str(fsv)+" -sm "+str(sm)+" -outfile "+outputfile) |
77 | 9 | akiss | data=np.loadtxt(outputfile, delimiter=';', dtype=float) |
78 | 9 | akiss | xvar=data[var+4]
|
79 | 9 | akiss | print(xvar) |
80 | 9 | akiss | return f(xvar)
|
81 | 9 | akiss | |
82 | 9 | akiss | #
|
83 | 9 | akiss | # GLOBAL OPTIMIZATION
|
84 | 9 | akiss | #
|
85 | 9 | akiss | |
86 | 9 | akiss | from scipy.optimize import differential_evolution #New in version 0.15.0. |
87 | 9 | akiss | |
88 | 9 | akiss | res = differential_evolution(objective, bounds=bnds) |
89 | 9 | akiss | res |
90 | 9 | akiss | |
91 | 9 | akiss | |
92 | 9 | akiss | '''
|
93 | 9 | akiss |
|
94 | 9 | akiss | ###############################################################
|
95 | 9 | akiss | ###############################################################
|
96 | 11 | akiss | # fitting the observed expansions K=lambda+2*mu/3 (d=3 formula)
|
97 | 9 | akiss | ###############################################################
|
98 | 9 | akiss | ###############################################################
|
99 | 14 | akiss |
|
100 | 9 | akiss | Ok: Normal End
|
101 | 14 | akiss | [1.67263 1.60879 1.79043 1.29461]
|
102 | 14 | akiss | Out[2]:
|
103 | 14 | akiss | fun: 7.656738339961133e-09
|
104 | 9 | akiss | message: 'Optimization terminated successfully.'
|
105 | 14 | akiss | nfev: 4745
|
106 | 14 | akiss | nit: 78
|
107 | 9 | akiss | success: True
|
108 | 14 | akiss | x: array([0.54006051, 0.95448193, 1.21647743, 0.50956303])
|
109 | 9 | akiss |
|
110 | 9 | akiss |
|
111 | 11 | akiss | Results in the results file:
|
112 | 9 | akiss |
|
113 | 11 | akiss | /*
|
114 | 11 | akiss | sm;fsn;fss;fsv;sideangle;am;an;as;av;sam;san;sas;sav;
|
115 | 11 | akiss | */
|
116 | 14 | akiss | -0.540061;0.954482;1.21648;0.509563;0.477428;1.67263;1.60879;1.79043;1.29461;0.963544;0.973407;0.942094;0.935191
|
117 | 11 | akiss |
|
118 | 11 | akiss |
|
119 | 11 | akiss | ###############################################################
|
120 | 11 | akiss | ###############################################################
|
121 | 11 | akiss | # fitting the observed expansions K=lambda+mu (d=2 formula)
|
122 | 11 | akiss | ###############################################################
|
123 | 11 | akiss | ###############################################################
|
124 | 11 | akiss | Ok: Normal End
|
125 | 15 | akiss | [1.67263 1.60879 1.79043 1.29461]
|
126 | 15 | akiss | Out[3]:
|
127 | 15 | akiss | fun: 7.656738339961133e-09
|
128 | 11 | akiss | message: 'Optimization terminated successfully.'
|
129 | 15 | akiss | nfev: 5825
|
130 | 15 | akiss | nit: 96
|
131 | 11 | akiss | success: True
|
132 | 15 | akiss | x: array([0.46445277, 0.95448186, 1.21647529, 0.5095638 ])
|
133 | 11 | akiss |
|
134 | 11 | akiss |
|
135 | 9 | akiss | Results in the results file:
|
136 | 9 | akiss |
|
137 | 9 | akiss | /*
|
138 | 9 | akiss | sm;fsn;fss;fsv;sideangle;am;an;as;av;sam;san;sas;sav;
|
139 | 9 | akiss | */
|
140 | 15 | akiss | -0.464453;0.954482;1.21648;0.509564;0.477427;1.67263;1.60879;1.79043;1.29461;0.963544;0.973407;0.942095;0.935191
|
141 | 9 | akiss |
|
142 | 9 | akiss |
|
143 | 9 | akiss |
|
144 | 9 | akiss | ''' |