发帖
 找回密码
 立即注册
搜索
1 0 0

随手翻:任务执行器分配任务给行进距离最短的任务执行器

技术交流2 1 1 2017-4-24 01:03:36
任务分配器的pass to选项,返回的是一个端口值。将任务分配给与该中间端口连接的任务执行器。
以下为flexsim17.1自带,寻找行进距离最短的任务分配器:

[code]treenode tasksequence = param(1);
Object current = ownerobject(c);
/**找到距离最近的任务执行器*/
/**如果任务执行器在网络路径上,则计算网络路径的距离,否则计算实体中心点间距。*/
double curmin = GLOBAL_UNREACHABLE;
int minindex = 0;
treenode destination = NULL;
for (int taskrank = 1; taskrank <= gettotalnroftasks(tasksequence) && destination == NULL; taskrank++)
{  // 找到第一个行进任务,并获取行进目的地。&& destination == NULL确保一旦找到行进目的地就退出for循环。
        if (gettasktype(tasksequence,taskrank) == TASKTYPE_TRAVEL)
                destination = gettaskinvolved(tasksequence,taskrank,1);
}

if (destination==NULL) // 如果没有行进任务,把任务传递给第一个可用任务执行器。
        return 0;

//如果有行进目的地,则遍历所有任务执行器,寻找距离最近的那个。
for (int index = 1; index <= current.outObjects.length; index++)
{
        treenode curobj = current.outObjects[index];
        if (curobj && isclasstype(curobj, CLASSTYPE_TASKEXECUTER))
        //中间端口有连接实体,并且该实体为任务执行器
        {
                double curdist = distancetotravel(curobj, destination);
                //计算任务执行器和目的地之间的距离
                if (curdist != GLOBAL_UNREACHABLE && (curmin == GLOBAL_UNREACHABLE || curmin > curdist))
                {//如果计算出来的距离小于curmin,则更新curmin,把当前距离作为最小距离。
                        curmin = curdist;
                        minindex = index;
                }
        }
}

return minindex;
//返回minindex,距离最近的那个任务执行器在任务分配器上的中间端口号。[/code]

随手翻,不保证正确性、可读性。
──── 0人觉得很赞 ────
2017-4-24 11:08:09
谢谢大神的分享:victory:
您需要登录后才可以回帖 立即登录
高级模式
返回
技术交流2
热门问答
查看更多
1
Flexsim初级建模工程师水平标准
Flexsim初级建模工程师水平标准
60
234
2
厂区生产线布局优化案例!新做的!
厂区生产线布局优化案例!新做的!
39
224
3
流水作业线的仿真
流水作业线的仿真
36
83
4
无意中找到的资料,非常适合于初学者
无意中找到的资料,非常适合于初学者
33
229
5
flexsim中文教程,pdf文档已整理-重新整理
flexsim中文教程,pdf文档已整理-重新整理
30
114
博主榜
+ 5