Excel Solver:將約束定義為零或大於

Excel Solver:將約束定義為零或大於

我正在創建一個模型來優化採購訂單。

訂購數量必須大於 500 或等於 0。

如何在 Solver 中定義這樣的約束?

我嘗試了二元約束,也嘗試了幾個不同的公式,但似乎沒有任何效果。

基本上我需要能夠OR在 Solver 中表達,我該怎麼做?

編輯:在以下連結中您可能會看到我正在使用的 Excel 檔案: 點這裡

答案1

那麼0是允許的,1是不允許的,499是不允許的,501是允許的?看起來像是一個不連續的區域。所以這不是一個純粹的最佳化問題,而是一種組合問題。恐怕 Solver 無法處理這個問題。

您應該分別分析兩個用例:

  • 金額為零(固定值,計算簡單);
  • 數量為 500 或更大(在規劃求解中使用限制 >=500 進行最佳化);

然後使用 IF 公式比較這兩種情況。


編輯:

我嘗試按照卡爾的建議使用“二進制”和“整數”約束,但它們不起作用。

  • 建立一個二進位變數 0-1 和一個 >=500 的連續變量,然後使用 IF 複製連續變數或將 0 寫入購買值
  • 建立一個二元變數 0-1 和一個連續變數 >=500,然後計算購買量作為它們的乘積
  • 建立一個 >=499 的整數變量,然後使用 IF 將 499 替換為 0 作為購買值

在所有情況下,結果常常是錯誤的並且取決於初始條件。顯然 Solver 不喜歡這樣的事。

然後我考慮將我的上述建議應用於所有六個購買值,並獨立優化它們,例如,透過優化所有月份的成本總和。但事實證明它們並不是獨立的:期初庫存取決於上個月,而一個月的最優採購取決於上個月是否進行了採購。所以不可能為每個月添加一個簡單的 IF。

我能做的最好的事情如下。

我新增了一個二元變數 0-1 和一個連續變數 >=500,並使用 IF 計算了每個月的購買量。但我使用求解器僅優化了連續變數。二進制變數是一個參數。也就是說,我們選擇進行購買的月份,然後使用規劃解算器計算這些購買的價值,然後記下最終的總成本。

對於購買和非購買的所有組合都應重複此操作。這些組合的數量為2 6 =64。但實際上,如果你在一月不購買任何東西,你最終會得到負的期末庫存,這是不允許的。所以只有 32 種有效組合。我添加了公式來計算組合索引的二進位值,迭代索引 32 次,每次手動啟動求解器,並為每個組合「僅作為值」複製結果。

結果是最低成本為 4 625,00 €,有兩種組合可以達到該值。

這是上傳到 Google Docs 的文件,以及 Solver 螢幕截圖。

手動多次啟動 Solver 很乏味,我相信它可以使用巨集自動化。

答案2

透過新增一個限制條件來建立一個二元變量,該限製表明該變數的值(在目標函數中)是二元的。目標函數中該變數的係數必須為 0。

-500B+X>=0(永遠不要低於 500)

-MB+X<=0(B為0時與先前的約束力結合強制為0)

B= 二元變數1

M=非常大的正數(大於X)

X=連續變數

[編輯]

我知道你想做這樣的事情(我還在你的表格文件中做了一些更改,但我無法分享我在這裡處理的 Excel 文件):

在此輸入影像描述

相關內容