ElegantRL icon indicating copy to clipboard operation
ElegantRL copied to clipboard

AttributeError: 'AgentPPO' object has no attribute 'ClassCri'

Open xaviruvpadhiyar98 opened this issue 2 years ago • 1 comments

While Running the last command on eRL_demo_StockTrading.ipynb on colab

args.init_before_training(if_main=False)
args.env.draw_cumulative_return(args, torch)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-18-c641199acf36> in <module>()
----> 1 args.env.draw_cumulative_return(args, torch)

2 frames
/usr/local/lib/python3.7/dist-packages/elegantrl/envs/FinRL/StockTrading.py in draw_cumulative_return(self, args, _torch)
    240         cwd = args.cwd
    241 
--> 242         agent.init(net_dim, state_dim, action_dim)
    243         agent.save_load_model(cwd=cwd, if_save=False)
    244         act = agent.act

/usr/local/lib/python3.7/dist-packages/elegantrl/agent.py in init(self, net_dim, state_dim, action_dim, learning_rate, if_use_gae, env_num, agent_id)
    617 
    618     def init(self, net_dim, state_dim, action_dim, learning_rate=1e-4, if_use_gae=False, env_num=1, agent_id=0):
--> 619         super().init(net_dim, state_dim, action_dim, learning_rate, if_use_gae, env_num, agent_id)
    620         self.traj_list = [list() for _ in range(env_num)]
    621 

/usr/local/lib/python3.7/dist-packages/elegantrl/agent.py in init(self, net_dim, state_dim, action_dim, learning_rate, if_per_or_gae, env_num, agent_id)
     52         self.device = torch.device(f"cuda:{agent_id}" if (torch.cuda.is_available() and (agent_id >= 0)) else "cpu")
     53 
---> 54         self.cri = self.ClassCri(int(net_dim * 1.25), state_dim, action_dim).to(self.device)
     55         self.act = self.ClassAct(net_dim, state_dim, action_dim).to(self.device) if self.ClassAct else self.cri
     56         self.cri_target = deepcopy(self.cri) if self.if_use_cri_target else self.cri

AttributeError: 'AgentPPO' object has no attribute 'ClassCri'

But I am able to see that AgentPPO has ClassCri with CriticAdv

class AgentPPO(AgentBase):
    def __init__(self):
        super().__init__()
        self.ClassAct = ActorPPO
        self.ClassCri = CriticAdv

Actual Issue -

image

Attachments

image image

xaviruvpadhiyar98 avatar Oct 11 '21 13:10 xaviruvpadhiyar98

I know how to fix this bug.

You code:

class AgentPPO(AgentBase):
    def __init__(self):
        super().__init__()
        self.ClassAct = ActorPPO
        self.ClassCri = CriticAdv

should be

class AgentPPO(AgentBase):
    def __init__(self):
        self.ClassAct = ActorPPO
        self.ClassCri = CriticAdv
        super().__init__()  ###################### write before self.ClassCri = CriticAdv

Yonv1943 avatar Mar 26 '22 13:03 Yonv1943