如何创建一个布局,使其所有单元格最初都是空的并且可以通过移动代理(例如设备)访问?

How to create a layout that all its cells are initially empty and accessible by moving agents (such as equipment)?

在铜镍矿(云)模拟中,在MinePanel Agent中,有一个函数叫做setupTunnelLayout。

上述函数中原代码如下:

//创建已经空房间的走廊

     `RoomBlock emptyRoom;
for ( int j = 0; j < nColumns; j++ ) {
    
    emptyRoom = add_roomBlocks();
    emptyRoom.jumpToCell( 0, j );   
    if ( j == nColumns - 1 )
        emptyRoom.isStartBlock = true;
    emptyRoom.isTunnel = true;
}`

但在我的场景中,所有单元最初都是可访问的,因此所有单元都可以是隧道(移动路径),而不仅仅是上面示例中的 (0, j) 行!

我在想我可以改变它如下; (1) 或 (2); (1) //创建已经空房间的走廊

     RoomBlock emptyRoom;
for ( int j = 0; j < nColumns; j++ ) 
     for (int i = 0; i < nRows; i++){
    
    emptyRoom = add_roomBlocks();
    emptyRoom.jumpToCell( 0, j );
    emptyRoom.jumpToCell( i, 0 );   
    if ( j == nColumns - 1 )
        emptyRoom.isStartBlock = true;
    emptyRoom.isTunnel = true;
}

   

也可以这样; (2) //创建已经空房间的走廊

    `RoomBlock emptyRoom;
for ( int j = 0; j < nColumns; j++ ) 
     for (int i = 0; i < nRows; i++){
    
    emptyRoom = add_roomBlocks();
    emptyRoom.jumpToCell( i, j );   
    if ( j == nColumns - 1 )
        emptyRoom.isStartBlock = true;
    emptyRoom.isTunnel = true;
}` 

'你能告诉我 (1) 或 (2) 是否正确吗?更喜欢哪一个?

非常感谢, 内达。'

第二种更可取;当您可以直接将代理移动到精确的单元格坐标时,将代理跳到列然后然后行是没有意义的。

在这两种情况下,虽然您都错过了额外 i 循环的结束 }(并且在第二种情况下您错过了开始)。

//create corridor of already empty rooms
RoomBlock emptyRoom;
for (int j = 0; j < nColumns; j++) {
   for (int i = 0; i < nRows; i++) { 
      emptyRoom = add_roomBlocks();
      emptyRoom.jumpToCell(i, j);   
      if (j == nColumns - 1) {
        emptyRoom.isStartBlock = true;
      }
      emptyRoom.isTunnel = true;
   }
}

[我使用 Whosebug formatting 将整个块标记为 Java 代码。它也是 best-practice(虽然 AnyLogic 在他们的许多示例模型中没有这样做)总是使用大括号来循环等,即使他们的主体只有一行。]

此外,更改是否会按照您的要求进行显然取决于模型的其余部分以及它如何处理单元格和隧道的网格。