CPN Tools学习——案例实操

基于CPN的空竭服务单重休假 M/G/1 型排队系统建模与分析

目录

1创建CPN模型

1.1函数和变量声明

1.2监控声明

2 创建分层CPN

3 添加monitor

3.1 Predicate谓词函数

3.2 Observer观察函数

3.3 Init function &Stop初始化和停止函数

4CPN Tools工具补充

1创建CPN模型

1.1函数和变量声明

其中:

#val不是var

fun expTime(mean:int)=letval realMean=Real.fromInt mean val rv=exponential(1.0/realMean)infloor(rv+0.5)  end;

# variance,不是varaiance

fun NormalTime(mean:real,variance:real)=  letval rv=normal(mean,variance)infloor(rv+0.5)end;

1.2监控声明

全局变量longdelaytime为等待时间的最大允许值;

全局变量fileid是在用户自定义的监视中被用到的,它是一个Text-IO.outstream的选择型变量;如果fileid为空,则函数getfid将返回fileid 的文件标示;函数initfile初始化用户自定义的监视在仿真中将要更新的文件,文件的名字是Tran_Log_File.txt并且它将保存在仿真报告的目录里。具体声明函数如下:

globref longdelaytime=200;globref fileid=(NONE: TextIO.outstream option);fun gerfid()=Option.valOf(! fileid);fun initfile()=letval filename=OS.Path.concat(Ourput.gerSimOutputDir),"Trans_Log_File.txt")inOutput.initSimOutDir();fileid:=SOME(TextIO.openOut filename)end

不知道为什么还在报错中:

创建如下CPN模型:

2 创建分层CPN

利用View托盘中的创建组和选择组元素工具,和Hier托盘生成subpage工具,创建子页面:

父页面System:

子页面Arrivals:

子页面Server:

3 添加monitor

监视器中monitor的正确使用!是拖到库所和标签上的!

对于一个给定的模型可以定义多种Monitor,来满足不同的目的,各个Monitor之间可以互相作用。不同的Monitor可以满足不同的目的,可以分为以下几种:

data collector Monitor ,simulation breakpoint Monitor ,writer-in-file monitor和用户自定义monitor :

(1)simulation Break Monitor当特定条件满足的时候结束模拟,两种标准的 Break Monitor可分别用于某一库所的托肯数量达到一定数目或者是某一特定的变迁发生时结束仿真,还可以自定义Break Monitor。

(2)Data collector Monitor用于从模拟过程中提取数字数据或者用来计算模拟过程中提取数据的统计数据作为系统性能评价的数据资料,可以用来计算特定库所托肯的数量以及特定变迁发生的次数,用于计算模型的队列长度,响应时间等性能参数。可以自定义以满足各种需求。

(3)Writer-in-file monitor用来更新在模拟过程中记录信息的文件,可以在文件中输入任何语句,达到对模拟过程的监测。

尽管不同监控器有不同的目的但所有类型的监控器都有相同的特性与功能每个 monitor关联一个子网一些特定的库所与变迁 )

在CPN Tools中右键Add surrounding places可以在当前monitor中添加相关联的库所和变迁。

但是对应的函数确不会自己更新吗?

下面创建单个Start变迁的监视器:Queue Delay Monitor

自动生成可见代码:

3.1 Predicate谓词函数

谓词函数:当Start变迁发生的时候,该谓词函数被调用﹐并且返回真。

代码为:

fun pred (bindelem)=letfun predBindElem (Server'Start (1,{job,jobs,proctime}))=true | predBindElem_= falseinpredBindElem bindelemend

3.2 Observer观察函数

观察函数:当谓词函数返回真的时候观察函数被调用也就是 Start 变迁发生时。观察函数返回工作在队列中等待的时间,也就是表达式(intTimeO-(#ATjob))。观察函数返回整型值。

fun obs (bindelem)=letfun obsBindElem (Server'Start (1,{job,jobs,proctime}))=(intTime()-(#AT job))| obsBindElem_=~1inobsBindElem bindelemend

3.3 Init function &Stop初始化和停止函数

初始化和停止函数:工作的等待时间,在仿真运行之前不需要监视,停止标志发生时也不需要监视,所以初始化函数和停止函数都返回NONE值。

fun init ()=NONEfun stop (=NONE

成功在output文件中找到数据结果:(牛逼!)

但是我这个结果和论文中结果不一样呢:

估计是这几行代码还报错的原因:(这点算好吧,部分代码报错还是能有结果!)

4CPN Tools工具补充

光环颜色说明:

用撤销Undo(相当于Ctrl+Z)或重做Redo工具可以容易的取消或重复很多对CPN 网层次结构的改变。甚至连网页的拖动都可以撤销!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/364028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM】MDK工程切换高版本的编译器后出现error A1137E报错

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决工程从Compiler 5切换到Compiler 6进行编译时出现一些非语法问题上的报错。 2、 问题场景 对于一些使用Compiler 5进行编译的工程,要切换到Compiler 6进行编译的时候,原本无任何报错警告…

微信商家转账到零钱

1.发起商家转账 发起商家转账接口。商户可以通过该接口同时向多个用户微信零钱进行转账操作。请求消息中应包含商家批次单号、转账名称、appid、转账总金额、转账总笔数、转账openid、收款用户姓名等信息。注意受理成功将返回批次单号,此时并不代表转账成功&#x…

【涵子来信】——社交宝典:克服你心中的内向,世界总有缺陷

内向,你是内向的吗?想必每个人不同,面对的情形也是不同的。 暑假是一个很好的机会,我是可以去多社交社交。但是,面对着CSDN上这么多技术人er,那么,我的宝典,对于大家,有…

麒麟桌面系统CVE-2024-1086漏洞修复

原文链接:麒麟桌面操作系统上CVE-2024-1086漏洞修复 Hello,大家好啊!今天给大家带来一篇在麒麟桌面操作系统上修复CVE-2024-1086漏洞的文章。漏洞CVE-2024-1086是一个新的安全漏洞,如果不及时修复,可能会对系统造成安全…

MySQL之如何分析慢查询

1、一个SQL语句执行很慢,如何分析? 可使用“explain”或者“desc”命令获取MySQL如何执行select语句的信息。 语法:直接在select语句前加关键字 explain或desc explain select job_desc from xxl_job_info where id 1; 2、执行计划中五个重…

电商平台数据爬取经验分享

一、引言 在电商领域,数据的重要性不言而喻。无论是市场趋势分析、竞争对手研究,还是用户行为洞察,都离不开数据的支持。而数据爬虫作为获取这些数据的重要工具,其技术的掌握和运用对于电商平台来说至关重要。本文将结合个人实际…

什么是指令微调(LLM)

经过大规模数据预训练后的语言模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。 指令微调是相对“预训练”来讲的,预训练的时…

electron-builder 打包过慢解决

报错内容如下 > 6-241.0.0 build > electron-builder • electron-builder version24.13.3 os10.0.22631 • loaded configuration filepackage.json ("build" field) • writing effective config filedist\builder-effective-config.yaml • pack…

FinalShell:功能强大的 SSH 工具软件,Mac 和 Win 系统的得力助手

在当今数字化的时代,SSH 工具软件成为了许多开发者、运维人员以及技术爱好者不可或缺的工具。而 FinalShell 作为一款出色的中文 SSH 工具软件,无论是在 Mac 系统还是 Windows 系统上,都展现出了卓越的性能和便捷的使用体验。 FinalShell 拥…

详解ApplicationRunner和CommandLineRunner

一、前言 springBoot框架项目,有时候有预加载数据需求——提前加载到缓存中或类的属性中,并且希望执行操作的时间是在容器启动末尾时间执行操作。比如笔者工作中遇到了一个预加载redis中的缓存数据,加载为java对象。针对这种场景&#xff0c…

Linux /proc目录总结

1、概念 在Linux系统中,/proc目录是一个特殊的文件系统,通常被称为"proc文件系统"或"procfs"。这个文件系统以文件系统的方式为内核与进程之间的通信提供了一个接口。/proc目录中的文件大多数都提供了关于系统状态的信息&#xff0…

51-52Windows密码安全性测试与Windows提权

目录 Windows密码安全性测试 一、本地管理员密码如何直接提取 1、直接通过mimikatz读取管理员密码 2、使用laZagne工具读取管理员密码 二、利用Hash远程登录系统 window提权 三、远程webshell执行命令解决 不能执行原因: 解决方法:单独上传cmd.e…

利用python爬取上证指数股吧评论并保存到mongodb数据库

大家好,我是带我去滑雪! 东方财富网是中国领先的金融服务网站之一,以提供全面的金融市场数据、资讯和交易工具而闻名。其受欢迎的“股吧”论坛特别适合爬取股票评论,东方财富网的股吧聚集了大量投资者和金融分析师,他们…

夏令营1期-对话分角色要素提取挑战赛-第①次打卡

零基础入门大模型技术竞赛 简介: 本次学习是 Datawhale 2024 年 AI 夏令营第一期,学习活动基于讯飞开放平台“基于星火大模型的群聊对话分角色要素提取挑战赛”开展实践学习。 适合想 入门并实践大模型 API 开发、了解如何微调大模型的学习者参与 快来…

【C++】哈希表

目录 一、unordered系列关联式容器 二、哈希 2.1 概念 2.2 哈希冲突 2.3 哈希函数 (1)直接定址法 (2)除留余数法 (3)平方取中法 (4)折叠法 (5)随机…

springboot注解@ComponentScan注解作用

一 ComponentScan作用 1.1 注解作用 项目会默认扫描SpringBootApplication注解所在路径的同级和下级的所有子包,使用ComponentScan后他会取代掉默认扫描。 ComponentScan 是Spring框架的注解,它的作用是扫描指定的包路径下的标有 Component、Service、…

已备案网站变更并且不影响现有业务的方案

已备案网站变更并且不影响现有业务的方案 近日有个工作上的需求,已备案网站变更并且不影响现有业务,记录一下。 需求 域名:XXXXXX.com备案变更前主体: 海南XXXXXX科技有限公司 备案变更后主体: 深圳XXXXXX科技有限…

梦想CAD二次开发

1.mxdraw简介 mxdraw是一个HTML5 Canvas JavaScript框架,它在THREE.js的基础上扩展开发,为用户提供了一套在前端绘图更为方便,快捷,高效率的解决方案,mxdraw的实质为一个前端二维绘图平台。你可以使用mxdraw在画布上绘…

50-2 内网信息收集 - 内网工作环境(域相关知识)

一、工作组 工作组(Work Group)是局域网中最基本的资源管理模式,适用于小规模网络环境。 工作组的定义: 工作组是将不同功能或部门的计算机分组管理的方式。它提供了层次化的网络资源管理,使得组织内的计算机可以按照功能或部门分类。每个工作组有一个自定义的主机名称,…

Java访问修饰符的区别

public:公开的,任何地方都可以访问。 protected:受保护的,同一个包中的类和所有子类(可跨包)可以访问。 private:私有的,只有在同一个类中可以访问。 默认(无修饰符):包级…