全球FlexSim系统仿真中文论坛

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

作者: ws-lk    时间: 2010-6-12 16:50
标题: Mergesort上产品类型与端口数目不相等的问题
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
! c* i" _  A' r6 w) W{  m  t! F' c6 |+ W4 D. n% {, Q
case 1: return getitemtype(item) == 1; break;+ S) A  d5 H2 o: O( u
case 2: return getitemtype(item) == 2||3;break;* g  n5 Y# [& v- `3 h
}' Y/ k+ s: h1 L  N& _0 {) }
结果成功了。但是,% b, [8 @1 a6 l, f! Z8 B$ U% j
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
1 D7 R4 W* W' wswitch(port)
4 |4 W# l2 f! J& M' W1 b  {{% o0 R1 |4 F: o+ w" W
case 1: return getitemtype(item) == 1||2; break;
- D+ p* x7 A  y' `! n# J4 Ccase 2: return getitemtype(item) == 3;break;
& {% p0 r" V9 R6 z/ W}
3 ^' Y) z! l' ?4 ^产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
$ X1 B2 E8 E2 Y9 T8 x, F有谁有关于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;* |. e! p3 i! T9 |) J
case 2: return getitemtype(item) == 3;9 v6 N: V1 E% n
1 y. X) m, T# @- W9 X
就可以实现
作者: wj109260758    时间: 2010-6-14 05:15
case 2: return getitemtype(item) == 2||3;
, `7 R0 R- W7 t) ^1 C6 W  t等于 case 2: return 2||3;
: O( c# k" y9 J+ x等于: return 1;
. w  @% B7 C- h+ i% O1 b你的第一个程序相当于:0 S4 w  M7 y" `  n" k
case 1: return getitemtype(item) == 1; ) l+ b2 H" {' ]$ a
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
4 N2 f  p4 k5 x0 v1 ]% _& R
% P' K: @1 s6 P( y% l  A& }所以第二个你的程序可以解读为:; Z: J, _, q1 X: C1 A) u0 ~. r9 J: k
switch(port)% `3 n# ^; J' p' i* d
{
5 Z3 X$ W% k0 V# ycase 1: return 1;(相当于所有实体可以从出口1流出)7 i, {9 s' j$ B  b+ y$ x
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
7 K, G6 @4 K( w% b( D* s0 j}+ t9 o, x2 c. F9 x3 f0 S- S
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
# M# s: M+ M  V; g# N5 \, ]  L8 e
如有错误,请指教。
作者: domcylai    时间: 2012-2-6 16:14
case 2: return getitemtype(item) == 2||3;
9 y6 Z7 l" D( S1 t4 J2 q等于 case 2: return 2||3;
7 n$ r8 ~0 C& T) {, u. k等于: return 1;+ I( W2 m9 a, c( z  W
你的第一个程序相当于:
, Z3 ~+ P) O0 d+ |- ~3 X, w& gcase 1: return getitemtype(item) == 1;
: l3 H7 e' \% y, c3 |case 2: return 1;在Megesort中最后一个出口,可 ...( k$ g% N! B* x$ l5 _" E3 H
wj109260758 发表于 2010-6-14 05:15
4 J. y1 f* C# x8 ?
) \# Y0 B+ J$ t
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
4 O* z, k) `7 K6 Q* k, T3 w) u8 L$ treturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
* t" d; o( i# f/ p: z
- Z5 d2 d8 D0 j# @! N+ k! A这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
作者: vivion    时间: 2012-3-30 11:19
感觉还是没有看懂到底为什么会出现这种情况?




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