|
任务分配器的pass to选项,返回的是一个端口值。将任务分配给与该中间端口连接的任务执行器。
. M& H, S |( P8 v% O: i+ O. Q以下为flexsim17.1自带,寻找行进距离最短的任务分配器:
" y3 W2 l# U- y& [0 p
6 R9 J' K" d- k8 [- treenode tasksequence = param(1);
* ^# N9 Q @! Y4 C* T5 |$ K - Object current = ownerobject(c);, b) ]) G+ E5 t- X3 d
- /**找到距离最近的任务执行器*/# M- _4 _" l K
- /**如果任务执行器在网络路径上,则计算网络路径的距离,否则计算实体中心点间距。*/
2 h, l M1 o; [" ~# j; b+ n, J - double curmin = GLOBAL_UNREACHABLE;
7 C9 `4 k: U: J0 r - int minindex = 0;1 |3 C8 l( V& |# E1 |1 F. q
- treenode destination = NULL;
5 d6 {6 }0 M; s+ }# u - for (int taskrank = 1; taskrank <= gettotalnroftasks(tasksequence) && destination == NULL; taskrank++) ( @4 H: w0 R# a; m; L" _* {9 S
- { // 找到第一个行进任务,并获取行进目的地。&& destination == NULL确保一旦找到行进目的地就退出for循环。/ q* [* H$ {/ S Y9 N2 _1 {* |( D
- if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL)
1 l- z0 {/ E' h - destination = gettaskinvolved(tasksequence,taskrank,1);
' p5 e3 y" G6 y' e( p2 K" a: H - }
8 o. K$ j( a$ h b% ^
! i# `& L4 Y" U1 p5 s5 n, G! s+ Z- if (destination==NULL) // 如果没有行进任务,把任务传递给第一个可用任务执行器。
5 P" S& N4 u$ K - return 0;
2 F: o( p, F3 n: t; n - - e9 U2 e- [# f! {$ Z3 {: _% p. Z
- //如果有行进目的地,则遍历所有任务执行器,寻找距离最近的那个。, _ j6 l) i2 X( a# z4 L9 C9 s
- for (int index = 1; index <= current.outObjects.length; index++) ; }0 t/ ]( v& z) W' h7 y \( A M
- {
4 g: M% K$ J5 c* c - treenode curobj = current.outObjects[index];
* R; O7 w( U% t" l - if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER)) 6 h. R6 m3 s/ Y+ O$ s1 U* c
- //中间端口有连接实体,并且该实体为任务执行器
. g& g# |8 Q6 X1 b; a! q - {
; Q2 S, n4 I1 v9 V* R* Q - double curdist = distancetotravel(curobj, destination);
. V; k9 Y c) n* q7 {% j - //计算任务执行器和目的地之间的距离
H" z# p5 R. d0 I% R - if (curdist != GLOBAL_UNREACHABLE && (curmin == GLOBAL_UNREACHABLE || curmin > curdist)) 5 _& Q, Z$ ~: } h
- {//如果计算出来的距离小于curmin,则更新curmin,把当前距离作为最小距离。' A1 [# Z! ?: X9 Y* {
- curmin = curdist;! C# o0 u, g9 A' c3 d2 ?, w
- minindex = index;1 i5 w' f1 @! ?: V( V3 V" p
- }( ]/ m, e: [4 |1 r$ h- q
- }
9 G" F! F) L7 b l8 [9 q" p; I1 W! G; Y - }" A0 [% [+ f- U$ A0 F% g; T( R- R; T
/ z7 [6 X. d' W% U" Y* D7 G- return minindex;* s* |" d3 c/ e' H/ X6 i2 l
- //返回minindex,距离最近的那个任务执行器在任务分配器上的中间端口号。
复制代码 4 F3 T* U9 W# x' B5 K7 I
5 _' V0 T7 w$ O& w3 z1 W
随手翻,不保证正确性、可读性。 |
评分
-
查看全部评分
|