當前位置:首頁 » 編程語言 » python規劃

python規劃

發布時間: 2025-07-09 18:30:49

1. python之動態規劃演算法

動態規劃演算法中是將復雜問題遞歸分解為子問題,通過解決這皮拆些子問題來解決復雜問題。與遞歸演算法相比,動態編程減少了堆棧的使用,避免了重復的計算,效率得到顯著提升。

先來看一個簡單的例子,斐波那契數列.

斐波那契數列的定義如下。

斐波那契數列可以很容易地用遞歸演算法實現:

上述代碼,隨燃旁棗著n的增加,計算量呈指數級增長,演算法的時間復雜度是 。

採用動態規劃演算法,通過自下而上的計算數列的值,可以使演算法復雜度減小到 ,代碼如下。

下面我們再看一個復雜一些的例子。

這是小學奧數常見的硬幣問題: 已知有1分,2分,5分三種硬幣數量不限,用這些硬幣湊成為n分錢,那麼一共有多少種組合方法。

我們將硬幣的種類用列表 coins 定義;
將問題定義為一個二維數組 dp,dp[amt][j] 是使用 coins 中前 j+1 種硬幣( coins[0:j+1] )湊成總價amt的組合數。

例如: coins = [1,2,5]

dp[5][1] 就是使用前兩種硬幣 [1,2] 湊成總和為5的組合數。

對於所有的 dp[0][j] 來說,湊成總價為0的情況只有一種,就是所有的硬幣數量都為0。所以對於在有效范圍內任意的j,都有 dp[0][j] 為1。

對於 dp[amt][j] 的計算,也就是使用 coins[0:j+1] 硬幣總價amt的組合數,包含兩種情況計算:

1.當使用第j個硬幣時,有 dp[amt-coins[j]][j] 種情況,即amt減去第j個硬幣幣值,使用前j+1種硬幣的組合數;

2.當不使用第j個硬幣時,有 dp[amt][j-1] 種情況,即使用前j種硬幣湊成amt的組合數;

所以: dp[amt][j] = dp[amt - coins[j]][j]+dp[amt][j-1]

我們最終得到的結果是:dp[amount][-1]

上述分析省略了一些邊界情況。

有了上述的分析,代碼實現就比較簡單了。

動態規劃演算法代碼簡潔,執行效率高。但是與遞歸演算法相比,需要仔細考慮如何分解問題,動態規劃代碼與遞歸調用相比,較難理解。

我把遞歸演算法啟瞎實現的代碼也附在下面。有興趣的朋友可以比較一下兩種演算法的時間復雜度有多大差別。

上述代碼在Python 3.7運行通過。

2. gurobi 高效數學規劃引擎 | python3 配置、使用及建模實例

本文源自github文章 wurmen/Gurobi-Python,並在此基礎上進行衍生擴展。獨立第三方優化器評估報告顯示,Gurobi以卓越的性能躋身大規模優化器新領袖地位,成為性價比最為優秀的企業大規模優化器首選。Gurobi是由美國Gurobi Optimization公司開發的新一代大規模優化器。無論在生產製造領域,還是在金融、保險、交通、服務等其他各種領域,當實際問題越來越復雜、問題規模越來越龐大的時候,我們需要一個經過證明可以信賴的大規模優化工具,為我們的決策提供質量保證,為我們增強信心。在理論和實踐中,Gurobi優化工具都被證明是全球性能領先的大規模優化器,具有突出的性價比,可以為客戶在開發和實施中極大降低成本。

Gurobi可以解決的數學問題包括:線性問題、二次型目標問題、混合整數線性和二次型問題等幾乎能解決lingo能解決的問題。

獲取Gurobi:
- 登陸官網:gurobi.com/index
- 注冊帳號,後續會收到驗證郵箱,點擊郵箱連接激活賬號即可。
- 安裝Gurobi與申請License:
- 進入下載中心,下載Gurobi引擎,申請學術許可證。
- 驗證License:win下在Win + R鍵輸入License進行驗證,mac下在終端中輸入相同命令,黑蘋果因網卡問題,不能通過驗證。
- 安裝Gurobi模塊:安裝Anaconda3,並正確配置conda環境後,在cmd中輸入相關指令添加Gurobi地址、安裝模塊。

快速入門:
- 若讀者有較好的python迭代器、生成器習慣,在編寫程序時能大大簡化。
- 利用Python+Gurobi建立數學規劃模型通常按順序進行:設置變數、更新變數空間、設置目標函數、設置約束條件、執行最優化。
- 輔助函數包括列表推導式/列表解析式、quicksum()、multidict()、tuplelist()、prod()和sum()下標聚合等。
- 添加決策變數使用Model.addVar()和Model.addVars()方法,添加目標函數使用Model.setObjective()和Model.setObjectiveN()方法,添加約束條件使用Model.addConstr()和Model.addConstrs()方法。
- 執行最優化使用Model.optimize()方法。

案例:
- 一般線性規劃問題:[公式]
- 利用整數線性規劃最優化員工工作表:[公式]
- 非平衡指派問題:[公式]
- LP問題與靈敏度分析:[公式]
- 解數獨:決策變數[公式],約束條件[公式]等。
- 求解 CCR-DEA問題:[公式]
- 其他案例:[公式]

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712