演算法 Pulp 優化的過程(一)

2021-08-18 08:01:47 字數 1946 閱讀 5345

解決乙個優化問題不是乙個線性過程,但是這個過程可以分解成五個一般步驟:

1、問題描述

2、制定的數學程式

3、解決數學程式

4、執行一些post-optimal分析

5、提供解決方案和分析

然而,在這個過程中經常會出現「反饋迴圈」。例如,在制定和解決優化問題之後,您通常會想要考慮您的解決方案的有效性(經常與提供問題描述的人員進行協商)。如果你的解決方案是無效的,你可能需要修改或更新你的方法,以結合你對實際問題的新理解。這個過程在操作研究方法圖中顯示。

建模過程從乙個定義良好的模型描述開始,然後使用數學來制定乙個數學程式。接下來,建模師將數學程式輸入到一些解決程式軟體中如excel並解出模型。最後,這個解決方案被轉換成乙個關於原始模型描述的決策。

通過使用python,您可以通過建模過程獲得「快捷方式」。通過在python中編寫數學程式,你已經把它變成了一種形式,它可以很容易地使用建模者來呼叫許多解決者,例如,cplex,coin,gurobi,這樣你就不需要將數學程式輸入到求解程式軟體中。但是,您通常不會將任何「硬」數字放入您的公式中,而是使用資料檔案「填充」您的模型,因此在建立適當的資料檔案時需要做一些工作。使用資料檔案的優點是,相同的模型可能多次使用不同的資料集。

建模過程是對優化過程的「簡潔而整潔」的簡化。讓我們更詳細地考慮優化過程的五個步驟:

這一步驟的目的是提出乙個正式的、成熟的模型描述。通常,您會啟動乙個優化專案,對問題和一些資料進行抽象描述。通常你需要花些時間與提供問題的人交談(通常被稱為客戶)。通過與客戶交談並考慮可用的資料,您可以得出您習慣使用的更加成熟的模型描述。有時不是所有的資料都是相關的,或者你需要詢問客戶是否可以提供其他的資料。有時,可用資料的侷限性可能會顯著地改變您的模型描述和隨後的公式。

在這一步中,我們確定了關鍵的可量化的決策、限制和目標,並在乙個數學模型中捕獲它們的相互依賴關係。我們可以將制定過程分解成4個關鍵步驟:

1、確定那些特別關注單元的決策變數(例如:我們需要決定每個程序將執行多少個小時)。

2、利用決策變數來確定目標函式,我們可以構造乙個最小化或最大化目標函式。目標函式通常反映決策變數給定值的總成本或總利潤。

3、用邏輯(例如,我們不能在幾個小時內工作),或者明確的問題描述來制定約束。同樣,約束條件是用決策變數表示的。

4、確定目標函式和約束所需的資料。為了解決你的數學問題,你需要在你的目標函式和/或約束條件下有一些「硬數值」作為變數和/或變數係數。

對於相對簡單或易於理解的問題,數學模型通常可以被用於最優性(即:最好的解決方案是確定的)。這是通過諸如修改的單純形法或內部點方法等演算法完成的。然而,許多任務業問題用這些技術解決最優性問題需要很長時間,因此而用啟發式方法解決問題,但啟發式方法並不能保證最優性。

通常在問題描述中存在不確定性(要麼是提供了資料的準確性,要麼是未來資料的值(s)。在這種情況下,我們的解決方案的健壯性可以通過執行後優化分析來檢驗。這涉及到確定最佳解決方案是如何在各種變化的情況下發生變化的(例如,乙個給定的成本增加,或者乙個特定的機器失敗的結果是什麼?)。這種分析也可以用於制定戰術或戰略決策(例如,如果我們投資於開設另一家工廠,這會對我們的收入產生什麼影響?)。

這個步驟(以及下乙個)的另乙個重要的考慮是驗證數學程式的解決方案。您應該仔細考慮解決方案的變數值在原始問題描述中的意義。確保它們對你有意義,更重要的是,你的客戶(這就是為什麼下一步,提出解決方案和分析是重要的)。

優化過程中的乙個關鍵步驟是表示解決方案和任何後優化分析。將數學程式的解譯為簡明易懂的摘要和從問題描述轉化為數學程式一樣重要。通過優化生成的關鍵觀察和決策必須以一種易於理解的方式呈現給客戶或專案涉眾。

您的演示是實現由您的數學程式生成的決策的關鍵的第一步。如果決策及其結果(通常由數學程式約束決定)不清楚且智慧型地呈現,那麼您的最佳決策將永遠不會被使用。

這一步也是你在未來建議其他工作的機會。這可能包括:

1、定期監測你的數學程式的有效性;

2、進一步分析您的解決方案,為您的客戶尋找其他的好處;

3、識別未來的優化機會。

PulP線性優化(一)優化過程

本文根據pulp文件翻譯而來,原文請參考 解決優化問題不是乙個線性過程,但過程可分為五個一般步驟 但是,在此過程中通常存在 反饋迴圈 例如,在制定和解決優化問題之後,您通常需要考慮解決方案的有效性 通常諮詢提供問題描述的人員 如果您的解決方案無效,您可能需要更改或更新您的配方,以包含您對實際問題的新...

演算法 Pulp 優化的概念(二)

最簡單的數學程式是乙個線性程式。為了讓你的數學程式成為乙個線性程式,你需要以下條件 1 決策變數必須是實數變數 2 目標必須是乙個線性表示式 3 約束必須是線性表示式。線性表示式是以下形式的表示式 i ai和 b b 是已知的常數,xi role presentation style positio...

PHP去重演算法的優化過程

最近公司在做乙個專案,需要對爬取到的資料進行去重,方法就是根據資料的id,去除掉id重複的資料。下面是這個方法的演化過程。去重 arr id array letvfeedlist array for i 0 i count arrfeedlist i 從上面的演算法中可以看到,上面的演算法用了兩個陣...