如何实施';时间';在Matlab中调用函数?
我试图在Matlab中模拟由14个节点和21条链路组成的网络的流量。我有一个函数叫做“New_Connection”,还有一个函数叫做“Close_Connection” 目前,我已经使用“For”循环实现了流量。在每次迭代中称为“New_Connection”,它随机选择一个源节点、一个目标节点,并执行一个随机持续时间(现在该值是一个整数)。此连接可以设置,也可以不设置(锁定) 之后,调用“Close_connection”函数,该函数检查所有连接时间(存储在数组中),如果它们的值为0,则关闭连接 最后,在循环结束之前,为所有建立的连接减去一个临时单位,至少是最后一个连接 我想要的是使用一个系统来执行这个模拟,该系统实现一个时间(例如1分钟),并且在任何时候,任何节点都建立一个新的连接。例如:如何实施';时间';在Matlab中调用函数?,matlab,networking,time,routing,Matlab,Networking,Time,Routing,我试图在Matlab中模拟由14个节点和21条链路组成的网络的流量。我有一个函数叫做“New_Connection”,还有一个函数叫做“Close_Connection” 目前,我已经使用“For”循环实现了流量。在每次迭代中称为“New_Connection”,它随机选择一个源节点、一个目标节点,并执行一个随机持续时间(现在该值是一个整数)。此连接可以设置,也可以不设置(锁定) 之后,调用“Close_connection”函数,该函数检查所有连接时间(存储在数组中),如果它们的值为0,则关闭
t=0.000134 s ---- Node1 to Node8
t=0.003024 s ---- Node12 to Node11
t=0.003799 s ---- Node6 to Node3
.
.
.
t=59.341432 s ---- Node1 to Node4
“Close_Connection”函数会考虑关闭连接所需的时间
我搜索了有关Simulink、SimEvents、并行计算、离散事件模拟的信息。。。但我不能真正理解它的功能
非常感谢您,并为我的英语道歉。您不需要使用像
SIMEVENTS
这样的复杂框架。对于简单任务,您可以编写自己的事件队列。下面的代码实现了一个简单的场景。在T=统一(0,10)秒时创建新连接,在10秒后删除连接
%max duration
SIMTIME=60;
T=0;
NODES=[1:20];
%Constructor for new events. 'Command' is a string, 'data' gives the parameters
MAKEEVENT=@(t,c,d)(struct('time',t,'command',c,'data',{d}));
%create event to end simulation
QUEUE(1)=MAKEEVENT(SIMTIME,'ENDSIM',[]);
%create initial event to create the first connection
QUEUE(end+1)=MAKEEVENT(0,'PRODUCECONNECTION',[]);
RUN=true;
while RUN
[nT,cevent]=min([QUEUE.time]);
assert(nT>=T,'event was created for the past')
T=nT;
EVENT=QUEUE(cevent);
QUEUE(cevent)=[];
fprintf('T=%f\n',T)
switch (EVENT.command)
case 'ENDSIM'
%maybe collect data here
RUN=false;
case 'PRODUCECONNECTION'
%standard producer pattern
%Create a connection between two random nodes every 10s
next=rand*10;
QUEUE(end+1)=MAKEEVENT(T+next,'PRODUCECONNECTION',[]);
R=randperm(size(NODES,2));
first=NODES(R(1));
second=NODES(R(2));
fprintf('CONNECT NODE %d and %d\n',first,second)
%connection will last for 20s
QUEUE(end+1)=MAKEEVENT(T+next,'RELEASECONNECTION',{first,second});
case 'RELEASECONNECTION'
first=EVENT.data{1};
second=EVENT.data{2};
fprintf('DISCONNNECT NODE %d and %d\n',first,second)
end
end
您不需要并行计算,但离散事件模拟是解决方案。你到底不清楚什么?只有我使用matlab函数和脚本。要生成离散事件,需要使用Simulink。查看mathworks.com中的示例,我发现这非常复杂,我想要的非常简单。我修改了某些参数,以便在完成现有连接之前启用新连接。我正在测试基本功能。当我在项目中实施您的系统时,根据结果,我会将您的答案标记为已接受。非常感谢。