如何实施' time'在Matlab中调用函数?

时间:2014-03-23 11:12:27

标签: matlab networking time routing

我正在尝试在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,并行计算,离散事件模拟的信息......但我无法真正了解其功能。

非常感谢你,并为我的英语道歉。

1 个答案:

答案 0 :(得分:2)

您不需要使用像SIMEVENTS这样的复杂框架。对于简单任务,您可以编写自己的事件队列。以下代码实现了一个简单的场景。创建新的连接T =统一(0,10)秒,删除10s后的连接

%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