-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathinter_min.py
116 lines (103 loc) · 2.41 KB
/
inter_min.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import numpy as np
np.set_printoptions(linewidth=200, precision=5, suppress=True)
import pandas as pd;
pd.options.display.max_rows = 20;
pd.options.display.expand_frame_repr = False
import pylab as plt
from scipy.optimize import minimize
def inter_min(x,inter_par, Ain=[], bin=[]):
# %find the minimizer of the interpolating function starting with x
# rho = 0.9 # backtracking paramtere
n = x.shape[0]
# start the serafh method
iter = 0
x0 = np.zeros((n, 1))
# while iter < 10:
H = np.zeros((n, n))
g = np.zeros((n, 1))
y = interpolate_val(x, inter_par)
g = interpolate_grad(x, inter_par)
# H = interpolate_hessian(x, inter_par)
# Perform the Hessian modification
# H = modichol(H, 0.01, 20);
# H = (H + H.T)/2.0
# optimizaiton for finding hte right direction
objfun3 = lambda x: (interpolate_val(x, inter_par))
grad_objfun3 = lambda x: interpolate_grad(x, inter_par)
res = minimize(objfun3, x0, method='L-BFGS-B', jac=grad_objfun3, options={'gtol': 1e-6, 'disp': True})
return res.x, res.fun
xi = np.array([[0.5000 , 0.8000 , 0.5000, 0.2000, 0.5000], [0.5000, 0.5000, 0.8000, 0.5000, 0.2000]])
x0 = np.array([[0.5], [0.53]]);
yi=fun(xi)
inter_par = Inter_par()
inter_par= interpolateparameterization(xi, yi, inter_par)
# g0 = interpolate_grad(x0,inter_par)
[xm,ym] = inter_min(x0,inter_par)
# function[x
# y]=inter_min(x, inter_par)
# % find
# the
# minimizer
# of
# the
# interpolating
# function
# starting
# with x
# global n
# Ain
# bin
#
# rho = 0.9; % parameters
# of
# backtracking
#
# % start
# the
# search
# with method
# iter = 1;
#
# while iter < 10
#
# % Calculate
# the
# Newton
# direction
# H = zeros(n, n);
# g = zeros(n, 1);
# y = interpolate_val(x, inter_par);
# g = interpolate_grad(x, inter_par);
# H = interpolate_hessian(x, inter_par);
# % Perform
# the
# Hessian
# modification
# H = modichol(H, 0.01, 20);
# H = (H + H.
# ')/2;
# options = optimoptions('quadprog', 'Display', 'none');
# p = quadprog(double(H), double(g), Ain, bin - Ain * x, [], [], [], [], zeros(n, 1), options);
#
# if norm(p) < 1e-5
# break
# end
# a = 1;
# % Backtracking
# while 1
# x1 = x + a * p;
# y1 = interpolate_val(x1, inter_par);
# if (y - y1) > 0
# x = x1;
# break
# else
# a = a * rho;
# if norm(a * p) < 1e-4
# break
# end
# end
#
# end
# iter = iter + 1;
# end
#