📜  运输问题组合2(西北角方法)(1)

📅  最后修改于: 2023-12-03 15:28:18.827000             🧑  作者: Mango

运输问题组合2(西北角方法)

简介

运输问题组合2是指,在给定的运输网络中要求将物资从一个供应地运到若干个需求地的过程中,需要找到一种合理的方法,使得总运输成本最低。西北角法是一种简单的运输问题求解方法,它是贪心策略的一种。

在西北角法中,我们将运输网络看作一个矩形表格,将物资的供应地放在矩阵最左侧,需求地放在矩阵最上侧。从左上角开始,我们选择最北边的需求地和最西边的供应地,然后填充它们之间的最大值。如果需求地或供应地被满足,则在矩阵中删除该行或该列,并重复以上步骤,直到所有的需求地和供应地都满足为止。

代码实现

以下是用Python实现的西北角法代码:

def northwest_corner_method(costs, supplies, demands):
    """
    使用西北角法计算运输问题
    :param costs: 各供应地到各需求地的运输成本
    :param supplies: 各供应地可供应的物资量
    :param demands: 各需求地需要的物资量
    :return: 运输方案和总成本
    """
    # 初始化
    m = len(supplies)
    n = len(demands)
    x = [[0] * n for i in range(m)]
    i, j = 0, 0
    total_cost = 0

    # 开始填充矩阵
    while i < m and j < n:
        if supplies[i] < demands[j]:
            x[i][j] = supplies[i]
            demands[j] -= supplies[i]
            total_cost += x[i][j] * costs[i][j]
            i += 1
        else:
            x[i][j] = demands[j]
            supplies[i] -= demands[j]
            total_cost += x[i][j] * costs[i][j]
            j += 1

    return x, total_cost

该代码中,costs为各供应地到各需求地的运输成本矩阵,supplies为各供应地可供应的物资量,demands为各需求地需要的物资量。该函数返回运输方案和总成本。

示例

以下是一个运输问题的例子,其中有3个供应地、4个需求地:

| 运输成本 | 需求地1 | 需求地2 | 需求地3 | 需求地4 | 供应地供应量 | |--------|--------|--------|--------|--------|------------| | 供应地1 | 5 | 7 | 6 | 6 | 8 | | 供应地2 | 3 | 6 | 6 | 5 | 11 | | 供应地3 | 4 | 5 | 7 | 8 | 9 |

我们可以按以下步骤使用西北角法解决该问题:

  1. 选取需求地1和供应地1,填充最大值8。
  2. 由于需求地1已经被满足,因此我们删除第一行。
  3. 选取需求地2和供应地1,填充最大值7。
  4. 由于供应地1的供应量已经为0,因此我们删除第一列。
  5. 选取需求地2和供应地2,填充最大值6。
  6. 由于需求地2已经被满足,因此我们删除第二行。
  7. 选取需求地3和供应地2,填充最大值6。
  8. 由于需求地3已经被满足,因此我们删除第三行。
  9. 选取需求地4和供应地2,填充最大值5。

得到运输方案及总成本为:

| 运输成本 | 需求地1 | 需求地2 | 需求地3 | 需求地4 | |--------|--------|--------|--------|--------| | 供应地1 | 8 | 0 | 0 | 0 | | 供应地2 | 2 | 6 | 0 | 3 | | 供应地3 | 0 | 0 | 7 | 2 |

总成本为:$5\times8+3\times2+6\times6+5\times3+4\times7+5\times2= 125$。

以上就是运输问题组合2(西北角法)的介绍和实现。