簡體   English   中英

Excel規划求解從數字集的子集中查找目標和

[英]Excel Solver Finding a Target Sum from Subset of Number Set

我想使用規划求解從較大的子集中找到目標總和。 (16個數字的10個數字子集)。 我對規划求解不是很熟悉,我不確定設置約束的最佳方法。

我在集合A,B,C,D,E中有5個類別的數字。這16個集合可能包括這些類別的不同組合,但是目標子集總數具有定義的組成:A,B,B,C, C,C,(B或C),(B或C),D,E

所以我的問題是,如何將這些規則引入規划求解?

其次,我知道Solver提出了1個解決方案,有沒有辦法獲得最接近目標的一系列解決方案? 因此,如果我有一個不能完全產生目標的集合,我會看到3個最接近目標(正負)的解決方案嗎?

謝謝。

TL / DR-這是一種設置問題的方法。 解決一系列“接近”的答案超出了Solver的范圍。 如果您定義了其他搜索條件,則可以使用VBA進行操作。 (編輯-添加了用於定義妝容的設置)

評論

似乎沒有關於“必須從每個類別中選擇一個數字”或“必須從類別X中選擇一個數字”的標准。 相反,您有一堆數字,每個數字都屬於一個類別,但是您想查找提供一定總數的數字組合-然后再調查類別。

初始問題設置

根據您在評論中提供的信息,我整理了以下內容...

在此處輸入圖片說明

A列(類別)和B列(值)是您提供的信息。 C列(選定)僅為0或1。D列(結果)是向下填充的乘積=B2*C2

F2是D列的總和。G2是此總和的目標值(如您所提供的)。 H2是計算=(F2-G2)^2的平方誤差。

這是求解器設置...

在此處輸入圖片說明

  • 設置目標:設置為$H$2計算的平方誤差
  • 收件人:設置為最小值。 您可以選擇Value Of:0,但是如果沒有確切答案,則可能會失敗。
  • 通過更改變量單元格:設置為$C$2:$C$17或列C。
  • 受約束條件的約束:包括$C$2:$C$17 = binary 這會強制將值設為0或1。
  • 選擇一種求解方法:設置為Evolutionary。 GRG Nonlinear有時可以解決此類問題,但所需時間比Evolution更長。

以下是結果-與您報告的結果不同。 當我強制您的結果時,我得到CalcTotal的106.61(也許是某個地方的轉錄錯誤)...

在此處輸入圖片說明

尋找近結果

Solver是優化器,因此它將找到最適合您目標的“答案”。

為了使它為您提供不同的答案,您需要為它提供不同的目標。

例如,您可能想強制使用C1的解決方案,但仍然最接近您的目標。 安裝程序可能看起來像這樣...

在此處輸入圖片說明

...采用這種解決方案...

在此處輸入圖片說明

在該示例中,我從“通過更改變量單元格:”和“受約束對象:”字段中排除了$C$10 完成同一件事的另一種方法是保持原始字段值不變,但是增加$C$10 = 1的附加約束。

或者,作為另一個示例,也許您想要一個從類別B中准確選擇兩個值的解決方案。您可以修改設置以包括從每個類別中選擇的值之和,並添加約束。 這是設置...

在此處輸入圖片說明

...以及相應的結果...

在此處輸入圖片說明

制定算法

如果確定要尋找的解決方案范圍的標准,則可以設置VBA子以循環設置設置求解器,獲取解決方案並存儲“選定列”的結果以供查看。

如果您想繼續前進,建議您查看本網站上提供的其他解決方案,嘗試進行設置,並在遇到問題時提出新的問題。

編輯-錯過了您的條件之一

我錯過了發言的內容-“目標子集總數具有定義的組成:A,B,B,C,C,C,(B或C),(B或C),D,E”

在這種情況下,使用包含每個類別的總和的設置,您可以指定這些約束...

  • $ G $ 4 = 1
  • $ G $ 5 <= 4
  • $ G $ 5> = 2
  • $ G $ 6 <= 5
  • $ G $ 6> = 3
  • $ G $ 7 = 1
  • $ G $ 8 = 1

在第一遍中,它提供了以下結果:A1,B2,B3,C1,C3,C4,C5,C6,D1,E1,總計為106.38。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM