|
任务分配器的pass to选项,返回的是一个端口值。将任务分配给与该中间端口连接的任务执行器。
. |" a& d9 {$ [6 W' L1 x以下为flexsim17.1自带,寻找行进距离最短的任务分配器:; ^1 }, K6 K0 V- {$ y$ O' P
; o" T3 @2 u, _8 ^& z. U
- treenode tasksequence = param(1);- _5 y; S5 ~5 D1 D$ C
- Object current = ownerobject(c);4 I1 k% a, l2 g9 g; ^
- /**找到距离最近的任务执行器*/
+ r8 F9 [2 V& y! n' L - /**如果任务执行器在网络路径上,则计算网络路径的距离,否则计算实体中心点间距。*/. l) B7 c! y0 f
- double curmin = GLOBAL_UNREACHABLE; h5 e% @! P( _ P; M' Y6 I8 F" q2 k
- int minindex = 0;/ ]* z" ?+ j! C4 l! z% j
- treenode destination = NULL;
6 l" Q \ u1 R! p% l. A' E, J - for (int taskrank = 1; taskrank <= gettotalnroftasks(tasksequence) && destination == NULL; taskrank++) % P3 E _9 O. ^
- { // 找到第一个行进任务,并获取行进目的地。&& destination == NULL确保一旦找到行进目的地就退出for循环。
% @ m6 R5 ?" m7 N - if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL)
* u- [& J0 T, G6 D% \( C - destination = gettaskinvolved(tasksequence,taskrank,1);0 I+ Q \3 p: P- a R
- }
; c8 R5 O7 K8 H9 {3 `# A% j: B
* e! k9 t" ]) J1 C, Z- if (destination==NULL) // 如果没有行进任务,把任务传递给第一个可用任务执行器。9 Q$ ^: a2 F2 I) U/ Z
- return 0;
2 {3 o1 D1 z9 l' B& y7 Z! X - ; E9 M1 o1 M& J+ S0 {. r3 |
- //如果有行进目的地,则遍历所有任务执行器,寻找距离最近的那个。. E% H/ Z z9 ^( N) {" Q$ G
- for (int index = 1; index <= current.outObjects.length; index++) 5 X6 I: b' e8 w: O6 Q
- {
$ |8 d" h# M" r- q+ }* @ - treenode curobj = current.outObjects[index];
8 h& x* t# F7 V+ @7 n8 Y! B - if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER))
! ]9 T D' z; D- o7 z - //中间端口有连接实体,并且该实体为任务执行器
7 x/ j+ L: d4 y - {
8 Q- @. Y6 B- [) I* @ - double curdist = distancetotravel(curobj, destination);6 r# k$ q4 U' i. h* r% P% m
- //计算任务执行器和目的地之间的距离) t6 j: N h i% Y" w
- if (curdist != GLOBAL_UNREACHABLE && (curmin == GLOBAL_UNREACHABLE || curmin > curdist))
- i3 Y& ^& ~9 n- x - {//如果计算出来的距离小于curmin,则更新curmin,把当前距离作为最小距离。- L7 B, k F1 s2 X# l6 x
- curmin = curdist;! d7 ~' _- }6 k1 R6 C; @, }( z9 g
- minindex = index;
, W# D$ b [. z! x2 i t: L6 S" [- S - }% w) p8 l, E* P3 _8 J& I
- }; Z9 ~) r/ B' j/ p2 p z
- }
% o4 Y2 U& P$ @/ \: L - ( o; x& {6 W* ]; U9 g& ^
- return minindex;
2 i1 I/ @! f& P1 W - //返回minindex,距离最近的那个任务执行器在任务分配器上的中间端口号。
复制代码 : y0 L% d4 N! G/ ^! Z
5 ~% R& G1 n6 h+ ]& H随手翻,不保证正确性、可读性。 |
评分
-
查看全部评分
|