[font=宋体][size=10.5pt]在模型[font=Times New Roman]1[/font][font=宋体]中实现这样的逻辑:发生器可以产生多种不同类型的产品(具体类型数量可自行决定),不同的产品加工优先级根据其类型号而各不相同,本题中要求其类型号越小则加工优先级越高,即多个产品等待加工的时候,优先加工产品类型号最小的产品。[/font][/size][/font]
[font=宋体][size=10.5pt]此题是[size=20pt]FlexSim[font=黑体]建模水平认证[/font][/size][font=黑体][size=20pt][b]考评[/b][/size][/font][size=20pt]大纲[/size][font=黑体][size=20pt][b]([font=Times New Roman]2015[/font][font=黑体]版)[/font][/b][/size][/font]
中的第一个建模题。刚好最近也做了一个返工优先处理的模型,见[url=http://flexsim.asia/viewthread.php?tid=5045&page=1&fromuid=610#pid17589]http://flexsim.asia/viewthread.php?tid=5045&page=1&fromuid=610#pid17589[/url]。[/size][/font]
[font=宋体][size=10.5pt]于是照着同样的思路把这一题也做了一下,欢迎大家批评指正。
[/size][/font]
[font=宋体][size=10.5pt]假设发生器产生duniform(1,3)类型的临时实体,需要设置类型为1的临时实体进入暂存区后要排在最前列。假设已经有一个类型1的临时实体,则新进入的排在第二。如果此时再进入类型2的临时实体,则排在第三。[/size][/font]
[font=宋体][size=10.5pt]仍然是通过在暂存区设置标签来实现。[/size][/font]
[font=宋体][size=10.5pt]暂存区的创建触发中添加一下代码:[/size][/font]
[font=宋体][size=10.5pt][code]
int value = getitemtype(item);
switch (value)
{
case 1:
{
inc(label(current,"type1"),1);
setrank(item,getlabelnum(current,"type1"));
break;
}
case 2:
{
inc(label(current,"type2"),1);
setrank(item,getlabelnum(current,"type1")+getlabelnum(current,"type2"));
break;
}
}
[/code]离开触发中添加一下代码:[code]
int value = getitemtype(item);
switch (value)
{
case 1: inc(label(current,"type1"),-1);break;
case 2: inc(label(current,"type2"),-1);break;
}
代码位置在处理器的拉入条件中。[code]treenode current = ownerobject(c);
treenode item = parnode(1);
int port = parval(2);
/***popup:SpecificType*/
/**Specific Itemtype*/
int type = 99999;
treenode inobj=inobject(current,1);
int contents=content(inobj);
for(int index=1;index<=contents;index++)
{
treenode part=rank(inobj,index);
int type_part=getitemtype(part);
if(type_part<=type) //也可以直接用:type=min(type,type_part);
type=type_part;
}
return getitemtype(item) == type;[/code]