|
|
任务分配器的pass to选项,返回的是一个端口值。将任务分配给与该中间端口连接的任务执行器。
" `0 a- i) K- W# T% t5 _以下为flexsim17.1自带,寻找行进距离最短的任务分配器:
5 [ S: N+ t2 Q8 g" n, }- J
! o O3 Z# E1 y, y- treenode tasksequence = param(1);
1 k% c# I8 ]5 H5 v# Y - Object current = ownerobject(c);8 d6 J8 Y- L( Q7 c( G
- /**找到距离最近的任务执行器*/
0 x$ T' P3 q6 O - /**如果任务执行器在网络路径上,则计算网络路径的距离,否则计算实体中心点间距。*/
& I6 {: {) u0 Z$ O$ e - double curmin = GLOBAL_UNREACHABLE;
* f& [7 E% L3 L6 g% a - int minindex = 0;
6 ^+ I1 M5 n) b$ G0 b/ N6 } - treenode destination = NULL;2 d1 y; j* B* k( _( c C0 X
- for (int taskrank = 1; taskrank <= gettotalnroftasks(tasksequence) && destination == NULL; taskrank++)
% j& Q9 r) U$ [ - { // 找到第一个行进任务,并获取行进目的地。&& destination == NULL确保一旦找到行进目的地就退出for循环。+ r4 a6 \4 i5 o4 Z8 D" v
- if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL)
; R& f( _. Y1 n% p - destination = gettaskinvolved(tasksequence,taskrank,1);1 M8 p. H1 S" p
- }; k( [/ t, j! `' ~. J {2 W
' Y8 S& \9 C3 `7 P0 D$ z$ v6 N- if (destination==NULL) // 如果没有行进任务,把任务传递给第一个可用任务执行器。
, i5 i8 v* Y& A, U - return 0;& `5 G3 ~6 h! G
- 6 U2 G" R, p( s! |1 |) E8 `. [
- //如果有行进目的地,则遍历所有任务执行器,寻找距离最近的那个。
8 J- ~7 l! @/ z( J- U' S, h ?9 M - for (int index = 1; index <= current.outObjects.length; index++)
9 L- y' ^) T7 k) _4 k4 r - {
' i! ]% T h! m8 j5 b, Y' G - treenode curobj = current.outObjects[index];- F+ {& u, F% F
- if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER)) ! K( ^7 }! |* u9 j
- //中间端口有连接实体,并且该实体为任务执行器0 U7 z( H: J. y2 Z+ @" I
- {
: S* E) R! a* d1 i6 S - double curdist = distancetotravel(curobj, destination);* b$ O; E: R% ?; K
- //计算任务执行器和目的地之间的距离- G+ |7 N% p% M" o1 K4 P6 X7 z
- if (curdist != GLOBAL_UNREACHABLE && (curmin == GLOBAL_UNREACHABLE || curmin > curdist)) " x! U0 i4 @$ ^1 a6 @4 W0 P
- {//如果计算出来的距离小于curmin,则更新curmin,把当前距离作为最小距离。. ?, W$ ? o* b
- curmin = curdist;
6 g$ b" b. R- i7 S - minindex = index;, l/ G! D6 k9 j5 O2 |; l
- }
& Q) I( D# k0 z5 ]! J! c5 I% L. ] - }$ B, m6 L" z* t4 j, t; U! I
- }. m7 H4 U' ~: _/ ^! i3 p1 E
- 3 j$ D$ e- d; k2 Q% f
- return minindex;
) ] K2 p* q7 [# x7 a7 e! [; q - //返回minindex,距离最近的那个任务执行器在任务分配器上的中间端口号。
复制代码 2 |' }$ E: t# Z
& j b9 Q9 Q8 s; T! C- r# E
随手翻,不保证正确性、可读性。 |
评分
-
查看全部评分
|