Petri网pnml解析成关联矩阵后生成可达图

博客探讨了如何将Petri网的PNML表示转化为关联矩阵,并在此基础上生成可达图。过程中提到了状态空间爆炸问题以及解决方案的重要性。
摘要由CSDN通过智能技术生成

会产生状态空间爆炸,后续需要约减。

#include <stdio.h>
#include "tinyxml.h"
#include <iostream>
#include <cstring>
#include<string>
#include<vector>
#include <stdlib.h>
#include<fstream>
using namespace std;

struct Arc {
	string id;
	string source;
	string target;
	int sourceNum = 0;
	int sourceP = 0;//源节点是库所,则sourceP为1
	int sourceT = 0;
	int targetNum = 0;
};

//库所顶点表
typedef struct Place
{
	string name;
	int num = 0;
	int initialMarking = 0;
};

//变迁顶点表
typedef struct Transition
{
	string name;
	int num = 0;
};
int m = 0;
int n = 0;
int arcnum = 0;
Place place[30];
Transition transition[30];
Arc arc[1000];
int A[30][30] = { 0 };//关联矩阵
int A1[30][30] = { 0 };//输出矩阵
int A2[30][30] = { 0 };//输入矩阵

//可达图节点
typedef struct Node {
	int m[30] = { 0 };//标识
	int flag = 0;//新0,旧1,端点2
	int isfirable[30] = { 0 };//存储可以发生的变迁名字
	struct Node *parent;//该节点的父节点
	int t = 0;//存储生成这个节点所发生的变迁名字
};

void readPNML() {
	TiXmlDocument mydoc("E:\\1model.pnml");
	bool loadOK = mydoc.LoadFile();
	if (!loadOK) {
		cout << "could not load the test file" << endl;
		exit(1);
	}
	TiXmlElement *pnmlElement = mydoc.RootElement();
	TiXmlElement *netElement = pnmlElement->FirstChildElement();
	TiXmlElement *pageElement = netElement->FirstChildElement("page");
	for (TiXmlElement *petriElement = pageElement->FirstChildElement();//第一个子元素
		petriElement;
		petriElement = petriElement->NextSiblingElement())
	{
		if (petriElement->ValueTStr() == "place") {
			place[m].num = m
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值