全球FlexSim系统仿真中文论坛

标题: Mergesort上产品类型与端口数目不相等的问题 [打印本页]

作者: ws-lk    时间: 2010-6-12 16:50
标题: Mergesort上产品类型与端口数目不相等的问题
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:- r: _4 t$ r5 q! P
{
+ R& C- `  `8 l/ N! Jcase 1: return getitemtype(item) == 1; break;
8 O5 k& M8 S0 ncase 2: return getitemtype(item) == 2||3;break;4 E' a& n0 f$ W3 ~9 u% P
}; M, j' I  ~- A9 d4 R
结果成功了。但是,
. F5 u" C" [1 Y$ t8 |6 Y! N如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
# ]) b. V5 m. Q2 L/ N: d: S* oswitch(port)
6 X2 p; b  M! ^$ G2 ?; D  b{
3 p6 J. B; Z+ T7 p1 jcase 1: return getitemtype(item) == 1||2; break;
3 ~( K' M& R; Acase 2: return getitemtype(item) == 3;break;2 {- H- _9 u" L( ?9 a
}; B0 D% _) h: a1 s8 b
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?7 f2 o2 x& Y2 X- }
有谁有关于Megesort的详细介绍吗?
作者: wj109260758    时间: 2010-6-14 01:17
很奇怪,我也发现了
作者: wj109260758    时间: 2010-6-14 01:31
convery 却可以
作者: wj109260758    时间: 2010-6-14 04:42
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
6 s2 H$ _9 ~9 ~. E$ A$ Kcase 2: return getitemtype(item) == 3;
( h4 d# M2 H4 d0 X9 \, |4 J0 v( ]; M, U% p+ D
就可以实现
作者: wj109260758    时间: 2010-6-14 05:15
case 2: return getitemtype(item) == 2||3;% y# x- \+ j, c- q! v
等于 case 2: return 2||3;
2 o& b; C0 L2 a# _等于: return 1;
: G5 O5 p4 s# U5 f0 d你的第一个程序相当于:
5 `. e/ `+ r+ E: w% }9 I) `, J6 wcase 1: return getitemtype(item) == 1;
6 H) Y3 e8 N2 mcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
- I" T) W% B9 N. H. [  P6 u- I. q$ n' n
所以第二个你的程序可以解读为:
9 U1 v( y. P. J, d3 Vswitch(port)
! U. g) P: K5 y6 X% g5 |{
( f2 O8 B+ U( ycase 1: return 1;(相当于所有实体可以从出口1流出)/ k$ v* D$ |$ x) ?1 t' @
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
  ?' f$ ^* `7 Q0 p2 e7 B+ c+ `}
$ {3 @$ k2 ]% Z; F$ |* f! r由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
% _* R$ |' F% r' e" u, A
7 z) F1 {* G5 z! Q# r% [如有错误,请指教。
作者: domcylai    时间: 2012-2-6 16:14
case 2: return getitemtype(item) == 2||3;% Y0 k9 s4 ^4 V3 G
等于 case 2: return 2||3;
% ?" H  B: u2 {等于: return 1;: d3 J+ r3 R! O5 Q
你的第一个程序相当于:
$ E" ~: @) d) Pcase 1: return getitemtype(item) == 1; ) D0 }8 k7 b& K% R% H. g
case 2: return 1;在Megesort中最后一个出口,可 ...( _/ @' K4 O. i4 p; N0 {6 e& D4 B9 M: ?
wj109260758 发表于 2010-6-14 05:15
/ D; V$ Z' Q) G) I) v$ f% M8 P

0 P' y! }+ m1 K0 v1 n1 K8 ~理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。: o6 n8 Q5 k( F5 E/ N" J5 F
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
2 _8 \) O5 V" c# |" l  M$ {' L) m$ r. g7 G6 \9 W
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
作者: vivion    时间: 2012-3-30 11:19
感觉还是没有看懂到底为什么会出现这种情况?




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3