Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@krishnanraman
Created March 2, 2018 03:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save krishnanraman/aabe90012fcbacbf1e56d2456ff553a8 to your computer and use it in GitHub Desktop.
Save krishnanraman/aabe90012fcbacbf1e56d2456ff553a8 to your computer and use it in GitHub Desktop.
# maximize abc subject to a + b + c = 10
import numpy as np
import tensorflow as tf
tf.reset_default_graph()
abc = tf.get_variable("abc",shape=(3,1),dtype=tf.float32, initializer=tf.ones_initializer)
optimizer = tf.train.GradientDescentOptimizer(0.0001)
# grab a, b, c and the lambda l
a = abc[0,0]
b = abc[1,0]
c = abc[2,0]
l = tf.Variable(1.0, tf.float32)
f = a * b * c
g = a + b + c - 10.0
# standard lagrangian: gradient f = lambda * gradient g
flg = f - l * g
# minimize lagrangian w.r.t each variate
traina = optimizer.minimize(tf.reduce_mean(tf.gradients( flg,a )))
trainb = optimizer.minimize(tf.reduce_mean(tf.gradients( flg,b )))
trainc = optimizer.minimize(tf.reduce_mean(tf.gradients( flg,c )))
trainl = optimizer.minimize(tf.reduce_mean(tf.gradients( flg,l )))
# maximize abc => minimize -abc
trainprod = optimizer.minimize(-f)
# minimize g^2
trainsum = optimizer.minimize(tf.square(g))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
n_iterations = 10000
for iteration in range(n_iterations):
sess.run([traina,trainb,trainc,trainl,trainprod, trainsum])
print(a.eval())
print(b.eval())
print(c.eval())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment