www.gusucode.com > examples 工具箱 matlab源码程序 > examples/sedemo_rngseeds_mgmt_m.m
%% Managing Random Seeds for Event And Entity Generators % % Copyright 2005-2013 The MathWorks, Inc. %% Overview % % This example shows how to manage % sets of seeds for random number generators in a SimEvents(R) % model. Using such an approach, you can experiment with different % sets of seeds, and easily switch between different sets of seeds for a % single model. % % The model shown is a % discrete event system in which entities arrive at random times, carry % random data and are randomly routed by the Output Switch block to one of % two paths. oldFormat = get(0, 'Format'); format long; modelname = 'sedemo_rngseeds_mgmt'; open_system(modelname); %% % The following blocks in the model use seeded random % number generators for their operation: % % * Event-Based Random Number % * Time-Based Entity Generator % * Output Switch %% Getting Seeds from a Model % % The SimEvents function |se_getseeds| obtains information from a model or % subsystem % about the seed values and the blocks currently using them. mySeedSet = se_getseeds(modelname) %% % This function returns a structure with two fields. The first field, % |system|, contains the name of the model or subsystem from which these % seeds were obtained. % % The second field, |seeds| contains information about the seed values and % the corresponding blocks. The seeds can be inspected as follows: [{mySeedSet.seeds.block}' {mySeedSet.seeds.value}'] %% % As can be seen above, two of the blocks use identical seeds which % may cause undesirable effects or incorrect results for stochastic % simulations as shown in the example "Managing Seeds During Random Number % Generation". The function |se_randomizeseeds| can alleviate this % condition as shown below. %% Generating Multiple Sets of Seeds % % The SimEvents function |se_randomizeseeds| makes all % the seeds in a model or subsystem unique by randomizing them. % % The functions |se_randomizeseeds| and |se_getseeds| can be used together % as shown to generate multiple sets of seeds for simulation. % generate one set of seeds and simulate the model se_randomizeseeds(modelname, 'GlobalSeed', 123); newSeedSet1 = se_getseeds(modelname); sim(modelname); % generate a new set of seeds and simulate the model se_randomizeseeds(modelname, 'GlobalSeed', 456); newSeedSet2 = se_getseeds(modelname); sim(modelname); % inspect the generated sets set1 = [{newSeedSet1.seeds.block}' {newSeedSet1.seeds.value}'] set2 = [{newSeedSet2.seeds.block}' {newSeedSet2.seeds.value}'] %% Switching Between Sets of Seeds % % The SimEvents function |se_setseeds| can be used to switch between % different sets of seeds for different simulation runs. The following % example applies the seeds contained in |newSeedSet1| to the model (which % is the system specified in |newSeedSet1.system|). % set seeds to newSeedSet1 and simulate the model oldSeeds = se_setseeds(newSeedSet1) sim(modelname); %% % In addition the function |se_setseeds| returns all of the original seed % values in % the model in the variable |oldSeeds|. In case we need to revert changes % then the function |se_setseeds| can be used % again with the variable |oldSeeds| as the input argument. %% format(oldFormat); clear modelname clear mySeedSet newSeedSet1 newSeedSet2 oldSeeds clear set1 set2 ans %% Related Examples % % * <matlab:showdemo('sedemo_identicalseeds_m') Managing Seeds During % Random Number Generation> bdclose('sedemo_rngseeds_mgmt'); displayEndOfDemoMessage(mfilename)