Python線性優化基礎講解

2021-09-19 14:49:20 字數 2376 閱讀 4479

目前,各組織正在利用資料科學和機器學習來解決各種業務問題。為了創造乙個真正的業務影響,如何彌合資料科學管道和業務決策管道之間的差距顯得尤為重要。

資料科學管道的結果往往是資料中的**、模式和洞察(通常沒有任何約束的概念),但僅此一項並不足以讓股東做出決定。資料科學的輸出應該要接入某種商業決策導管;這個導管包含有一些可以模擬商業關鍵方面的限制和決策變數的改善。

例如,如果您正在執行乙個超市鏈—您的資料科學管道將會**預期的銷售額。然後,您將接受這些輸入的資料並建立乙個優化的庫存方式或銷售策略。

在優化技術中,採用單純形法進行線性優化是最有效的方法之一,也被評為二十世紀十大種演算法之一。作為資料科學從業者,在實現線性優化方面有實際的知識是很重要的,這篇博文是用python的pulp包裝來說明它的實現。

為了使事情變得有趣並容易理解,我們會通過將它應用於實際的日常問題來學習這種優化技術。與此同時,我們學到的東西也適用於各種商業問題。

ted是乙個致力於傳播思想的非營利組織。ted於2023年成立,以會議的形式融合了技術、娛樂和設計等方面的知識;到了今天,ted幾乎涵蓋了100多種語言中以及近乎所有主題—從科學到商業再到全球問題。ted演講是由擁有豐富的資訊並熱愛其所在領域的專家們所提供的。

現在,別忘了這個部落格文章的目的,想象一下這種情況:你想建立乙個根據不同條件下的(可以**的時間以及演講的數量等)ted會談最受歡迎的**列表。我們來看看如何通過python程式來幫助我們以最佳的方式建立**列表。

本文的**可以在這裡找到。我的jupyter的截圖如下所示:

pulp是在python下的一款免費開源軟體。它可以將優化問題描述為數學模型。pulp也可以呼叫許多外部的lp求解程式(例如cbc,glpk,cplex,gurobi等)來解決這個模型,然後使用python命令來操作和顯示解決方案。預設情況下,coinmp求解程式是與pulp**在一起的。

從定義lp物件開始;問題變數的建立是為了控制問題制定。

步驟3.1:建立決策變數

遍歷資料框架的每一行以建立決策變數,以便每個講演都成為乙個決策變數。因為每個講演都可以被選擇或者不被選擇為最後的**名單的一部分,決策變數本質上是二進位制的(1=選定,0=未選定)

步驟3.2:定義目標函式

目標函式是每個講演**量的所有行的總和。這些**量作為講演的受歡迎度的代表,因此在本質上我們試圖通過選擇適當的談話(決策變數)來最大化**量(受歡迎度)

步驟3.3:定義約束

在這個問題上,我們有兩個約束:

a)我們只有固定的總時間,這些時間可以被分配來**會談

b)我們不希望**超過一定數量的會談,以避免資訊超載

步驟3.4:最終格式(對於問題的制定)

所制定問題的最終格式會被寫出到乙個.lp檔案中。這將列出目標函式、決策變數以及對問題施加的約束。

步驟3.5:實際優化

實際優化就是一行叫做"prob.solve"的**。插入一句說明語句以確定是否為該問題獲得了最佳結果。

表明特定的、被選上以最大化輸出的決策變數(講演)的優化結果,必須轉換成**列表的格式,如下所示:

每一位資料科學從業者都需要將"優化技術"新增到他們的知識體系中,這樣他們就可以使用高階的分析方式來解決現實世界中的業務問題。這篇文章旨在幫助您朝著這個方向邁出第一步。

數論基礎 線性篩 小小講解

思想 眾所周知,唯一分解定理 n p1 c1 p2 c2 p3 c3 pm cm。於是每個合數都能用若干個素數相乘表示。而素數只有乙個素數因數。只要乙個數存在不等於自身的素數因數,就必定是合數,反之,為素數。思路 我們可以將每個數 包括素數合數 向外擴充套件一次 用乙個素數 該數 只要經拓展就必定有...

Python 基礎講解(1)

使用一門語言,你首先得獲得與它互動方式,這是學習一門語言的開始。python語言基礎用法中,使用print 和input 進行輸出與資料讀入。1 字串及數值的輸出 字串即數值可以直接輸出 print 1 1 print hello world hello world2 變數的輸出 無論什麼型別,數值...

線性基講解

1 線性基 若干數的線性基是一組數a1 a2,a na1,a2,an 其中axax 的最高位的11 在第xx位。通過線性基中元素xo rxor 出的數的值域與原來的數xo rxor 出數的值域相同。2 線性基的構造法 對每乙個數pp 從高位到低位掃,掃到第xx 位為11時,若ax ax不存在,則ax...