docstr: update the global critic 
docstr_tok: ["update","the","global","critic"]
code: def update_global(
      self, buffer_s, buffer_a, buffer_v_target, globalAC
  ):  # refer to the global Actor-Crtic network for updating it with samples
      """update the global critic"""
      with tf.GradientTape() as tape:
          self.v = self.critic(buffer_s)
          self.v_target = buffer_v_target
          td = tf.subtract(self.v_target, self.v, name="TD_error")
          self.c_loss = tf.reduce_mean(tf.square(td))
      self.c_grads = tape.gradient(
          self.c_loss, self.critic.trainable_weights
      )
      OPT_C.apply_gradients(
          zip(self.c_grads, globalAC.critic.trainable_weights)
      )  # local grads applies to global net
      # del tape # Drop the reference to the tape
      """ update the global actor """
      with tf.GradientTape() as tape:
          self.mu, self.sigma = self.actor(buffer_s)
          self.test = self.sigma[0]
          self.mu, self.sigma = self.mu * A_BOUND[1], self.sigma + 1e-5
  
          normal_dist = tfd.Normal(
              self.mu, self.sigma
          )  # no tf.contrib for tf2.0
          self.a_his = buffer_a  # float32
          log_prob = normal_dist.log_prob(self.a_his)
          exp_v = (
              log_prob * td
          )  # td is from the critic part, no gradients for it
          entropy = normal_dist.entropy()  # encourage exploration
          self.exp_v = ENTROPY_BETA * entropy + exp_v
          self.a_loss = tf.reduce_mean(-self.exp_v)
      self.a_grads = tape.gradient(
          self.a_loss, self.actor.trainable_weights
      )
      OPT_A.apply_gradients(
          zip(self.a_grads, globalAC.actor.trainable_weights)
      )  # local grads applies to global net
      return self.test
  
imports: import argparse
  import multiprocessing
  import os
  import threading
  import time
  import gym
  import matplotlib.pyplot
  import numpy
  import tensorflow
  import tensorflow_probability
  import tensorlayer
label_desc: Use image node_id 2 for calling the ACNet obj's underlying member method code with example usage: obj.update_global(buffer_s, buffer_a, buffer_v_target, globalAC) and returns: self