
陳華友
本書的內容包括線性規劃、線性規劃的對偶理論與靈敏度分析、整數規劃、非線性規劃、模糊規劃、圖與網絡分析、存儲論、決策論、對策論和組合預測等。本書在系統講述基本理論、方法和模型的同時,爲了便於讀者的理解和應用,每章均給出了相應的問題實例及其算法求解的Lingo程序代碼。同時,爲了便於讀者複習鞏固,每章後均附有習題。
理論照進現實的學科,運籌學作爲一門用來解決實際問題的學科,在處理千差萬別的各種問題時,一般有以下幾個步驟:確定目標、制定方案、建立模型和制定解法。它以整體最優爲目標,從系統的觀點出發,力圖以整個系統最佳的方式來解決該系統各部門之間的利害衝突。 運籌學已被廣泛應用於工商企業、軍事部門、民政事業等研究組織內的統籌協調問題,故其應用不受行業、部門之限制,從現實生活場合抽出本質的要素來構造數學模型,因而可尋求一個跟決策者的目標有關的解。
很好文字描述不夠清晰數學符號解釋不清不適合初學者
喜歡應用數學,從小就喜歡應用題
典型的考試大綱式的架構,內容深度也很有限
數學公式比較多,屬於專業類的書籍,大概瞭解下運籌學的框架和內容還是ok的,但是對於新手和實際應用來說,參考意義不是很大。
線性規劃模型的一般形式 通過上面的兩個例子可以看出,規劃問題的數學模型由三個要素組成。 (1)變量,或稱決策變量。在規劃模型中,用一組決策變量來表示某一方案或措施,即描述所要做出的決策,可由決策者決定和控制。 (2)目標函數。這是決策變量的函數表達式,表示決策者希望實現的目標。按問題的不同,要求目標函數實現最大化或最小化,在前面加上max或min來表示,目標函數也是衡量方案優劣的標準。 (3)約束條件。這是指決策變量取值時受到的各種資源條件的限制,通常表示爲一組含有決策變量的等式或不等式,是決策方案可行的保障。 如果規劃模型中,目標函數是決策變量的線性函數,且爲單一的,決策變量是連續的,可以在實數範圍內取值,約束條件是含決策變量的線性等式或不等式,則稱該類規劃問題的數學模型爲線性規劃問題的數學模型。線性規劃的數學模型中,目標函數里決策變量的係數也被稱爲價值係數,它反映了每個決策變量的單位取值對決策目標的貢獻程度。
PeakAlgo日誌結構說明 一、結構說明 PeakAlgo是一個算法交易服務,它在運行中會生成很多日誌分佈在多個文件夾下。下面對其日誌結構做說明。PeakAlgo日誌目錄的根目錄名字是形如 JadeFOGEM_2025-03-29_12-20-06-7164。這個名字中JadeFO是服務的實例名,GEM是固定字符串,2025-03-29是服務啓動日期,12-20-06是服務啓動時間,7164是服務的進程id。 日誌根目錄下還有多個子目錄。 1, PeakAlgo的每一行日誌結構是如下: 2025-09-02 15:42:21.783|078| 16256|INFO |====== STARTED Global logger ======。它的日誌用 | 分割成了5部分。第一部分是時間戳,格式是 YYYY-MM-DD HH:MM:SS.xxx,第二部分是1毫秒中的微秒部分,第三部分是線程id,第四部分是日誌等級,第五部分是日誌內容,第五部分日誌內容在日誌文件中是可能跨越多行的。 2, StrategyContainer目錄。StrategyContainer目錄裏有Engine日誌,Engine日誌文件都是以Engine_開頭。Engine是一個線性規劃求解器,它接受用戶輸入的策略和各種約束條件,去QuoteManager獲取實時行情,去TradeManager獲取實時持倉,依次來做線性規劃求解。用戶策略和約束都是隻有交易員在前端界面操作纔會更新,從更新完到下一次更新中間的所有計算使用同樣的策略和約束,我們稱這部分數據爲靜態數據,因爲它們相當不會變動。每次計算都會去拿實時的行情和持倉,我們稱它們爲動態數據,因爲每次計算都可能不一樣,變動頻繁。以下是一個真實的靜態數據實例: Strategy_LIAOJINGWEI123_2025-09-18-17:47:13是這個策略的名字,下一行的2代表這個策略由2個direction組成,接下來的 V 200代表direction的版本,再下一行PEAK 18853304 1 1 2 ,其中的PEAK表示direction的名字,18853304是一個索引,1是bid這邊的設置個數,再一個1是ask這邊的設置個數,2代表這個direction有幾個線性組合組合而成。接下來的 1404.347854 46.759773 106722.449840 30 1871.945582 46.759773 1067.224498 30 分別是bid和ask的設置。Bid和ask都有4個字段,分別是 target, progress,sizelimit,和side。在接下來的行是線性組合,每行一個線性組合,因爲這個direction有2個線性組合,所有這裏有2行,每行有3個字段,但是隻有前2個字段有用,分別代表instrument和符號,在這個例子中,200210.RFQ的符號是-1,200210.PKIM的符號是1,所以這個direction就是 200210.PKIM - 200210.RFQ ,在接下來的一行 3.000000 4.000000 是yield domain的bid target和ask target,再接下來的 0.000000 0.000000 是price domain的bid target和ask target。 至此一個direction的日誌輸出就結束了。再下來在 V 200又是另外一個direction了。 Helper_Begin 代表direciton結束,同時也表示helper direction開始,下一行的數組0表示helper direction的個數,這裏是0,再下一行的Helper_End表示helper direction結束。 Instrument_LIAOJINGWEI123_2025-09-18-17:47:13是Instrument設置集的名字, 緊跟着的數組5代表該設置集有5個instrument的設置。V 400表示instrument設置的版本。 AlgoParams_LIAOJINGWEI123_2025-09-18-17:47:13 V 1000 中AlgoParams_LIAOJINGWEI123_2025-09-18-17:47:13是Algo參數的名字 V 1000是設置的版本。 IC_LIAOJINGWEI123_2025-09-18-17:47:13是Instrument約束集的名字接下來的數字7代表改約束集由7個約束組成,以下是一個約束的輸出 CommonSet|instrument|200210.CFETS -100.000000 100.000000 1 200210.CFETS 1.000000 1.000000 第一眼是約束的名字,第二行是約束的上下界,第三方代表該約束由幾個線性組合組成,接下來就是輸出線性組合,因爲這個日誌只有1個線性組合,所以值輸出了一行,這一行第一個字段是instrument的名字,第二個字段是符號,第三個字段沒用。 SC_LIAOJINGWEI123_2025-09-18-17:47:13是 Security約束集的名字,RC_LIAOJINGWEI123_2025-09-18-17:47:13是Risk 約束集的名字,它們的日誌結構和Instrument約束集的結構是一樣的。 Strategy_LIAOJINGWEI123_2025-09-18-17:47:13 2 V 200 PEAK 18853304 1 1 2 1404.347854 46.759773 106722.449840 30 1871.945582 46.759773 1067.224498 30 200210.RFQ -1.000000 1.000000 200210.PKIM 1.000000 1.000000 3.000000 4.000000 0.000000 0.000000 V 200 swap_vs_swap 18853304 1 1 2 -4185.000000 465.000000 10752.688172 -96 23250.000000 465.000000 1075268.817204 -96 FR007_5Y.OLI 1.000000 1.000000 FR007_1Y.OLI -4.650000 1.000000 -9.000000 50.000000 0.000000 0.000000 Helper_Begin 0 Helper_End Instrument_LIAOJINGWEI123_2025-09-18-17:47:13 7 V 400 200210.CFETS bond 0.000100 50.000000 50.000000 10.000000 10.000000 30.000000 30.000000 10000.000000 10.000000 0.000000 0.000000 0.000500 0.000100 46.682184 2.500000 2.500000 1 106.000000 468.504987 1 10.000000 10.000000 30.000000 30.000000 1 200210.CFETS 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 200210.IB bond 0.000100 50.000000 50.000000 30.000000 30.000000 30.000000 30.000000 10000.000000 10.000000 0.000000 0.000000 0.000500 0.000100 46.682184 2.500000 2.500000 1 106.000000 468.504987 1 30.000000 30.000000 30.000000 30.000000 1 200210.IB 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 200210.PKIM bond 0.000100 50.000000 50.000000 30.000000 30.000000 30.000000 30.000000 10000.000000 10.000000 0.000000 0.000000 0.000500 0.000100 46.682184 2.500000 2.500000 1 106.000000 468.504987 1 30.000000 30.000000 30.000000 30.000000 1 200210.PKIM 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 200210.RFQ bond 0.010000 0.000000 0.000000 30.000000 30.000000 50.000000 50.000000 10000.000000 10.000000 0.000000 0.000000 0.000500 0.000100 0.466822 2.500000 2.500000 1 106.000000 468.504987 1 30.000000 30.000000 50.000000 50.000000 1 200210.RFQ 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 FR007_1Y.OLI swap 0.002500 100.000000 100.000000 50.000000 50.000000 50.000000 50.000000 10000.000000 50.000000 0.000000 0.000000 0.000600 0.000600 10.000000 12.500000 12.500000 1 3.000000 100.000000 1 50.000000 50.000000 50.000000 50.000000 1 FR007_1Y.OLI 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 FR007_1Yx5Y.OLI swapswitch 0.250000 20.000000 20.000000 20.000000 20.000000 20.000000 20.000000 465.000000 20.000000 0.000000 0.000000 0.086022 0.086022 46.500000 5.000000 5.000000 1 -1.000000 465.000000 1 20.000000 20.000000 20.000000 20.000000 2 FR007_5Y.OLI 1.000000 1.000000 FR007_1Y.OLI -4.650000 1.000000 0 0.000000 0.000000 -1 0 0.200000 V 400 FR007_5Y.OLI swap 0.002500 40.000000 40.000000 20.000000 20.000000 20.000000 20.000000 46500.000000 20.000000 0.000000 0.000000 0.000215 0.000215 46.500000 5.000000 5.000000 1 2.225000 465.000000 1 20.000000 20.000000 20.000000 20.000000 1 FR007_5Y.OLI 1.000000 1.000000 0 0.000000 0.000000 -1 0 0.200000 AlgoParams_LIAOJINGWEI123_2025-09-18-17:47:13 V 1000 303 303 1.000000 0.500000 5000.000000 0.000000 0.250000 0.000000 0.000000 10000000.000000 0.000000 10000000.000000 1 0.250000 1 0.000000 1500.000000 10000 0.000000 1 14 0.800000 0.500000 2 0.000000 1 0 1 1500.000000 0.000000 0 0.000000 -1.000000 0 0 0 0 -1.000000 -1 IC_LIAOJINGWEI123_2025-09-18-17:47:13 7 CommonSet|instrument|200210.CFETS -100.000000 100.000000 1 200210.CFETS 1.000000 1.000000 CommonSet|instrument|200210.IB -100.000000 100.000000 1 200210.IB 1.000000 1.000000 CommonSet|instrument|200210.PKIM -100.000000 100.000000 1 200210.PKIM 1.000000 1.000000 CommonSet|instrument|200210.RFQ -100.000000 100.000000 1 200210.RFQ 1.000000 1.000000 CommonSet|instrument|FR007_1Y.OLI -250.000000 250.000000 1 FR007_1Y.OLI 1.000000 1.000000 CommonSet|instrument|FR007_1Yx5Y.OLI -100.000000 100.000000 1 FR007_1Yx5Y.OLI 1.000000 1.000000 CommonSet|instrument|FR007_5Y.OLI -100.000000 100.000000 1 FR007_5Y.OLI 1.000000 1.000000 SC_LIAOJINGWEI123_2025-09-18-17:47:13 6 CommonSet|security|200210.CFETS -100.000000 100.000000 1 200210.CFETS 1.000000 1.000000 CommonSet|security|200210.IB -100.000000 100.000000 1 200210.IB 1.000000 1.000000 CommonSet|security|200210.PKIM -100.000000 100.000000 1 200210.PKIM 1.000000 1.000000 CommonSet|security|200210.RFQ -100.000000 100.000000 1 200210.RFQ 1.000000 1.000000 CommonSet|security|FR007_1Y.OLI -250.000000 250.000000 1 FR007_1Y.OLI 1.000000 1.000000 CommonSet|security|FR007_5Y.OLI -100.000000 100.000000 1 FR007_5Y.OLI 1.000000 1.000000 RC_LIAOJINGWEI123_2025-09-18-17:47:13 6 CommonSet|risk|200210.CFETS -10000.000000 10000.000000 1 200210.CFETS 466.821836 1.000000 CommonSet|risk|200210.IB -10000.000000 10000.000000 1 200210.IB 468.504987 1.000000 CommonSet|risk|200210.PKIM -10000.000000 10000.000000 1 200210.PKIM 466.821836 1.000000 CommonSet|risk|200210.RFQ -10000.000000 10000.000000 1 200210.RFQ 466.821836 1.000000 CommonSet|risk|FR007_1Y.OLI -10000.000000 10000.000000 1 FR007_1Y.OLI 100.000000 1.000000 CommonSet|risk|FR007_5Y.OLI -10000.000000 10000.000000 1 FR007_5Y.OLI 465.000000 1.000000 SessionManager_End Begin portfolio:表示開始輸出持倉,Portfolio_End表示輸出結束。一個真實日誌如下: 2025-09-18 17:47:18.835|736| 9508|INFO |Begin portfolio: portSeqNo=0 Portfolio_LIAOJINGWEI123_2025-09-18-17:47:13 V 300 0.000000 7 200210.CFETS 0.000000 0.010000 0.000000 0.000000 0.000500 0.000100 0.000000 0.000000 200210.IB 0.000000 0.010000 0.000000 0.000000 0.000500 0.000100 0.000000 0.000000 200210.PKIM 0.000000 0.010000 0.000000 0.000000 0.000500 0.000100 0.000000 0.000000 200210.RFQ 0.000000 0.010000 0.000000 0.000000 0.000500 0.000100 0.000000 0.000000 FR007_1Y.OLI 0.000000 0.010000 0.000000 0.000000 0.000600 0.000600 0.000000 0.000000 FR007_1Y*5Y.OLI 0.000000 0.000465 0.000000 0.000000 0.086022 0.086022 0.000000 0.000000 FR007_5Y.OLI 0.000000 0.046500 0.000000 0.000000 0.000215 0.000215 0.000000 0.000000 Portfolio_End 這個例子中,Portfolio_LIAOJINGWEI123_2025-09-18-17:47:13 V 300 是持倉的名字和版本,緊接着下一樣的數字7表示有7個instrument的持倉,每個instrument一行。 MarketData V 300表示行情集的名字和版本,也同時表示開始輸出行情了,ErrorInst表示行情輸出結束了。 2025-09-18_17:47:18.835|736|MarketData V 300 1 200210.IB 2 100.460000 10000000.000000 1 0 99.650000 20000000.000000 1 1 2 106.000000 10000000.000000 -1 0 106.092900 10000000.000000 -1 1 0 0 0 0 0 0 0 0 FilterAONSize: 0 ibMarketChoice: 3 ErrorInst 0 一個真實的行情日誌例子如上,行情名字下一行緊跟着的數字1表示有1個instrument的行情。 Engine_Result_Begin表示開始輸出Engine計算結果了。Engine_Result_End表示Engine計算結果結束。在Engine_Result_Begin和Engine_Result_End中間會有一行EngineID:開頭,後面緊跟着的數字就是EngineID,代表的是計算的編號。 所以整個Engine日誌的結構就是靜態數據(如果交易員有更新)、動態數據、Engine結果。靜態數據在下一次更新前,所有的Engine共享同一個靜態數據。 Type2計算結果日誌 2025-09-18 18:31:14.693|505| 11844|INFO |Result from engine id 2559 ID=2559 inst=FR007_1Y*5Y.OLI side=1 price=-9.2500 size=20.0000 Saved calc state=1 calcTime=8.4850 EnginecreationTime=2830401.9350 這一行日誌表示一個type2的計算結果,關鍵字是“Result from engine id” , EngineId是2559, instrument Id是 FR007_1Y*5Y.OLI, side=1表示bid, side=-1表示ask, 計算出來的price是-9.2500, size是20個百萬,也就是 20000000. ResultProcessor目錄 ResultProcessor目錄下以rp1開頭的是type1訂單的處理日誌,以rp2開頭的是type2訂單的處理日誌,以rpRFQ開頭的是RFQ訂單的處理日誌。不論是哪種日誌,都需要先把日誌按線程id區分開後,再來看。 RP的日誌以” RP recd: EngineId:” 標誌RP處理開始,以” RP done: EngineId:”標誌RP處理結束,它們中間的同一線程的日誌表示的是RP詳細處理過程。 2025-09-18 17:47:17.869|771| 14876|INFO |RP recd: EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Result: (EngineId: 3 Type: 2 InstId: 39109 Side: Bid Price: 2.0975 Size: 50M Strategy: LIAOJINGWEI123_2025-09-18-17:47:13)VenuePripority: 2025-09-18 17:47:17.869|771| 14876|INFO |EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Info: New post in empty market. Starting ILP. ILPType: EbayILP DurationMs: 10000 2025-09-18 17:47:17.869|771| 14876|INFO |EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Info: EbayRule: Not degrading price in empty market because ResultPrice: 2.0975 at or worse than rounded Conservative Cutoff Price: 2.9 ReferencePrice: 3 2025-09-18 17:47:17.869|771| 14876|INFO |EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Price stack check passed. Price: 2.0975 MktLevel: 0 MaxLevel: 1 MktData: Bid: [] 2025-09-18 17:47:17.869|771| 14876|INFO |EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Action: Cancel Reason: Too conservative behind reference price. ResultPrice: 2.0975 boundPrice: 2.9 useNewBound: False 2025-09-18 17:47:17.869|771| 14876|INFO |Inst: FR007_1Y.OLI Side: Bid Info: RP filter done. 2025-09-18 17:47:17.869|771| 14876|INFO |Inst: FR007_1Y.OLI Side: Bid Info: RP assignment done. 2025-09-18 17:47:17.869|771| 14876|INFO |RP done: EngineId: 3 Inst: FR007_1Y.OLI Side: Bid Price: 2.0975 Size: 0 這個日誌表示RP收到EngineId爲3 Inst是FR007_1Y.OLI Side是Bid 的計算結果Price是2.0975 Size是50M RP處理結束後輸出的結果是Price是2.0975 Size是0。 由於Size是0,所以這次計算結果不會再往後續流程走,不會生成訂單。要生成訂單必須Size不等於0 RequestStateManager目錄下以rsm1開頭的是type1訂單的處理日誌,以rsm2開頭的是type2訂單的處理日誌,以rsmRFQ開頭的是RFQ訂單的處理日誌。不論是哪種日誌,都需要先把日誌按線程id區分開後,再來看。RSM的日誌由關鍵字”: New type” 標誌新生成了一個訂單,冒號前面可能是Live也可能是Test,是Live的話,這個訂單會發完交易所,是Test的話,這個訂單不會送到交易所。Type後面可能是1或者2或者2b或者RFQ,分別代表type1訂單,type2訂單,type2b訂單和RFQ訂單。 2025-09-18 18:41:54.573|363| 9884|INFO |Live: New type 1 order with EngineId: 3190 Inst: 200210.IB Side: Bid Price: 96.1252 Size: 40.0000M PkOrderId: HardLeg|1|6412|3190|LIAOJINGWEI123_2025-09-18-17:48:18 OrderId: 78f214f6-136b-4561-8ea7-07e1e9224a31 Side: ORDER_SIDE_BUY Req: (EngineId: 3190 Type: Type 1 hard leg result InstId: 4252 Side: Buy Price: 96.1252 Size: 40M Strategy: LIAOJINGWEI123_2025-09-18-17:48:18)VenuePripority: Yield: 4.0000 以上日誌說明這是一個 type1 訂單,由於有Live字樣,所以會發完交易所,EngineId是3190,對應的交易所訂單id是OrderId:後面的78f214f6-136b-4561-8ea7-07e1e9224a31, 訂單方向是Bid,Price是96.1252, Size是40M, Peak內部訂單id是HardLeg|1|6412|3190|LIAOJINGWEI123_2025-09-18-17:48:18
真的太好玩了,就是有點費頭髮 。線性代數和概率論是運籌學的基礎。儲存論,決策論,博弈論的知識和結合心理學的一些知識,把他們具體量化運用到實際生活。強者之路。
“運籌帷幄之中,決勝於千里之外”,運籌就是通過排兵佈陣,取得最大戰果。現代的運籌學,與此意正好貼合,不過更強調運用定量的數學理論和方法,獲得合理的最優方案。 本書可以作爲運籌學的實操手冊,在線性規劃、整數規劃、非線性規劃、模糊規劃、圖與網絡、決策論、博弈論以及組合預測等主要分支介紹了各類數學模型及求解方法,遇到問題,對號入座,找到合適的方法去分析、去解決,再迭代優化。 運籌學是系統工程的支撐理論之一,從運籌學的一般程序來看,其本身就可以看作狹義的系統工程,從問題分析和目標定義到模型構建,再到模型求解和結果分析,這就是一整套系統工程流程,只不過在問題的規模和方法的選擇上壓縮了範圍。運籌學和數學建模也有很大關係,我覺得,從小的方面說,數學建模是運籌學的一個環節,從大了說,數學建模也可以說就是運籌學。 運籌學給我的一個啓示,就是要學着用數學的方法去解決實際的問題,把理論落到實際上,再由實際來豐富理論。這就要求我一是要增加對方法的認識,知其所以然,一是會對問題進行抽象概括簡化,從關鍵處着眼。
運籌學有四個方面的基本特徵。一是運籌學使用數量分析方法,通過建立數學模型及其求解得到實際問題的最優決策方案。二是運籌學具有系統的整體性。其研究問題是從系統的觀點出發,研究全局性的問題,尋求整體利益的優化協調方案。三是運籌學具有學科交叉的特性。其研究問題具有領域的多學科性、應用方法的多學科性、團隊的多學科性等特點。四是運籌學具有理論和應用相結合的特性,它是一門應用性很強的學科。