[英]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
計算的平方誤差 $C$2:$C$17
或列C。 $C$2:$C$17 = binary
。 這會強制將值設為0或1。 以下是結果-與您報告的結果不同。 當我強制您的結果時,我得到CalcTotal的106.61(也許是某個地方的轉錄錯誤)...
尋找近結果
Solver是優化器,因此它將找到最適合您目標的“答案”。
為了使它為您提供不同的答案,您需要為它提供不同的目標。
例如,您可能想強制使用C1的解決方案,但仍然最接近您的目標。 安裝程序可能看起來像這樣...
...采用這種解決方案...
在該示例中,我從“通過更改變量單元格:”和“受約束對象:”字段中排除了$C$10
。 完成同一件事的另一種方法是保持原始字段值不變,但是增加$C$10 = 1
的附加約束。
或者,作為另一個示例,也許您想要一個從類別B中准確選擇兩個值的解決方案。您可以修改設置以包括從每個類別中選擇的值之和,並添加約束。 這是設置...
...以及相應的結果...
制定算法
如果確定要尋找的解決方案范圍的標准,則可以設置VBA子以循環設置設置求解器,獲取解決方案並存儲“選定列”的結果以供查看。
如果您想繼續前進,建議您查看本網站上提供的其他解決方案,嘗試進行設置,並在遇到問題時提出新的問題。
編輯-錯過了您的條件之一
我錯過了發言的內容-“目標子集總數具有定義的組成:A,B,B,C,C,C,(B或C),(B或C),D,E”
在這種情況下,使用包含每個類別的總和的設置,您可以指定這些約束...
在第一遍中,它提供了以下結果:A1,B2,B3,C1,C3,C4,C5,C6,D1,E1,總計為106.38。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.