lyapunov優化

 Lyapunov optimization是Michael J. Neely發展起來的網絡優化理論,可以參考[1,2]。因爲網絡研究中缺乏理論,簡單好使的算法,沒有高大上的公式嚇人,好像就不能發到高級別的期刊上。Lyapunov optimization有幾個公式,就成爲一個發論文的模板。只要找到一個問題背景,把公式套進去,就是一篇。關於這理論[3]的引用量已經達到1500多次了,但是很難找到相關的代碼!
 我很早就知道這個理論。於是花了幾天,研究了一下,沒辦法,眼紅呀!看了幾篇文章[4,5,6],這幾篇文章不僅名字類似,內容也感覺是一個模子製造的。
 知乎上有答主對這個方向有幾句評價[7]。我個人感覺,這個方向涉及的論文,可能不是簡單的灌水,可能需要製造數據!
 [4]中的公式推導,還是挺容易理解的。我就按照這個模板,換個場景,稍微地推導一下。
在這裏插入圖片描述
 如上圖所示的排隊系統,數據包的入隊速度是a(t)a(t),出隊速度是b(t)b(t),目標是是怎麼樣調整a(t)a(t),使得隊列mean rate stable,同時達到最大的用戶滿意度。用戶的滿意度,採用效用函數衡量,U=β×log(a)U=\beta\times log(a)。請求的數據流速率a(t)a(t)越大,用戶的滿意度越高,但是會造成很長的隊列佔用。
 隊列佔用,用QQ表示。Q的變化方程:
Q(t+1)=max[Q(t)b(t),0]+a(t) Q(t+1)=\max[Q(t)-b(t),0]+a(t)
 隊列mean rate stable的含義是:
limTE(Q(t))T=0 \lim_{T\to\infty}\frac{\mathbb{E}(Q(t))}{T}=0
 優化方程:
maxUsubjectlimTE(Q(t))T=0 \max U \\ subject \lim_{T\to\infty}\frac{\mathbb{E}(Q(t))}{T}=0
 定義L(t)=Q(t)22L(t)=\frac{Q(t)^2}{2}ΔL(t)=L(t+1)L(t)\Delta L(t)=L(t+1)-L(t)ΔL(t)\Delta L(t)被稱爲lyapunov drift。
Q(t+1)2={max[Q(t)b(t),0]+a(t)}2Q(t)2+b(t)2+a(t)22b(t)Q(t)+2Q(t)(a(t)b(t))2a(t)b(t)Q(t)2+b(t)2+a(t)2+2Q(t)a(t) Q(t+1)^2=\{\max[Q(t)-b(t),0]+a(t)\}^2\\ \leq Q(t)^2+b(t)^2+a(t)^2-2b(t)Q(t)+2*Q(t)(a(t)-b(t))-2*a(t)b(t)\\ \leq Q(t)^2+b(t)^2+a(t)^2+2*Q(t)a(t)
Q(t+1)2Q(t)2b(t)2+a(t)2+2Q(t)a(t) Q(t+1)^2-Q(t)^2\leq b(t)^2+a(t)^2+2*Q(t)a(t)
ΔL(t)B+Q(t)a(t) \Delta L(t)\leq B+Q(t)a(t)
 假設存在Bb(t)2+a(t)22B\geq \frac{ b(t)^2+a(t)^2}{2}。不必較真,全是爲了湊出來!
 定義lyapunov drift reward,ΔL(t)VU\Delta L(t)-VU,V是一個常數。想要獲取一個大的滿意度,卻會導致ΔL(t)\Delta L(t)增加,所以定義lyapunov drift reward,權衡兩項,使得aggregate plus最優。這個問題就轉化爲根據隊列佔用長度,調節速率的問題。
minQ(t)a(t)VU \min Q(t)a(t)-VU
 上式可以求導,可得Qβ×Va×ln2Q-\frac{\beta\times V}{a\times ln2}。使其爲0,求得速率控制公式:
a(t)=β×VQ(t)×ln2 a(t)=\frac{\beta\times V}{Q(t)\times ln2}
 最終效果如何呢,不知道。參數V,βV, \beta可以慢慢選,直到出現需要的數據。我寫了一個基於ns3的仿真程序,b(t)處理數據包的間隔服從possion分佈,動態調整a(t)。但是也沒有篩選出想個樣子的數據。其實這個問題,根據估計到b(t)b(t),調整a(t)a(t)不就行了嗎。沒辦法,想法太簡單,不能發文章呀!
 後來,我就根據設置排隊隊列的容忍閾值,調整了速率。R=previousRatetargetQR=\frac{previousRate*target}{Q}
這個就和lyapunov優化沒有關係了。但是,根據仿真追蹤的數據,我的隊列長度還算是mean rate stable。
 調節provider數據生成速率函數:

void LyQueue::AdjustRate(){
	float previous=m_visitor->getCurrentRate();
	if(m_queue>0){
		//float bit=m_v/(m_queue*8);
		//float rate=bit*1000/m_slot;
		if(m_visitor){
			if(m_queue<m_maxQ){
			float ratio=(float)m_targetQ/(1.0*m_queue);
			if(ratio>1.25){ratio=1.25;}
			float targetRate=previous*ratio;
			m_visitor->ChangeRate(targetRate);
			NS_LOG_INFO("adjust "<<targetRate);
			}else{
				m_visitor->SetRateToMin();
			}
		}
	}else{
		float targetRate=previous*1.125;
		if(m_visitor){
			m_visitor->ChangeRate(targetRate);
		}
	}
}

 實驗中,b(t)爲2Mbps。根據獲取到數據,畫了兩張圖。速率變化:
在這裏插入圖片描述
 隊列長度變化:
在這裏插入圖片描述
 代碼地址[8]。懂lyapunov優化的,可以幫忙改一改。
[1]Lyapunov optimization-wiki
[2] home page
[3] Stochastic Network Optimization with Application to Communication and Queueing Systems
[4] Quality-oriented Rate Control and Resource Allocation in Time-Varying OFDMA Networks
[5] Joint Rate Control and Power Allocation for Non-Orthogonal Multiple Access Systems
[6] Joint rate control and power allocation for low-latency reliable D2D-based relay network
[7] 李雅普諾夫優化問題?
[8] rate-adjust

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章