4

我正在尝试对上皮空间的内部进行建模,并且被困在围绕圆柱形空间的内部边缘的运动中。基本上,我正在尝试实现 StickyBorders 并将代理保持在我正在创建的圆柱形空间中的这些边界上。

有没有办法在 Repast Simphony 中使用柱坐标?我发现了这个例子(https://www.researchgate.net/publication/259695792_An_Agent-Based_Model_of_Vascular_Disease_Remodeling_in_Pulmonary_Arterial_Hypertension)他们似乎做了类似的事情,但这篇论文没有深入解释方法,我不相信这是过去的交响乐模型中的一个例子。

目前,我有一类上皮细胞,它们被设置成一个圆柱体,而其他药剂则从该圆柱体内开始。为了移动,他们选择最想要的位置(类似于僵尸代码),然后在原始位置的一个方格内指向所需位置的方向上的新位置。他们在移动到新点之前检查它,并确保在紧邻的摩尔附近至少有两个其他上皮细胞,以确保它们靠在墙上。

GridPoint intendedpt = new GridPoint((int)Math.rint(alongX),(int)Math.rint(alongY),(int)Math.rint(alongZ));
        GridCellNgh<EpithelialCell> nearEpithelium = new GridCellNgh<EpithelialCell>(mac_grid, intendedpt, EpithelialCell.class, 1,1,1);    
        List<GridCell<EpithelialCell>> EpiCells = nearEpithelium.getNeighborhood(false);
        int nearbyEpiCellsCount=0;
        for (GridCell<EpithelialCell> cell: EpiCells) {
            nearbyEpiCellsCount++;
        }
        if (nearbyEpiCellsCount<2) {
            System.out.println(this + " leaving epithelial wall /r");
            RunEnvironment.getInstance().pauseRun();

            //TODO: where to go if false
        }

我想知道是否有一种方法可以将空间的边界设置为圆柱体,或者检查代理的哪一侧靠墙并限制其在该方向上的移动。

4

2 回答 2

4

粘性边界代码 ( StickyBorders.java ) 本质上只是检查代理移动到的点是否超出空间的任何维度,如果是,则该点被限制到该维度。因此,例如,如果空间是 3x4,并且代理的移动会将其带到 4,2,那么该点将变为 3,2,并且代理被放置在那里。在这种情况下你能做这样的事情吗?如果没有,您能否编辑您的问题以解释为什么不这样做,也许这将有助于我们更好地理解。

于 2018-10-24T12:58:15.557 回答
3

我们在该模型中采用的方法是使用具有自定义边框和查询方法的 3D 网格空间。空间本身仍然是笛卡尔坐标——我们只是使用自定义显示代码将其可视化为圆柱体。使用笛卡尔网格是该应用程序的合理近似,因为单元尺寸明显小于血管半径,因此忽略了曲率效应。容器空间的边界条件在角度维度上环绕,因此细胞可以围绕容器的圆周连续移动,并且轴向边界条件也被环绕,因为我们假设容器长度足够长,这是合理的. 壁厚尺寸在基底膜(y = 0)和流体界面(y = 壁厚)处具有硬边界。

根据您使用的空间类型,您将需要实现执行边界功能的 PointTranslator 或 GridPointTranslator。如果您想要代码的具体示例,我建议您直接联系作者。

于 2018-10-24T16:15:06.310 回答