Skip to content
Snippets Groups Projects
Commit 3694663a authored by asilador's avatar asilador
Browse files

Cleaned up code to have run(epsilon) work in interactive python

parent 7615f6e6
No related branches found
No related tags found
No related merge requests found
import numpy as np import numpy as np
# Initialize iteration counter
# Import text files # Import text files
Q = np.asmatrix(np.loadtxt('Q.txt')) Q = np.asmatrix(np.loadtxt('Q.txt'))
b = np.asmatrix(np.loadtxt('b.txt')) b = np.asmatrix(np.loadtxt('b.txt'))
c = np.asmatrix(np.loadtxt('c.txt')) c = np.asmatrix(np.loadtxt('c.txt'))
b = np.transpose(b) #make b a column vector b = np.transpose(b) #make b a column vector
D = np.asmatrix(np.ones(np.size(b)))
m = 1 m = 1
# Make a guess for x vector
#x = np.asmatrix(np.zeros(np.size(b)))
#x = np.transpose(x) #make column vector
#x=np.matrix(np.random.rand(5,1))
x = np.transpose(np.asmatrix(np.ones(np.size(b)))*1)
alpha0 = 1.0
count = 0
# Initialize iteration counter
global x
global count
# Define f(x) # Define f(x)
def f(Q,b,c,x): def f(Q,b,c,x):
return np.transpose(x)*Q*x + np.transpose(b)*x + c return np.transpose(x)*Q*x + np.transpose(b)*x + c
...@@ -26,7 +20,7 @@ def gradf(Q,b,x): ...@@ -26,7 +20,7 @@ def gradf(Q,b,x):
return 2*Q*x + b return 2*Q*x + b
# Define algorithm for Armijos rule # Define algorithm for Armijos rule
def armijo(alpha0,Q,b,c,D,m): def armijo(alpha0,Q,b,c,D,m,x):
alpha = alpha0 alpha = alpha0
#print('alpha is ', alpha) #print('alpha is ', alpha)
...@@ -41,13 +35,6 @@ def armijo(alpha0,Q,b,c,D,m): ...@@ -41,13 +35,6 @@ def armijo(alpha0,Q,b,c,D,m):
return alpha return alpha
def xval():
return x
def countval():
return count
# Begin Gradient Descent Algorithm # Begin Gradient Descent Algorithm
def grad_opt(epsilon,x,count,alpha): def grad_opt(epsilon,x,count,alpha):
...@@ -55,7 +42,7 @@ def grad_opt(epsilon,x,count,alpha): ...@@ -55,7 +42,7 @@ def grad_opt(epsilon,x,count,alpha):
while np.linalg.norm(gradf(Q,b,x))>= epsilon: while np.linalg.norm(gradf(Q,b,x))>= epsilon:
D = -1*np.transpose(gradf(Q,b,x))/np.linalg.norm(gradf(Q,b,x)) D = -1*np.transpose(gradf(Q,b,x))/np.linalg.norm(gradf(Q,b,x))
#print('D is ', D) #print('D is ', D)
alpha = armijo(alpha,Q,b,c,D,m) alpha = armijo(alpha,Q,b,c,D,m,x)
#print('alpha0 is ', alpha) #print('alpha0 is ', alpha)
count += 1 count += 1
if count%1000==0: if count%1000==0:
...@@ -71,11 +58,15 @@ def grad_opt(epsilon,x,count,alpha): ...@@ -71,11 +58,15 @@ def grad_opt(epsilon,x,count,alpha):
print 'epsilon is ', epsilon print 'epsilon is ', epsilon
return 0 return 0
def run(epsilon): def run(epsilon):
xstart = xval() # Make a guess for x vector
countstart = countval() #x = np.asmatrix(np.zeros(np.size(b)))
grad_opt(epsilon,xstart,countstart,alpha0) #x = np.transpose(x) #make column vector
#x=np.matrix(np.random.rand(5,1))
x = np.transpose(np.asmatrix(np.ones(np.size(b)))*1)
count = 0
alpha0 = 1.0
grad_opt(epsilon,x,count,alpha0)
return 0 return 0
run(0.1) run(0.00001)
\ No newline at end of file \ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment