我了解到,可以通过将整个过程中的代理类型更改为通用Agent
来将不同类型的代理插入同一块中(感谢Amy很好地工作)。 snapshot
但是,我对如何使用手动强制转换selectOutputIn1
来解决问题感到困惑。每种代理类型都有一个名为p_new_location
且类型为SelectOutputOut
的参数。
如果通过agent.p_new_location
正确投射,则传递与selectOutputIn1
等效的内容。
通过手动强制转换创建函数
if( agent instanceof Wife){
return ((Wife)agent).p_new_location ;
} else if(agent instanceof Child_M){
return ((Child_M)agent).p_new_location ;
} else if(agent instanceof Child_F){
return ((Child_F)agent).p_new_location ;}
不幸的是,您会看到一个错误,指出该方法必须返回SelectOutputOut类型的结果,尽管该方法已经定义。
每个类中的参数类型看起来与this完全一样。从模拟内部看,传递值之前看起来像this,传递值之后看起来像this。此外,我注意到在仿真过程中未显示诸如SelectOutputOut
之类的不常见参数类型的值 as shown here。如您所见,参数(age
,countDb
和taken
)及其值都存在,但p_new_location
却没有。
再次感谢艾米:)
编译器正在查看if / else if / else if。如果这些都不是正确的怎么办?如果最后一个else if是唯一的选择,只需将其更改为else或输入适合您要执行的代码。
这就是现在的代码
if( agent instanceof Wife){
return ((Wife)agent).p_new_location ;
} else if(agent instanceof Child_M){
return ((Child_M)agent).p_new_location ;
} else{
return ((Child_F)agent).p_new_location ;}
感谢前进;
答案 0 :(得分:0)
是的,AnyLogic可以在单个流程块中轻松处理多种代理类型。注意事项: