In [4]:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import numpy as np
import tensorflow as tf
In [11]:
class OptimizadorN(list):#tf.Operation): Eddy Yaneth Mesa Delgado tesis doctorado y maestria sinab
'''
Eddy Yaneth Mesa Delgado tesis doctorado y maestria sinab
1. hacerle benchmark, proveer a los investigadores una herramienta para hacer validacion del rendimiento de la libreria
2. Incluir variaciones a la definicion del problema, restricciones y penalizaciones
3. Ejemplos y casos de prueba reales
'''
def set_objetive(self,obj):
self.obj= obj
def __init__(self, T = 100):
self.variables = tf.global_variables()
self.T = T
#self._graph = tf.get_default_graph()
#self._c_op = None
def method(self):
f_old = self.obj.eval()
var = []
dependencies = []
for variable in self.variables:
var.append (variable.assign(variable.eval()))
dependencies.append (variable.assign(variable.eval() - np.random.uniform()))
with tf.control_dependencies(dependencies):
#print(sess.run([ y_update, x_update]))
nodes = dependencies
delta = f.eval() - f_old
if delta > 0 :
next
elif pow(np.e, -delta/ self.T) >= np.random.uniform():
#print("probablidad" + str(pow(np.e, -delta/ self.T)))
next
else:
nodes = var
self.operaciones = nodes
super().extend(self.operaciones)
def eval(self):
self.method()
return(self.operaciones)
In [12]:
x = tf.Variable(-20, np.float32)
y = tf.Variable(-30, np.float32)
f = tf.pow(tf.add(x,y), 2)
In [13]:
opt =OptimizadorN()
opt.set_objetive(f)
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess.run(init_op);
#la funcion solo returna los nodos del grafo que deben ser ejecutados, a la final yo los encadeno en evaluar el assign del
#valor en el que deben terminar las variables
print(sess.run(opt.eval()))
#Vea que si se necesita que sea un tensor para mandarlo directo
print(sess.run(opt))