亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tfrc-sink.cc

?? Ns2 TCP 協議改進 版本 提高goodput
?? CC
?? 第 1 頁 / 共 2 頁
字號:
		now, sample, drops);	//printf ("time: %7.5f send_rate: %7.5f\n", now, sendrate);	//printf ("time: %7.5f maxseq: %d\n", now, maxseq);}void TfrcSinkAgent::print_loss_all(int *sample) {	double now = Scheduler::instance().clock();	printf ("%f: sample 0: %5d 1: %5d 2: %5d 3: %5d 4: %5d\n", 		now, sample[0], sample[1], sample[2], sample[3], sample[4]); }void TfrcSinkAgent::print_losses_all(int *losses) {	double now = Scheduler::instance().clock();	printf ("%f: losses 0: %5d 1: %5d 2: %5d 3: %5d 4: %5d\n", 		now, losses[0], losses[1], losses[2], losses[3], losses[4]); }void TfrcSinkAgent::print_count_losses_all(int *count_losses) {	double now = Scheduler::instance().clock();	printf ("%f: count? 0: %5d 1: %5d 2: %5d 3: %5d 4: %5d\n", 		now, count_losses[0], count_losses[1], count_losses[2], count_losses[3], count_losses[4]); }////////////////////////////////////////// algo specific code /////////////////////////////////////////////////////////////// WALI Code////double TfrcSinkAgent::est_loss_WALI () {	int i;	double ave_interval1, ave_interval2; 	int ds ; 			if (!init_WALI_flag) {		init_WALI () ;	}	// sample[i] counts the number of packets since the i-th loss event	// sample[0] contains the most recent sample.	for (i = last_sample; i <= maxseq ; i ++) {		sample[0]++;		if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST) {		        //  new loss event			// double now = Scheduler::instance().clock();			sample_count ++;			shift_array (sample, numsamples+1, 0); 			shift_array (losses, numsamples+1, 1); 			shift_array (count_losses, numsamples+1, 0); 			multiply_array(mult, numsamples+1, mult_factor_);			shift_array (mult, numsamples+1, 1.0); 			mult_factor_ = 1.0;		}	}	last_sample = maxseq+1 ; 	if (sample_count>numsamples+1)		// The array of loss intervals is full.		ds=numsamples+1;    	else		ds=sample_count;	if (sample_count == 1 && false_sample == 0) 		// no losses yet		return 0; 	/* do we need to discount weights? */	if (sample_count > 1 && discount && sample[0] > 0) {                double ave = weighted_average1(1, ds, 1.0, mult, weights, sample, ShortIntervals_, losses, count_losses);                //double ave = weighted_average(1, ds, 1.0, mult, weights, sample);		int factor = 2;		double ratio = (factor*ave)/sample[0];		double min_ratio = 0.5;		if ( ratio < 1.0) {			// the most recent loss interval is very large			mult_factor_ = ratio;			if (mult_factor_ < min_ratio) 				mult_factor_ = min_ratio;		}	}	// Calculations including the most recent loss interval.        ave_interval1 = weighted_average1(0, ds, mult_factor_, mult, weights, sample, ShortIntervals_, losses, count_losses);        //ave_interval1 = weighted_average(0, ds, mult_factor_, mult, weights, sample);	// The most recent loss interval does not end in a loss	// event.  Include the most recent interval in the 	// calculations only if this increases the estimated loss	// interval.        ave_interval2 = weighted_average1(1, ds, mult_factor_, mult, weights, sample, ShortIntervals_, losses, count_losses);        //ave_interval2 = weighted_average(1, ds, mult_factor_, mult, weights, sample);	if (ave_interval2 > ave_interval1)		ave_interval1 = ave_interval2;	if (ave_interval1 > 0) { 		if (printLoss_ > 0) {			print_loss(sample[0], ave_interval1);			print_loss_all(sample);			if (ShortIntervals_ > 0) {				print_losses_all(losses);				print_count_losses_all(count_losses);			}		}		return 1/ave_interval1; 	} else return 999;     }// Calculate the weighted average.double TfrcSinkAgent::weighted_average(int start, int end, double factor, double *m, double *w, int *sample){	int i; 	double wsum = 0;	double answer = 0;	if (smooth_ == 1 && start == 0) {		if (end == numsamples+1) {			// the array is full, but we don't want to uses			//  the last loss interval in the array			end = end-1;		} 		// effectively shift the weight arrays 		for (i = start ; i < end; i++) 			if (i==0)				wsum += m[i]*w[i+1];			else 				wsum += factor*m[i]*w[i+1];		for (i = start ; i < end; i++)  			if (i==0)			 	answer += m[i]*w[i+1]*sample[i]/wsum;			else 				answer += factor*m[i]*w[i+1]*sample[i]/wsum;	        return answer;	} else {		for (i = start ; i < end; i++) 			if (i==0)				wsum += m[i]*w[i];			else 				wsum += factor*m[i]*w[i];		for (i = start ; i < end; i++)  			if (i==0)			 	answer += m[i]*w[i]*sample[i]/wsum;			else 				answer += factor*m[i]*w[i]*sample[i]/wsum;	        return answer;	}}int TfrcSinkAgent::get_sample(int oldSample, int numLosses) {	int newSample;	if (numLosses == 0) {		newSample = oldSample;	} else {		newSample = (int) floor(oldSample / numLosses);	}	return newSample;}// Calculate the weighted average, factor*m[i]*w[i]*sample[i]/wsum.// "factor" is "mult_factor_", for weighting the most recent interval//    when it is very large// "m[i]" is "mult[]", for old values of "mult_factor_".//// When ShortIntervals_ is 1, the length of a loss interval is//   "sample[i]/losses[i]" for short intervals, not just "sample[i]".//   This is equivalent to a loss event rate of "losses[i]/sample[i]",//   instead of "1/sample[i]".//// When ShortIntervals_ is 2, it is like ShortIntervals_ of 1,//   except that the number of losses per loss interval is at//   most 1460/byte-size-of-small-packets.//double TfrcSinkAgent::weighted_average1(int start, int end, double factor, double *m, double *w, int *sample, int ShortIntervals, int *losses, int *count_losses){        int i;        int ThisSample;        double wsum = 0;        double answer = 0;        if (smooth_ == 1 && start == 0) {                if (end == numsamples+1) {                        // the array is full, but we don't want to uses                        //  the last loss interval in the array                        end = end-1;                }                // effectively shift the weight arrays                for (i = start ; i < end; i++)                        if (i==0)                                wsum += m[i]*w[i+1];                        else                                wsum += factor*m[i]*w[i+1];                for (i = start ; i < end; i++) {                        ThisSample = sample[i];                        if (ShortIntervals == 1 && count_losses[i] == 1) {			       ThisSample = get_sample(sample[i], losses[i]);                        }                        if (ShortIntervals == 2 && count_losses[i] == 1) {			       int adjusted_losses = int(fsize_/size_);			       if (losses[i] < adjusted_losses) {					adjusted_losses = losses[i];			       }			       ThisSample = get_sample(sample[i], adjusted_losses);                        }                        if (i==0)                                answer += m[i]*w[i+1]*ThisSample/wsum;                                //answer += m[i]*w[i+1]*sample[i]/wsum;                        else                                answer += factor*m[i]*w[i+1]*ThisSample/wsum;                                //answer += factor*m[i]*w[i+1]*sample[i]/wsum;		}                return answer;        } else {                for (i = start ; i < end; i++)                        if (i==0)                                wsum += m[i]*w[i];                        else                                wsum += factor*m[i]*w[i];                for (i = start ; i < end; i++) {                       ThisSample = sample[i];                       if (ShortIntervals == 1 && count_losses[i] == 1) {			       ThisSample = get_sample(sample[i], losses[i]);                       }                       if (ShortIntervals == 2 && count_losses[i] == 1) {			       ThisSample = get_sample(sample[i], 7);			       // Replace 7 by 1460/packet size.                       }                       if (i==0)                                answer += m[i]*w[i]*ThisSample/wsum;                                //answer += m[i]*w[i]*sample[i]/wsum;                        else                                answer += factor*m[i]*w[i]*ThisSample/wsum;                                //answer += factor*m[i]*w[i]*sample[i]/wsum;		}                return answer;        }}// Shift array a[] up, starting with a[sz-2] -> a[sz-1].void TfrcSinkAgent::shift_array(int *a, int sz, int defval) {	int i ;	for (i = sz-2 ; i >= 0 ; i--) {		a[i+1] = a[i] ;	}	a[0] = defval;}void TfrcSinkAgent::shift_array(double *a, int sz, double defval) {	int i ;	for (i = sz-2 ; i >= 0 ; i--) {		a[i+1] = a[i] ;	}	a[0] = defval;}// Multiply array by value, starting with array index 1.// Array index 0 of the unshifted array contains the most recent interval.void TfrcSinkAgent::multiply_array(double *a, int sz, double multiplier) {	int i ;	for (i = 1; i <= sz-1; i++) {		double old = a[i];		a[i] = old * multiplier ;	}}/* * We just received our first loss, and need to adjust our history. */double TfrcSinkAgent::adjust_history (double ts){	int i;	double p;	for (i = maxseq; i >= 0 ; i --) {		if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST ) {			lossvec_[i%hsz] = NOT_RCVD; 		}	}	lastloss = ts; 	lastloss_round_id = round_id ;	p=b_to_p(est_thput()*psize_, rtt_, tzero_, fsize_, 1);	false_sample = (int)(1.0/p);	sample[1] = false_sample;	sample[0] = 0;	losses[1] = 0;	losses[0] = 1;	count_losses[1] = 0;	count_losses[0] = 0;	sample_count++; 	if (printLoss_) {		print_loss_all (sample);		if (ShortIntervals_ == 1) {			print_losses_all(losses);			print_count_losses_all(count_losses);		}	}	false_sample = -1 ; 	return p;}/* * Initialize data structures for weights. */void TfrcSinkAgent::init_WALI () {	int i;	if (numsamples < 0)		numsamples = DEFAULT_NUMSAMPLES ;		if (smooth_ == 1) {		numsamples = numsamples + 1;	}	sample = (int *)malloc((numsamples+1)*sizeof(int));        losses = (int *)malloc((numsamples+1)*sizeof(int));        count_losses = (int *)malloc((numsamples+1)*sizeof(int));	weights = (double *)malloc((numsamples+1)*sizeof(double));	mult = (double *)malloc((numsamples+1)*sizeof(double));	for (i = 0 ; i < numsamples+1 ; i ++) {		sample[i] = 0 ; 	}	if (smooth_ == 1) {		int mid = int(numsamples/2);		for (i = 0; i < mid; i ++) {			weights[i] = 1.0;		}		for (i = mid; i <= numsamples; i ++){			weights[i] = 1.0 - (i-mid)/(mid + 1.0);		}	} else {		int mid = int(numsamples/2);		for (i = 0; i < mid; i ++) {			weights[i] = 1.0;		}		for (i = mid; i <= numsamples; i ++){			weights[i] = 1.0 - (i+1-mid)/(mid + 1.0);		}	}	for (i = 0; i < numsamples+1; i ++) {		mult[i] = 1.0 ; 	}	init_WALI_flag = 1;  /* initialization done */}///////////////////////////// EWMA ////////////////////////////////////////////double TfrcSinkAgent::est_loss_EWMA () {	double p1, p2 ;	for (int i = last_sample; i <= maxseq ; i ++) {		loss_int++; 		if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST ) {			if (avg_loss_int < 0) {				avg_loss_int = loss_int ; 			} else {				avg_loss_int = history*avg_loss_int + (1-history)*loss_int ;			}			loss_int = 0 ;		}	}	last_sample = maxseq+1 ; 	if (avg_loss_int < 0) { 		p1 = 0;	} else {		p1 = 1.0/avg_loss_int ; 	}	if (loss_int == 0 	    || avg_loss_int < 0){ //XXX this last check was added by a				  //person who knows nothing of this				  //code just to stop FP div by zero.				  //Values were history=.75,				  //avg_loss_int=-1, loss_int=3.  If				  //you know what should be here,				  //please cleanup and remove this				  //comment.		p2 = p1 ; 	} else {		p2 = 1.0/(history*avg_loss_int + (1-history)*loss_int) ;	}	if (p2 < p1) {		p1 = p2 ; 	}	if (printLoss_ > 0) {		if (p1 > 0) 			print_loss(loss_int, 1.0/p1);		else			print_loss(loss_int, 0.00001);		print_loss_all(sample);	}	return p1 ;}///////////////////////////// RBPH ////////////////////////////////////////////double TfrcSinkAgent::est_loss_RBPH () {	double numpkts = hsz ;	double p ; 	// how many pkts we should go back?	if (sendrate > 0 && rtt_ > 0) {		double x = b_to_p(sendrate, rtt_, tzero_, psize_, 1);		if (x > 0) 			numpkts = minlc/x ; 		else			numpkts = hsz ;	}	// that number must be below maxseq and hsz 	if (numpkts > maxseq)		numpkts = maxseq ;	if (numpkts > hsz)		numpkts = hsz ;	int lc = 0;	int pc = 0;	int i = maxseq ;	// first see if how many lc's we find in numpkts 	while (pc < numpkts) {		pc ++ ;		if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST )			lc ++ ; 		i -- ;	}	// if not enough lsos events, keep going back ...	if (lc < minlc) {		// but only as far as the history allows ...		numpkts = maxseq ;		if (numpkts > hsz)			numpkts = hsz ;		while ((lc < minlc) && (pc < numpkts)) {			pc ++ ;			if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST )				lc ++ ;			i -- ;				}	}	if (pc == 0) 		p = 0; 	else		p = (double)lc/(double)pc ; 	if (printLoss_ > 0) {		if (p > 0) 			print_loss(0, 1.0/p);		else			print_loss(0, 0.00001);		print_loss_all(sample);	}	return p ;}///////////////////////////// EBPH ////////////////////////////////////////////double TfrcSinkAgent::est_loss_EBPH () {	double numpkts = hsz ;	double p ; 	int lc = 0;	int pc = 0;	int i = maxseq ;	numpkts = maxseq ;	if (numpkts > hsz)		numpkts = hsz ;	while ((lc < minlc) && (pc < numpkts)) {		pc ++ ;		if (lossvec_[i%hsz] == LOST || lossvec_[i%hsz] == ECNLOST)			lc ++ ;		i -- ;	}	if (pc == 0) 		p = 0; 	else		p = (double)lc/(double)pc ; 	if (printLoss_ > 0) {		if (p > 0) 			print_loss(0, 1.0/p);		else			print_loss(0, 0.00001);		print_loss_all(sample);	}	return p ;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美激情在线| 成人午夜大片免费观看| 国产精品一二三在| 欧美日韩国产精选| 国产精品天天摸av网| 日韩国产在线一| 成人av在线看| 欧美电视剧在线看免费| 亚洲午夜久久久久久久久久久| 国产综合色在线| 欧美日韩在线三级| 国产精品高潮呻吟| 国内久久婷婷综合| 3d成人动漫网站| 一区二区三区在线免费| 成人黄色小视频在线观看| 日韩欧美一区在线观看| 亚洲成人动漫在线免费观看| av亚洲精华国产精华精华| 精品久久人人做人人爽| 轻轻草成人在线| 欧美羞羞免费网站| 亚洲欧美一区二区三区久本道91 | 亚洲综合在线第一页| 国产福利视频一区二区三区| 日韩欧美高清在线| 日韩中文字幕一区二区三区| 在线观看欧美精品| 一区二区三区日韩欧美精品| www.日韩av| 中文字幕制服丝袜一区二区三区 | 精品福利一二区| 美女视频免费一区| 这里是久久伊人| 无码av免费一区二区三区试看| 在线免费av一区| 亚洲在线视频一区| 在线视频欧美精品| 偷拍一区二区三区| 在线中文字幕一区二区| 一区二区三区在线免费观看| 91国产免费观看| 亚洲激情在线激情| 欧美日韩一卡二卡三卡| 亚洲午夜激情av| 欧美日韩视频在线第一区| 亚洲成人av一区二区| 宅男在线国产精品| 久久精品国产澳门| 国产欧美一区二区三区在线看蜜臀 | 欧美影院一区二区三区| 亚洲v中文字幕| 欧美一级久久久| 日韩国产精品久久久久久亚洲| 欧美乱妇15p| 麻豆成人av在线| 久久精品综合网| 色综合天天综合网天天狠天天| 亚洲精品国产高清久久伦理二区| 日本乱人伦一区| 蜜臀av在线播放一区二区三区| 精品国产自在久精品国产| 精品一区二区三区的国产在线播放| 久久这里只有精品首页| www.亚洲在线| 亚洲电影第三页| 亚洲精品在线三区| 一本大道久久a久久综合| 日韩电影在线一区二区三区| 国产欧美一区二区三区网站| 欧美在线短视频| 国产中文一区二区三区| 综合激情成人伊人| 日韩一二三四区| av一区二区三区四区| 免费一级欧美片在线观看| 久久综合九色综合欧美就去吻| caoporn国产精品| 日韩激情一区二区| 国产精品久99| 日韩色在线观看| 91色在线porny| 免费精品视频最新在线| 亚洲色图制服丝袜| 欧美mv日韩mv亚洲| 欧美亚洲丝袜传媒另类| 国产成人精品亚洲午夜麻豆| 性做久久久久久免费观看| 中文一区二区完整视频在线观看| 911精品国产一区二区在线| 成人午夜短视频| 激情五月激情综合网| 午夜久久久久久久久久一区二区| 国产日韩精品久久久| 欧美日韩国产一级二级| 99久久久精品免费观看国产蜜| 蜜桃视频在线一区| 亚洲自拍偷拍九九九| 亚洲欧美综合在线精品| 精品福利二区三区| 日韩一级成人av| 欧美日韩国产欧美日美国产精品| 处破女av一区二区| 国产一区激情在线| 麻豆精品国产91久久久久久| 婷婷一区二区三区| 亚洲二区视频在线| 亚洲一区二区三区四区在线 | 成人ar影院免费观看视频| 美国十次综合导航| 日韩黄色片在线观看| 香蕉久久夜色精品国产使用方法| 亚洲欧美日韩一区| 亚洲乱码国产乱码精品精小说| 中文字幕精品—区二区四季| 久久久久久久久99精品| 亚洲精品在线免费播放| 26uuu精品一区二区三区四区在线| 777xxx欧美| 欧美一区二区大片| 日韩欧美国产综合在线一区二区三区| 欧美精品粉嫩高潮一区二区| 欧美一区二区三区影视| 日韩欧美国产1| 欧美精品一区二区三区在线播放| 欧美成人乱码一区二区三区| 久久久久久电影| 国产精品理论片在线观看| 国产精品高潮久久久久无| 最好看的中文字幕久久| 亚洲欧洲日韩一区二区三区| 亚洲欧美日本在线| 亚洲一区在线电影| 日韩高清不卡一区二区三区| 精品一区二区三区在线播放视频 | 成人免费毛片高清视频| av电影天堂一区二区在线| 日本韩国欧美三级| 69久久夜色精品国产69蝌蚪网| 欧美福利电影网| 国产亚洲欧美一级| 日韩理论在线观看| 亚洲国产精品视频| 久草这里只有精品视频| 国产精品一区二区在线观看不卡| 国产v综合v亚洲欧| 91国偷自产一区二区开放时间| 欧美精三区欧美精三区| 久久美女高清视频| 亚洲精品日日夜夜| 美日韩一级片在线观看| 波波电影院一区二区三区| 欧美日韩一区在线观看| 久久婷婷国产综合精品青草 | 日本视频在线一区| 国产成人免费xxxxxxxx| 欧美视频一区在线观看| 精品少妇一区二区三区| 亚洲欧洲精品一区二区三区不卡| 亚洲专区一二三| 国产成人在线网站| 欧美精品在欧美一区二区少妇| 久久综合久久鬼色中文字| 一区二区成人在线视频| 蜜桃av一区二区三区| av亚洲精华国产精华| 欧美成人vps| 亚洲伊人伊色伊影伊综合网| 国产精品综合久久| 欧美精品日韩一本| 中文字幕一区在线| 久久99国产精品尤物| 欧美在线综合视频| 亚洲国产高清在线| 蜜桃av一区二区三区| 欧美性感一区二区三区| 中文久久乱码一区二区| 久久不见久久见免费视频1| 在线免费观看日本一区| 国产精品免费久久| 狠狠狠色丁香婷婷综合久久五月| 在线观看91视频| 日韩毛片视频在线看| 国产在线看一区| 日韩三级精品电影久久久| 亚洲国产精品精华液网站| 成人av资源网站| 国产亚洲精品免费| 极品美女销魂一区二区三区免费| 欧美亚州韩日在线看免费版国语版| 国产精品人妖ts系列视频| 国产精品影视在线| 日韩女优电影在线观看| 喷水一区二区三区| 91精品免费在线| 午夜精品久久一牛影视| 91激情五月电影| 亚洲欧美日韩中文字幕一区二区三区| 粉嫩一区二区三区在线看| 精品国产乱码久久久久久久|