簡體   English   中英

具有非相鄰單元格約束的Excel解算器?

[英]Excel Solver with non-adjacent cell constraint?

我是Excel求解器的新手,只是在拿起數據科學書后才了解它。 我想更熟悉這個工具,所以我一直在努力解決不同的問題。 雖然我被困在一個,我甚至不確定是否可以使用求解器? 基本上,我需要檢查的約束是兩個單元是否相鄰。

我的問題:我有一堆包含不同數量的彈珠的袋子。 我想通過挑選袋子來最大化我獲得的彈珠數量,但它們不能彼此相鄰。

這就是我在電子表格中的內容:

  • 價值=袋子里的彈珠數量
  • 選擇=是否選擇包(二進制)
  • 袋子2的袋子1 - (選擇*袋號)的違規=(選擇*袋號)

如果我拿起兩個相鄰的行李,違規將= -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 |   |             |
+------------+----+----+----+---+---+-------------+

我嘗試過一些約束的組合:

  • 在選擇行上放置二元約束
  • 違規> = 0且違規<= - 2
  • 總目標值<=總可能值(150)

我為自己解決了這個問題。 這甚至可行嗎?

是的,問題很明顯。

我會建議一種不同的方式來制定鄰接約束。 特別是,我會使用以下內容:

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都是01

這是我的電子表格布局

在此輸入圖像描述

請注意,最好使用不同的顏色來區分變量(綠色),約束(紅色)和數據(藍色)。 我還用綠色字體標記目標單元格。

以下是公式

在此輸入圖像描述

以下是求解器模型

在此輸入圖像描述

方案

在此輸入圖像描述

請注意,矩陣完全是單模的這一事實可以保證最優解具有二進制值。 一般情況下,這不是真的,我們需要將變量定義為二進制並求助於分支和綁定

我希望這有幫助。 快樂的造型!

暫無
暫無

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

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