我正在尝试在 Stable Baselines3 中使用自定义环境实现 SAC,但我不断收到标题中的错误。任何非策略算法都会发生该错误,而不仅仅是 SAC。
追溯:
File "<MY PROJECT PATH>\src\main.py", line 70, in <module>
main()
File "<MY PROJECT PATH>\src\main.py", line 66, in main
model.learn(total_timesteps=timesteps, reset_num_timesteps=False, tb_log_name=f"sac_{num_cars}_cars")
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\sac\sac.py", line 309, in learn
return super().learn(
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\common\off_policy_algorithm.py", line 375, in learn
self.train(batch_size=self.batch_size, gradient_steps=gradient_steps)
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\sac\sac.py", line 256, in train
current_q_values = self.critic(replay_data.observations, replay_data.actions)
File "<MY PROJECT PATH>\venv\lib\site-packages\torch\nn\modules\module.py", line 1190, in _call_impl
return forward_call(*input, **kwargs)
File "<MY PROJECT PATH>\venv\lib\site-packages\stable_baselines3\common\policies.py", line 885, in forward
return tuple(q_net(qvalue_input) …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个自定义比较器方法来比较自定义类 Customer 中的不同内容,并且在编译时得到incompatible types: T cannot be converted to Customer. DataChecker.compare() 是从泛型方法运行的,但我知道无论何时运行 T 都会是在重载的 DataChecker.compare() 方法中定义的类型。下面是我的代码:
public int compare(Customer cust1, Customer cust2, String sortBy){ //Comparator interface for customers
if (sortBy == "ID"){
if (cust1.getID() < cust2.getID()){
return -1;
} else if (cust1.getID() == cust2.getID()){
return 0;
} else {
return 1;
}
}
throw new IllegalArgumentException("Not a valid compare for Customer: " + sortBy);
}
Run Code Online (Sandbox Code Playgroud)
此处调用该方法(左侧和右侧是 T[ ],但运行时 T 将是 DataChecker.compare() 中定义的类型之一 - 例如 Customer -):
if (DataChecker.compare(left[i], …Run Code Online (Sandbox Code Playgroud)