code: def test_appo_two_optimizers_two_lrs(self):
      # Not explicitly setting this should cause a warning, but not fail.
      # config["_tf_policy_handles_more_than_one_loss"] = True
      config = (
          appo.APPOConfig()
          .rollouts(num_rollout_workers=1)
          .training(
              _separate_vf_optimizer=True,
              _lr_vf=0.002,
              # Make sure we have two completely separate models for policy and
              # value function.
              model={
                  "vf_share_layers": False,
              },
          )
      )
  
      num_iterations = 2
  
      # Only supported for tf so far.
      for _ in framework_iterator(
          config, frameworks=("torch", "tf2", "tf")
      ):
          algo = config.build(env="CartPole-v1")
          for i in range(num_iterations):
              results = algo.train()
              check_train_results(results)
              print(results)
          check_compute_single_action(algo)
          algo.stop()
  
file_path: ray/python/ray/rllib/algorithms/appo/tests/test_appo.py
imports: import unittest
  import ray
  import ray.rllib.algorithms.appo
  from ray.rllib.policy.sample_batch import DEFAULT_POLICY_ID
  from ray.rllib.utils.metrics.learner_info import LEARNER_INFO, LEARNER_STATS_KEY
  from ray.rllib.utils.test_utils import check_compute_single_action, check_train_results, framework_iterator
label_desc: Use image node_id 5 for calling the TestAPPO obj's underlying member method code with example usage: obj.test_appo_two_optimizers_two_lrs() without return types