[译]AGV系统区域控制死锁预测与避免

讨论了区域控制单向自动导引车系统(AGVS)的死锁问题。定义了一个有向图来对车流进行建模,识别不同的车流,方便地表示状态和捕捉区域控制AGV系统的并发行为。本研究的目的是提出一种动态的方法来实现对一类AGV系统的实时预测,避免因共用导向区而造成的死锁,从而提高资源利用率和总吞吐量。所提出的算法程序,根据所获得的模型所产生的状态,可以作为区域控制AGV系统运行的功能模块,而不需要对原有的车辆控制系统进行大范围的修改。

阅读更多

[译]AGV系统区域控制循环死锁的预测与避免

自动导向小车(AGV)在自动化物料搬运系统、柔性制造系统甚至海港集装箱搬运应用中正变得越来越流行。它的性能直接影响整个系统的效率。死锁的形成是一个严重的问题,因为它拖延了AGV系统。本文的目的是为集装箱港口作业开发一种有效的AGV死锁预测和避免算法,死锁在广义上是指系统中至少有一部分发生死锁的情况。多数情况下,系统可能会失速(效率低),而这些情况大多可以通过控制和导航系统来避免。本文讨论了一种有效的预测和避免AGV系统大规模死锁的策略,目前已有多种死锁检测算法,但这些方法主要适用于网络布局,简单地、仅使用少量AGV的制造系统。本研究中的AGV系统布局复杂,包含近80辆AGV。利用Automod仿真软件实现了该方法,并给出了该方法的性能。仿真结果表明,该方法能够检测并避免所有可能的死锁情况。此外,该策略计算效率高,能够在1.5秒的采样时间内为所有车辆提供运行决策。

阅读更多

关于“三门”问题的概率

最新编辑2:

又有网友提出,造成这个结果是因为 随机数Random.Next的方法永远拿不到上限值,也就是说 r.Next(0,2) 永远拿不到2。去source上查了一下确实如此,微软这个方法有点坑。

PS:特别感谢 御坂14491 号的提出,以及MatPopLeaSpo、言心亡、日后再说好不好、最萌的伊卡洛斯等朋友的在线对狙。

最后,公布最新的源码和跑的结果,先看结果:

改变选择有66465此中奖,不改变选择有33535此中奖,总数100000,
主持人选对了次数0
阅读更多

Flexsim最短路径算法50行代码搞定Floyd(弗洛伊德)

此算法由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。同年Stephen Warshall(史蒂芬·沃舍尔)也独立发表了这个算法。Robert W.Floyd这个牛人是朵奇葩,他原本在芝加哥大学读的文学,但是因为当时美国经济不太景气,找工作比较困难,无奈之下到西屋电气公司当了一名计算机操作员,在IBM650机房值夜班,并由此开始了他的计算机生涯。此外他还和J.W.J. Williams(威廉姆斯)于1964年共同发明了著名的堆排序算法HEAPSORT。堆排序算法我们将在第七章学习。Robert W.Floyd在1978年获得了图灵奖。——引用自【Angel Kitty】博客

本代码同时还参考了【火星十一郎】的博客上写了一篇关于最短路径算法的介绍。废话不多说,按照惯例直接上代码:

阅读更多

Flexsim学习笔记

建模小技巧:

// 获得场景中高亮的对象
treenode Perspective = node("?Perspective",views());
treenode selobj = selectedobject(Perspective);
if(objectexists(selobj))
{
   // 内容
}

// 打开用户命令和用户事件工具的脚本:
createview("VIEW:/standardviews/tools/UserCommands",
			"MAIN:/project/model/Tools/precision",
			"MAIN:/project/model/Tools/precision");
createview("VIEW:/standardviews/tools/UserEvents",
			"MAIN:/project/model/Tools/precision",
			"MAIN:/project/model/Tools/precision");

// 访问群组对象(例如设置flag属性)
string groupname = "Sources";
int members = groupnummembers(groupname);
for(int i=1;i<=members;i++)
{
    treenode o = groupmember(groupname,i);
    switch_selected(o,true);
}

// 获得AGV 控制点第一个资源对象的引用
treenode resource = ownerobject(tonode(get(first(node("/Location",connections(cp))))));


// 判断一个对象的类型(例如 AGV路径是不是CurvedPath)
treenode obj = rank(model(),10);
if(stringsearch(getname(first(classes(obj))),"CurvedPath",0)>0)
{
    // 内容
}

// AGV 刷新路径的空间更改
treenode path01 = ...;
function_s(path01 ,"finalizeSpatialChanges");
阅读更多

Flexsim实现Dijkstra最短路径算法

第一次接触最短路径算法是2012年去沈阳做项目,当时使用网络节点模拟AGV地图。学习最短路径算法,可以帮助建模工程师全部掌握中间经过的所有节点信息,这是实现复杂任务逻辑或交通管制逻辑的基础。

感谢【火星十一郎】博客上的一篇关于最短路径算法的介绍,科普和入门的大家可以前往查阅。受他恩惠,现在我重新写一篇使用flexsim的实现方法。

阅读更多