class_docstr: Controller.`
  Keep Track of each ship and shipyard
docstr: Initialize models
          
docstr_tok: ["Initialize","models"]
code: def __init__(self):
      """Initialize models"""
  
      self.init = False
  
      self.train = True
  
      # set up agnet for ships
      ship_actor = Model(
          obs_dim=config["ship_obs_dim"],
          act_dim=config["ship_act_dim"],
          softmax=True,
      )
  
      ship_critic = Model(obs_dim=config["ship_obs_dim"], act_dim=1)
  
      ship_alg = PPO(
          actor=ship_actor,
          critic=ship_critic,
          clip_param=0.3,
          value_loss_coef=config["vf_loss_coef"],
          entropy_coef=config["ent_coef"],
          initial_lr=config["lr"],
          max_grad_norm=5,
      )
  
      self.ship_agent = Agent(ship_alg)
  
      self.ship_buffer = ReplayMemory(
          config["ship_max_step"],
          config["ship_obs_dim"] + config["world_dim"],
      )
  
imports: import numpy
  from config import config
  from zerosum_env.envs.halite.helpers import *
  from .agent import Agent
  from .model import Model
  from .algorithm import PPO
  from .obs_parser import get_ship_feature
  from .replay_memory import ReplayMemory
  from .utils import is_alive, check_nearby_ship, nearest_shipyard_position, mahattan_distance
  from .policy import do_nothing_policy, move_up_policy, move_down_policy, move_left_policy, move_right_policy, spawn_policy, return_to_base_policy, mine_policy, convert_policy
label_desc: Use image node_id 1 to create a new Controller object  with example: obj = Controller()