创建动态过程模型
Create dynamic process model
我目前正在尝试构建动态流程模型。该模型本身将如下所示:
代理由源块为每个点节点创建,然后沿着三个路径移动,直到它们在中心路径上相遇。
例如我正在尝试做的事情:每条路径都可以看作是一条生产线。成品最终会合,接受检查和包装。代理到底发生了什么并不重要。运动的可视化很重要。
问题:模型应该是动态的。在模拟开始之前,所需的源、路径和传送带的实际数量是未知的。可能只需要一个源,也可能需要超过 25 个。每个源的代理应该采用不同的路径。
我考虑过在主要 class 的 "On startup:" window 中创建(几乎)完整的流程模型。我开始尝试 "copy" 一个现有的源代码块,但目前这样做失败了。
com.anylogic.libraries.processmodeling.Source<Agent> source2 = new
com.anylogic.libraries.processmodeling.Source<Agent>( getEngine(), this, null);
source2 = instantiate_source_xjal();
setupParameters_source_xjal( source2 );
create_source_xjal( source2 );
谁能给我指出正确的方向,或者有更简单的方法吗?
好的,用传送带做很多工作,所以我只给你看一个例子,然后你可以自己解决剩下的问题。
第一步:结构。
这是模型的结构:
第二步:点节点数组。
initialPoints 是一个元素类型为 PointNode
的 ArrayList
第三步:来源人群
如您所见,到达时的位置是:initialPoints.get(index) 其中 index 是来源群体中的来源。还要提前检查代理是一个人口,最初是空的。所以现在你有大量的资源......一切都很好。
moveTo 块将使代理移动到 endConveyorPoint,这是我在模型中明确定义的唯一点节点。
第四步:初始化。
在主启动时添加以下代码,您需要定义一个网络并添加源和所有您需要的东西,将路径和点添加到网络并将它们也添加到演示文稿中......您将不得不更改初始 X ,Y,Z 坐标(如果需要):
Network n = new Network( this, "nety", SHAPE_DRAW_2D3D, 0, true, true );
n.add(endConveyorPoint);
for(int i=0;i<5;i++){
Source s = add_source();
PointNode pn=new PointNode(this, SHAPE_DRAW_2D3D, true, 100.0,300.0+i*50, 0.0, 1.0, dodgerBlue );
MarkupSegmentLine ms1 = new MarkupSegmentLine( 100.0, 300.0+i*50, 0.0, 350.0, 300.0+i*50, 0.0 );
MarkupSegmentLine ms2 = new MarkupSegmentLine( 350.0, 300.0+i*50, 0.0, endConveyorPoint.getX(),endConveyorPoint.getY(), 0.0 );
Path path = new Path( this, SHAPE_DRAW_2D3D, true, true,
PATH_DASHEDLINE, dodgerBlue, 2.0, pn, endConveyorPoint, ms1, ms2 );
presentation.add(pn);
presentation.add(path);
s.set_locationType(s.LOCATION_NODE);
s.setLocation(pn);
initialPoints.add(pn);
n.add(pn);
n.add(path);
}
n.initialize();
我目前正在尝试构建动态流程模型。该模型本身将如下所示:
代理由源块为每个点节点创建,然后沿着三个路径移动,直到它们在中心路径上相遇。 例如我正在尝试做的事情:每条路径都可以看作是一条生产线。成品最终会合,接受检查和包装。代理到底发生了什么并不重要。运动的可视化很重要。
问题:模型应该是动态的。在模拟开始之前,所需的源、路径和传送带的实际数量是未知的。可能只需要一个源,也可能需要超过 25 个。每个源的代理应该采用不同的路径。
我考虑过在主要 class 的 "On startup:" window 中创建(几乎)完整的流程模型。我开始尝试 "copy" 一个现有的源代码块,但目前这样做失败了。
com.anylogic.libraries.processmodeling.Source<Agent> source2 = new
com.anylogic.libraries.processmodeling.Source<Agent>( getEngine(), this, null);
source2 = instantiate_source_xjal();
setupParameters_source_xjal( source2 );
create_source_xjal( source2 );
谁能给我指出正确的方向,或者有更简单的方法吗?
好的,用传送带做很多工作,所以我只给你看一个例子,然后你可以自己解决剩下的问题。
第一步:结构。
这是模型的结构:
第二步:点节点数组。 initialPoints 是一个元素类型为 PointNode
的 ArrayList第三步:来源人群
moveTo 块将使代理移动到 endConveyorPoint,这是我在模型中明确定义的唯一点节点。
第四步:初始化。 在主启动时添加以下代码,您需要定义一个网络并添加源和所有您需要的东西,将路径和点添加到网络并将它们也添加到演示文稿中......您将不得不更改初始 X ,Y,Z 坐标(如果需要):
Network n = new Network( this, "nety", SHAPE_DRAW_2D3D, 0, true, true );
n.add(endConveyorPoint);
for(int i=0;i<5;i++){
Source s = add_source();
PointNode pn=new PointNode(this, SHAPE_DRAW_2D3D, true, 100.0,300.0+i*50, 0.0, 1.0, dodgerBlue );
MarkupSegmentLine ms1 = new MarkupSegmentLine( 100.0, 300.0+i*50, 0.0, 350.0, 300.0+i*50, 0.0 );
MarkupSegmentLine ms2 = new MarkupSegmentLine( 350.0, 300.0+i*50, 0.0, endConveyorPoint.getX(),endConveyorPoint.getY(), 0.0 );
Path path = new Path( this, SHAPE_DRAW_2D3D, true, true,
PATH_DASHEDLINE, dodgerBlue, 2.0, pn, endConveyorPoint, ms1, ms2 );
presentation.add(pn);
presentation.add(path);
s.set_locationType(s.LOCATION_NODE);
s.setLocation(pn);
initialPoints.add(pn);
n.add(pn);
n.add(path);
}
n.initialize();