📄 sim_failure.m
字号:
function sim_failure(instance, job_id)% job_id: % >0 -- called in condor for specific jobs, never use it manually% except for debugging!% ==0 -- called by user: run all jobs without using condor% unspecified -- save consts and schedule condor jobs% ==-1 -- don't run, process and plot!fn = 'sim_failure';MAX_JOBS = 100;if nargin==2 if job_id == -1 process_data(fn, instance) else get_raw_data(fn, instance, [job_id], MAX_JOBS) end returnendtotal_jobs = get_raw_data(fn, instance, [], MAX_JOBS)fid = fopen('condor.matlab','wt');if fid<0 error('could not open file');endfprintf(fid, '%s %s %d\n', fn, instance, min(total_jobs,MAX_JOBS));fclose(fid);! python gen_condor_jobs.pyfunction job_count = get_raw_data(fn, instance, job_ids, max_jobs)%%%%n_nodes = 3200;n_beacons = ceil(sqrt(n_nodes));if strcmp(instance,'low_rate') beacon_only=0; failure_percent = [0 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 ... 0.20];elseif strcmp(instance,'beacon_failure') beacon_only=1; failure_percent = [0.05 0.1 0.15 0.2 0.3 0.5 0.6 0.8 1.0];else error('wrong instance');end%failure_percent = [0.1];%repeat = 1;repeat = 10;%%%%const_fn = sprintf('%s/%s-const.mat', instance, fn);if length(job_ids)==0 | ismember(0, job_ids) const_fn = sprintf('%s/%s-const.mat', instance, fn); save(const_fn, 'repeat', 'failure_percent','max_jobs','-V6');endload(const_fn); %make sure it's consistent between instancesjob_count = 0;for i=1:repeat for p = 1:length(failure_percent) job_count = job_count + 1; if schedule_job(job_count, job_ids, max_jobs) fprintf('-------job_id = %d-----------repeat:%d, fail:%.2f\n', job_count, ... i, failure_percent(p)); res = sim_with_failure('topo-3200-5.12v6.mat',0, n_beacons, ... failure_percent(p), beacon_only); final_fn = sprintf('%s/%s-%d.mat', instance, fn, job_count); save(final_fn ,'res'); end endendfunction get_raw_data_old(fn)n_nodes = 3200;n_beacons = ceil(sqrt(n_nodes));failure_percent = [0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9];repeat = 1;for i=1:repeat for p = 1:length(failure_percent) fprintf('------------------repeat:%d, fail:%.2f\n',i, failure_percent(p)); res(p,i) = study_cr('topo-3200-5.12.mat',0, n_beacons, failure_percent(p)); save(fn,'res','repeat','failure_percent'); endendfunction process_data(fn, instance)load(sprintf('%s/%s-const.mat', instance,fn))failure_percentjob_count = 0;for i=1:repeat for p=1:length(failure_percent) job_count = job_count + 1; final_fn = sprintf('%s/%s-%d.mat', instance, fn, job_count); TMP = load(final_fn); res(p,i) = TMP.res; endendfor i=1:repeat%for i=1:1 for p=1:length(failure_percent) transmission_dist_bvr = res(p,i).transmission_dist_bvr_sf; n_random_pairs = length(transmission_dist_bvr); if n_random_pairs == 0 return end routing_dist_cr = res(p,i).routing_dist_cr; routing_dist_opt = res(p,i).optimal_dist; failure_bvr(p,i) = res(p,i).failure_bvr; failure_bvr_real(p,i) = length(find(transmission_dist_bvr==Inf))/ ... n_random_pairs; failure_cr(p,i) = length(find(routing_dist_cr==Inf))/ ... n_random_pairs; failure_opt(p,i) = length(find(routing_dist_opt==Inf))/ ... n_random_pairs; fprintf('percent:%.2f: bvr:%.3f, bvrreal:%.3f, cr:%.3f, opt: %.3f\n',... failure_percent(p), failure_bvr(p,i), ... failure_bvr_real(p,i), failure_cr(p,i), ... failure_opt(p,i)); endendmsz = 12;figure(1)set(gca, 'FontSize',20);hold onplot(failure_percent, mean(failure_cr,2),'bo-', 'MarkerSize', msz)plot(failure_percent, mean(failure_bvr_real,2),'rx-', 'MarkerSize', msz)plot(failure_percent, mean(failure_bvr, 2),'kv-', 'MarkerSize', msz)plot(failure_percent, mean(failure_opt,2),'g*-', 'MarkerSize', msz)if strcmp(instance,'beacon_failure') xlabel('fraction of dead beacon nodes'); legend('PCR','BVR','BVR w/o flooding','optimal',2); ylim([0 0.09])else xlabel('fraction of dead non-beacon nodes'); legend('PCR','BVR','BVR w/o flooding','optimal',2);endylabel('routing failure rate');saveas(gcf, sprintf('failure_%s.eps',instance),'psc2');figure(2)set(gca, 'FontSize',20);hold onp=1;i=1;plot_routing_stretch(res(p,i).routing_dist_cr, ... res(p,i).optimal_dist, 'g',[], 1);plot_routing_stretch(res(p,i).transmission_dist_bvr_sf', ... res(p,i).optimal_dist, 'r-.',[], 1);p=3;plot_routing_stretch(res(p,i).routing_dist_cr, ... res(p,i).optimal_dist, 'g--',[], 1);plot_routing_stretch(res(p,i).transmission_dist_bvr_sf', ... res(p,i).optimal_dist, 'r:',[], 1);legend('PCR failure rate=10%','BVR failure rate=10%', ... 'PCR failure rate=30%','BVR failure rate=30%',4);xlabel('trasmission stretch');ylabel('CDF');xlim([1 10]);saveas(gcf, sprintf('failure_stretch_%s.eps',instance),'psc2');figure(3)set(gca, 'FontSize',20);hold onp=3;i=1;%plot_cumu_matrix(res(p,i).load_optimal,'k');%plot_cumu_matrix(res(p,i).load_cr(res(p,i).beacons),'g');%plot_cumu_matrix(res(p,i).load_bvr_sf(res(p,i).beacons),'b');plot_cumu_matrix(res(p,i).load_cr,'g');plot_cumu_matrix(res(p,i).load_bvr_sf,'b');legend('PCR','BVR',0);xlabel('node load when failure rate=30%');ylabel('CDF');saveas(gcf, sprintf('failure_load_%s.eps', instance),'psc2');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -