簡體   English   中英

在 Python 矩陣中,考慮到選擇列有成本,如何對每行一次 select 並獲得最低和?

[英]In a Python matrix, how to select each row once and get the lowest sum, considering there is a cost for selecting a column?

在我的真實情況下,我有一個 68*160 的大矩陣。

在這個例子中,讓我們使用一個較小的。 每個數字代表一個成本。

matrix = [[8, 5,      4,    7,   10,    6],
          [8,  None,  4,    12,  None,  2],
          [4,  5,     4,    2,   None,  10],
          [6,  None,  4,    1,   None,  1],
          [2,  5,     None, 3,   2,     10]]

我需要 select 從每一行中准確地提取 1 個值。 不能選擇“無”。

我需要找到成本最低的組合。

困難的部分是,對於選擇的每一列,無論從中選擇了多少項目,都會產生 2 的額外成本。

如果我只是遍歷每一行並獲得最低值,那將行不通。 在此示例中,我將獲得 4、2、2、1、2,但來自 4 個不同的列。 總和將是 11+(4*2)=19

相反,如果我從第 2 列得到 4,4,從第 3 列得到 2,1,3,總和將是 14+(2*2)=18,已經證明直接從每一行中選擇最低值是行不通的。

我嘗試做一個笛卡爾積(矩陣中每個可能的組合)並添加列成本然后進行比較,但這會產生 68^160 個結果,到太陽升起時它不會完成運行。

我還嘗試了一些更復雜的事情,例如遍歷每一列並檢查值,然后根據需要考慮“活動”或“非活動”,但是很難考慮許多列之間的交互。

有什么方法可以優雅地解決我沒有看到的問題嗎?

您可以通過僅考慮最低或低於該最低值的行值加上兩個例如在您的第一行[8, 5, 4, 7, 10, 6]中的行值來迭代所有可能的解決方案,您可以將 4, 5 視為此行的候選,但選擇 6 7 或 8 對 select 來說總是更昂貴。

根據您的數據結構,您可以大大減少計算時間。

此外,與其逐行迭代,不如從只有一個最佳解決方案的那些開始,它們可能會突出顯示要選擇的列並簡化您的問題。

暫無
暫無

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

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