[英]Excel Solver with non-adjacent cell constraint?
我是Excel求解器的新手,只是在拿起數據科學書后才了解它。 我想更熟悉這個工具,所以我一直在努力解決不同的問題。 雖然我被困在一個,我甚至不確定是否可以使用求解器? 基本上,我需要檢查的約束是兩個單元是否相鄰。
我的問題:我有一堆包含不同數量的彈珠的袋子。 我想通過挑選袋子來最大化我獲得的彈珠數量,但它們不能彼此相鄰。
這就是我在電子表格中的內容:
如果我拿起兩個相鄰的行李,違規將= -1。
+------------+----+----+----+---+---+-------------+
| Bag Number | 1 | 2 | 3 | 4 | 5 | Total Value |
+------------+----+----+----+---+---+-------------+
| Value | 10 | 20 | 30 | 40| 50| 150|
| Choose | 0 | 0 | 0 | 0 | 0 | 0|
| Violation | 0 | 0 | 0 | 0 | | |
+------------+----+----+----+---+---+-------------+
最佳解決方案
+------------+----+----+----+---+---+-------------+
| Bag Number | 1 | 2 | 3 | 4 | 5 | Total Value |
+------------+----+----+----+---+---+-------------+
| Value | 10 | 20 | 30 | 40| 50| 150|
| Choose | 1 | 0 | 1 | 0 | 1 | 90|
| Violation | 1 | -3 | 3 |-5 | | |
+------------+----+----+----+---+---+-------------+
我嘗試過一些約束的組合:
我為自己解決了這個問題。 這甚至可行嗎?
是的,問題很明顯。
我會建議一種不同的方式來制定鄰接約束。 特別是,我會使用以下內容:
choose_1 + choose_2 <= 1
choose_2 + choose_3 <= 1
choose_3 + choose_4 <= 1
choose_4 + choose_5 <= 1
這些表明可以選擇每對(1,2), (2,3), (3,4)
和(4,5)
中的至多一個。 它的優點是它不使用袋號,袋號通常可以是袋名(即字符串而不是數字)。 它還有另一個好處:我們不需要將變量定義為二進制,而只需將其定義為連續的0到1: 0 <= choose_i <= 1
,對於所有i = 1,...,5
。 這是因為得到的約束矩陣是完全單模 ,這意味着求解二元問題的線性規划松弛給出了一個最優解,其中choose_i
都是0
或1
。
這是我的電子表格布局 :
請注意,最好使用不同的顏色來區分變量(綠色),約束(紅色)和數據(藍色)。 我還用綠色字體標記目標單元格。
以下是公式 :
以下是求解器模型 :
方案 :
請注意,矩陣完全是單模的這一事實可以保證最優解具有二進制值。 一般情況下,這不是真的,我們需要將變量定義為二進制並求助於分支和綁定 。
我希望這有幫助。 快樂的造型!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.