首页 > 解决方案 > 在 Repast Simphony 中制作圆柱形空间?

问题描述

我正在尝试对上皮空间的内部进行建模,并且被困在围绕圆柱形空间的内部边缘的运动中。基本上,我正在尝试实现 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
        }

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

标签: repast-simphony

解决方案


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


推荐阅读