如何实施';时间';在Matlab中调用函数?

如何实施';时间';在Matlab中调用函数?,matlab,networking,time,routing,Matlab,Networking,Time,Routing,我试图在Matlab中模拟由14个节点和21条链路组成的网络的流量。我有一个函数叫做“New_Connection”,还有一个函数叫做“Close_Connection” 目前,我已经使用“For”循环实现了流量。在每次迭代中称为“New_Connection”,它随机选择一个源节点、一个目标节点,并执行一个随机持续时间(现在该值是一个整数)。此连接可以设置,也可以不设置(锁定) 之后,调用“Close_connection”函数,该函数检查所有连接时间(存储在数组中),如果它们的值为0,则关闭

我试图在Matlab中模拟由14个节点和21条链路组成的网络的流量。我有一个函数叫做“New_Connection”,还有一个函数叫做“Close_Connection”

目前,我已经使用“For”循环实现了流量。在每次迭代中称为“New_Connection”,它随机选择一个源节点、一个目标节点,并执行一个随机持续时间(现在该值是一个整数)。此连接可以设置,也可以不设置(锁定)

之后,调用“Close_connection”函数,该函数检查所有连接时间(存储在数组中),如果它们的值为0,则关闭连接

最后,在循环结束之前,为所有建立的连接减去一个临时单位,至少是最后一个连接

我想要的是使用一个系统来执行这个模拟,该系统实现一个时间(例如1分钟),并且在任何时候,任何节点都建立一个新的连接。例如:

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中的示例,我发现这非常复杂,我想要的非常简单。我修改了某些参数,以便在完成现有连接之前启用新连接。我正在测试基本功能。当我在项目中实施您的系统时,根据结果,我会将您的答案标记为已接受。非常感谢。