何楓 劉閔 楊鳳年 何文德



摘要:為了減少電氣工程師在復雜用電環境下的多臺變壓器之間負荷分配的計算工作量,本文采用Python語言,運用背包算法,開發了Windows操作系統環境下用于多臺變壓器負荷分配的計算程序,輸入參數和輸出結果均采用Excel表格,將以往煩瑣的人工重復計算工作實現由計算機輔助完成,為多臺變壓器的負荷分配計算提供了新的思路和便捷方法。
關鍵詞:背包算法;Python;變壓器;負荷分配
中圖分類號:TP311? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)28-0117-03
開放科學(資源服務)標識碼(OSID):
目前,在電氣工程項目中,對于將若干個負荷平均分配到多臺變壓器上這樣的計算問題,大多都是以Excel表格為基礎,首先利用人工進行負荷的初步分配,然后再來通過不斷地人工調整和優化,以便達到最佳分配效果。然而,在負荷數量較少時,上述方法尚不太影響工作效率,若負荷數量在四十個以上時,通常需耗時半天以上,效率不高且勞神費力,且很難達到理想效果,越來越難以適應復雜用電環境的設計要求,若遇到極端情況,甚至可能無法得到變壓器容量和補償功率相對一致的結果,因此,利用計算機實現多臺變壓器負荷分配的輔助計算,把工程師從煩瑣復雜的重復計算工作中解放出來已是當務之急。
本文采用Python編程語言,運用背包算法,設計實現了Windows環境下的變壓器負荷分配的計算機輔助計算應用程序,輸入參數用Excel文件導入,輸出結果用Excel文件導出,將以往繁重的人工計算工作交由計算機自動完成,大大提高了工作效率。
1變壓器計算的主要影響因素
為確保變壓器能支撐負荷運轉,不至于因電流過大導致過熱損毀,變壓器運行時的視在功率S通常要小于其容量的85%。設S的復數量為[S],虛數單位為j,那么:
[S=Sc.+?PT+j??QT]? ? ? ? ? ? ? ? ? ? ? ?(1)
其中[?P]為有功損耗,[?Q]為無功損耗,[Sc.]為變壓器的計算負荷。若變壓器掛載了n個負荷,那么變壓器的計算負荷[Sc.]為:
[Sc.=i=1nPi+j?(i=1nQi+?Qc)]? ? ? ? ? ? ? ? ? ?(2)
其中[Pi]和[Qi]分別為各負荷的有功功率和無功功率,[?Qc]為該變壓器無功補償的容量。又當變壓器負載小于等于額定負載的85%時,其功率損耗如下[1]:
[?PT=0.01Sc]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (3)
[?QT=0.05Sc]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (4)
另設變壓器負載的功率因數角為[θ],即[Sc.=(cosθ+j?sinθ)Sc],那么有:
[S=[cosθ+0.01+j?(sinθ+0.05)]Sc]? ? ? ? ? ? ? ? (5)
在實際應用中,往往會調整無功補償容量[?Qc]的大小,以使變壓器的功率因數在0.95左右;另外由于設備限制,無功補償容量值只能在有限的幾個整數中選擇,若補償稍多,即使是功率因數達到了0.97,其對視在功率也只比0.95時差了2.1%,對整體影響較小,完全可以忽略輕微的過、欠補償帶來的影響,因此可以認定:[cosθ≈0.95],這表示[Sc.]的實部和其模的比值就是[cosθ],即:
[Re(Sc.)Sc=i=1nPiSc≈cosθ]? ? ? ? ? ? ? ? ? ? ? ? ? ? (6)
結合之前[S]與[Sc]的關系式,得到:
[S≈β?i=1nPi]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (7)
其中:
[β=cosθ+0.01+j?(sinθ+0.05)cosθ]? ? ? ? ? ? ? ? ?(8)
而[β]是一個常數,由此得出:變壓器的視在功率與其所帶負荷的有功功率之和基本成正比;即如果需要控制變壓器的視在功率,只需控制其所帶負荷的有功功率[1]。
2背包算法
2.1背包問題簡介
背包問題(Knapsack problem)是一種組合優化的NP完全問題。問題可以描述為:給定一組物品,每種物品都有自己的重量和價格,在限定的總重量內,如何選擇,才能使得物品的總價格最高。對于最基本的情況,可以將背包問題敘述如下:
有N件物品和一個容量為V的背包。第i件物品的重量是w[i],價值是v[i]。求解將哪些物品裝入背包可使這些物品的重量總和不超過背包容量,且價值總和最大[2]。
2.2背包算法與變壓器負荷分配計算的關系
如果要將背包算法應用于變壓器負荷分配計算,只需將變壓器的參數轉化為背包問題的參數。即將若干負荷分成兩組,使這兩組的負荷對各自變壓器產生的視在功率基本相同。即找到一種選取方法,在所有負荷中選出一些負荷,使它們的有功功率之和,盡可能地接近總有功功率之和的一半,這樣就能將所有負荷均衡分配到兩臺相同的變壓器上。
因此,可將變壓器的參數轉化為背包問題的參數:
1)將所有負荷的有功功率之和的一半作為背包大小;
2)將每個負荷視為背包的物品;
3)將負荷的有功功率同時視為背包物品價值和重量。
此外,參數轉化過程中變壓器負荷應進行參數取整和倍數調整。
3計算能力的限制與程序算法流程
將背包算法理論應用到變壓器負荷分配計算,還應當考慮計算能力的限制、變壓器計算要求的限制。
3.1背包算法的選擇
背包算法中,設物品個數為n,背包容量為W。那么,進行一次背包計算,或者說得到一個抓取結果,大致需要[(n+1)?W]次加減計算,且利用背包算法得到的解,基本都不是所有可能解中的最優解。如果物品數量少,用枚舉法就能很快得到最優解。但是,枚舉法的計算量會隨著物品個數增加呈指數級增長;而背包算法的計算量和物品數成線性關系。因此,在物品數較大的時候應選擇背包算法,數量小的時候使用枚舉法更合適。根據工程經驗,兩臺800~1250KVA變壓器的負荷分配使用背包算法計算的負荷數量臨界值約為20。
3.2計算精度的取舍
背包算法的計算量大約是每次[(n+1)?W]次加減計算,而計算時應先將變壓器負荷值取整。然而取整涉及計算量,因為增加一位取整時的有效數字,那么計算量會增大10倍;有效數字取得太少,計算精度就會下降。就現有的主流個人計算機的計算能力下,背包重量取四位有效數字是尚可。注意,若背包重量的有效數字變化,物品重量也應進行相應的調整,否則計算會出錯。
3.3通過隨機物品序列產生不同結果
初步測試發現,在處理了應合并的負荷后,經過單次背包計算無法得出令人滿意的結果。因為在變壓器負荷分配時,除了變壓器視在功率,還有變壓器的無功補償容量要考慮[3],而背包算法只能控制視在功率,這樣就造成算出的結果不一定滿足無功補償容量的要求。
進一步測試發現,背包算法的結果,還與其物品的排列序列有關,因為背包算法是按順序對物品進行計算。如果需要得到令人滿意的結果,可以通過生成隨機序列的方法改變物品排列序列,讓背包算法產生多個結果,然后對這些結果進行比較,最終選擇一個最符合要求的結果。
3.4程序流程
應用程序采用控制臺輸入命令啟動,初始數據輸入和結果的輸出都通過Excel文件實現,程序流程圖(枚舉法的計算流程省略)如圖1所示。從Excel文件導入初始數據后,首先對負荷進行分類,要求分配在同一變壓器的負荷要合并成一個,然后求出負荷個數的總和、總有功功率和總無功補償容量,若負荷個數小于等于臨界值20,使用枚舉法計算;若負荷個數大于臨界值20,使用背包算法計算。生成隨機負荷序列用于背包計算的物品抓取,完成一輪抓取后求出本次背包中的無功補償容量,然后判斷該值是否符合設計要求,符合則計算完成;不符合進入下一輪,這時,首先看剛得出的無功補償容量比之前保存的值更好嗎?若更好則用新值替換舊值。程序進入重新生成隨機負荷序列模塊,開始新一輪的計算,如此循環往復,直到無功補償容量值符合設計要求,或計算次數已達到最大閾值,程序才會停止執行。
4應用實例
應用程序采用Python語言開發,可以從excel表格獲取輸入數據,將數據整理歸類并計算后再用excel表格輸出計算結果,可根據實際的負荷數量選擇使用枚舉法或者背包算法。程序的臨界數量值為19,最大背包計算次數為1000次,當兩組變壓器容量與無功補償容量分別相等時,會終止計算并輸出結果。
4.1測試項目概況
選用某住宅小區項目做測試。該小區有2有個專用配電房,1#配電房共有65個出線回路,總有效計算負荷為1324kW;2#配電房共有54個出線回路,總有效計算負荷為1297kW。
將程序運行2次即可得到2個配電房的計算結果。測試電腦CPU型號為i7-9700k,內存為8GB。
4.2運行結果
1#、2#配電房測試計算分別用時2.1秒和4.3秒,測試結果符合設計要求,與人工計算結果高度接近。以下為1#配電房測試結果如圖1和圖3所示。
5結語
隨著信息技術的飛速發展,很多復雜的工程計算都可以用計算機輔助完成。采用Python語言、利用背包算法設計實現的變壓器負荷分配計算應用程序,不僅可以對兩臺容量相同的變壓器進行負荷分配,而且可通過給出合適的背包容量,并添加適當的限制條件,還能對兩臺容量不同的變壓器,或者多臺變壓器進行負荷分配,可以大大節省設計時間,目前已處于試用階段,并在持續完善和優化中。試用結果表明,該軟件使用方便,性能較穩定,有較大的推廣應用價值。
參考文獻:
[1] 邱關源. 電路[M]. 北京:高等教育出版社,2006.
[2] 謝紹華. 背包問題(上)——算法分析[J]. 中文信息:程序春秋,2002,(8):25-26.
[3] 中國航空規劃設計研究總院有限公司.工業與民用供配電設計手冊(第四版)[M].北京:中國電力出版社,2016.
【通聯編輯:李雅琪】