首页 > 其他分享 >CPN Tools学习——时间和队列【重要】

CPN Tools学习——时间和队列【重要】

时间:2024-06-13 18:29:56浏览次数:22  
标签:令牌 转换 CPN 队列 列表 时间 全局 Tools

-Timed Color Sets 时间颜色集

-Token Stamps 令牌时间戳

-Event Clock 全局/事件/模拟时钟

-Time Delays on Transitions过渡的时间延迟

- List Color Set列表颜色集

- Queue排队

1.时间颜色集

在定时CPN模型令牌中有:

(1)象征性的颜色

(2)时间戳:时间戳是一个非负整数.

句法:1`e@+表达式

示例:

(1)1`A@+5:表示这个令牌A将在时间5可用以启用转换

(2)多重令牌:1`A@+2++1`B@+5,表示A将在时间2可用以启用转换,B在时间5可用。中间两个++是用于多集的符号。

(3)1`(A,B)@+20,表示有序对在时间20可用

系统有一个表示模型时间的全局(事件)时钟。当全局时间为0,这些都不可用.

        通过在CPN工具定义末尾添加此时间关键字timed,来设置定时颜色集。可以看到net中P1和P2的令牌都自动出现了默认的@0。因为如果不指定,CPN工具默认提供当前全局时钟0.

这个time=0就表示。全局时钟时间或事件时钟时间此时为0.

将时间延迟分配给转换T所需要:

1)选择转换(即左键单击)

2)按Tab键

3)在@+后键入延迟表达式

        这里输出的结果P3由转换T1和输出弧表达式共同决定,所以这里输出P3的时间戳等于两个地方的时间戳加起来。

        虽然执行一次后,转换T1处有10的延迟,但是当前全局时间还是保持0不变,因为T1在时间0时在P1和P2中仍然有可用的,即0时仍可以触发转换。即全局时间time等于可以出发转换T1的最早时间。

2.令牌上的时间戳

手动设置令牌上的时间戳

执行一步操作后,当前全局时间为5,P1可执行(0<=5),P2可执行(5<=5),故T1可触发,累计时间戳就是输出的时间戳。

CPN当前的全局时间time等于可以出发转换T1的最早时间。

3.队伍Implementing Queues

(1)HD和TL操作

(2)列表构造函数(: :)

构造函数,它显示为这两个冒号。这个构造函数在队列的实现中发挥非常重要的作用。

  • 构造 元素::元素列表——元素列表
  • 也构造两个变量
  • 将列表分配给变量的话,是前面X分配第一个元素,后面XS分配后面剩余元素并成为列表。

(3)串联运算符(^^)

用于从两个参数列表构造一个列表,因此该运算符的左侧是一个列表,右侧也是一个列表。

实操:

定义一个时间颜色集JOB和变量j,并在两个库所使用颜色集JOB,在弧上使用变量j。在转换上设置10的延迟。

在输入库所放置一些令牌,以触发转换。

在转换处放置一个循环:

可以看到最开始全局时间time=1,因为job=1,在其他中是最早可以触发转换的。因此是当前的全局时间。

新加的颜色集是E,里面只有一个变量e,(有点没明白这样做的意义,好像是当该服务器一次可以处理一项作业,就可以设置这样的自循环)

       因为转换sever会到输出,也会到timer,由于变量e获取过来的时间是11,那么要再回到转换sever重新触发,至少也要有11.

显示此时执行一次后,当前全局时间为11,因为剩余的job2和job3可执行时间都小于11,都是可以执行的,所以这里可以进行选择,否则就是随机了。

定义列表颜色集JOBList,以及变量js,并向net中添加队列(队列的实现就是红色框内的结构)。

理解:

队列初始是空的1`[ ],串联函数js^^[j]表示添加来自左边的元素j,且都是添加在Queue的末尾的。队列的形成方式:在现有队列的尾部添加一个元素。

利用构造函数j::js,是为了删除Queue中的第一个元素,从中删除第一个元素(j代表的)后,将队列的其余部分并将其放回队列中,我可以拿走这个j,并将j与此转换一起使用,然后在输出位置放置.

  它取出队列中的第一个作业来处理,然后转到队列的下一个作业中。(太像优先级队列更新啦)

此时执行的转换是FormQ,要看的是job3的可执行时间。

此时执行的转换是Sver,要看的是Timer的可执行时间。队列的更新如图所示。

标签:令牌,转换,CPN,队列,列表,时间,全局,Tools
From: https://blog.csdn.net/qq_47966193/article/details/139661459

相关文章

  • 【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
      ......
  • chatgpt tools调用
    chatgpttools调用1.引入openai,创建clientimportjsonimportosimportsubprocessfromopenaiimportOpenAI#api_key可以填入自己的key#base_url可以使用国内的代理,海外可以使用官方地址client=OpenAI(api_key="",base_url="https://api.openai-proxy.com......
  • 多重背包 单调队列优化
    https://www.acwing.com/problem/content/6/#include<iostream>#include<memory.h>#include<deque>#include<stdio.h>usingnamespacestd;/*https://www.acwing.com/problem/content/6/有N种物品和一个容量是V的背包。第i种物品最多有si件,每件体积是vi,......
  • 云消息队列 ApsaraMQ 成本治理实践(文末附好礼)
    作者:家泽、稚柳前言:在AI原生应用架构浪潮中,消息队列需支持大规模数据和复杂AI模型训练与推理场景下的高效异步通信,其成本效益优化也日益受到重视。面对大模型或大数据量,消息量显著增加,云消息队列ApsaraMQ致力于降低消息队列成本,减轻用户负担,同时,通过架构演进,提升数据处理......
  • c++ 实现优先队列
    优先队列底层是堆,下面给出大根堆代码Push是在新节点到根节点的路径上寻找合适的插入位置;Pop是删除根节点之后维护大根堆,顺便为最后一个元素寻找合适的位置;1#include<bits/stdc++.h>23usingnamespacestd;45template<classT>6classp_queue{7pri......
  • 代码随想录算法训练营第10天 | 队列和栈基础知识、225用队列实现栈、用栈实现队列
    232用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/用栈实现队列代码随想录https://programmercarl.com/0232.用栈实现队列.html#其他语言版本225用队列实现栈https://leetcode.cn/problems/implement-stack-using-queues/description/用队列实现......
  • 使用Wesky.Net.OpenTools包来快速实现嵌套型结构体数据转换功能
    今天遇到有人提到结构体和byte数组互转的问题,我就顺便拿来水一篇。这是一个冷门的问题,估计使用的人不多。既然有需求,应该就有使用场景,那就顺便整一波。为了达到效果,结构体、复杂结构体嵌套等都能实现转换,我就顺便做了个包更新来提供使用和下面的说明。首先引入nuget包Wesky.Net......
  • 代码随想录算法训练营第三十六天 | 406.根据身高重建队列
    406.根据身高重建队列题目链接文章讲解视频讲解思路:  先按照身高由大到小排序,如果身高相同,比较人数(由小到大);  按照人数重构数组,将节点插入到合适的位置classSolution{private:staticboolcompareByK(vector<int>&lhs,vector<int>&rhs){if(lhs[......
  • applitools eyes 基于视觉检查的自动化测试
    Applitools是一家专注于视觉AI的自动化测试和监控解决方案的公司,其核心产品围绕着视觉回归测试和UI测试。ApplitoolsEyesApplitoolsEyes是其旗舰产品,是一个基于AI的自动化测试工具,专注于检测和修复UI错误。它使用视觉AI来识别界面的变化,并能够跨不同浏览器和设备进行比较,确......
  • 队列结构认识
    目录什么是队列?消息处理的触发机制异步消息队列的概念常见的异步消息队列框架什么是队列?队列数据结构的特点:跟排队一样:先进先出。队列的应用场景:一般在业务中,常常把队列作为一种中间件服务,比如当要处理大量消息的时候,往往是把这些消息放入一个队列存储,这时并不需要立即对它......