主要内容

matchpairs

求解线性分配问题

描述

例子

= matchpairs (成本costUnmatched解决了线性分配问题对于矩阵的行和列成本.以总代价最小的方式将每行分配给一列。costUnmatched指定不为每一行分配数据的每行成本,以及不为每列分配数据的每列成本。

你的加州大学= matchpairs(成本costUnmatched另外返回中不匹配行的索引你的中不匹配列的索引加州大学

例子

___= matchpairs(成本costUnmatched目标使用以前语法中的任何输出参数组合指定优化目标。目标可以“最小值”“马克斯”使总成本最小化或最大化。

例子

全部折叠

将销售人员分配到航班上,这样总运输成本就会降到最低。

一家公司有四名销售人员,他们需要到全国各地的主要城市出差。该公司必须为他们预订机票,并希望尽可能少地花钱。这些销售人员分布在全国不同的地区,因此他们飞往每个城市的成本各不相同。

这个表格显示了每个销售人员飞往每个主要城市的费用。

达拉斯 芝加哥 纽约 城市 圣。 路易 弗雷德 6 0 0 6 7 0 9 6 0 5 6 0 贝丝 9 0 0 2 8 0 9 7 0 5 4 0 3. 1 0 3. 5 0 9 5 0 8 2 0 格雷格 3. 2 5 2 9 0 6 0 0 5 4 0

每个城市都代表一个销售机会。如果错过了一个城市,那么公司就会损失平均2000美元的收入。

创建一个成本矩阵来表示每个销售人员飞往每个城市的成本。

C = [600 670 960 560 900 280 970 540 310 350 950 820 325 290 600 540];

使用matchpairs以最低成本将销售人员分配到各个城市。将取消赋值的代价指定为1000,因为如果一行和列仍然不匹配,取消赋值的代价将计算两次。

M = matchpairs(C,1000)
M =4×23 1 2 2 4 3 1 4

matchpairs计算让销售人员到每个城市的最便宜的方式。

达拉斯 芝加哥 纽约 城市 圣。 路易 弗雷德 6 0 0 6 7 0 9 6 0 560 贝丝 9 0 0 280 9 7 0 5 4 0 310 3. 5 0 9 5 0 8 2 0 格雷格 3. 2 5 2 9 0 600 5 4 0

当成本矩阵中的列比行多时,将行与列相匹配。

创建一个3 × 8的成本矩阵。因为你只有三行,matchpairs最多可以与八个列产生三个匹配。

rng默认的再现率%C = randi([10 100], 3,8)
C =3×884 93 35 97 97 22 82 13 92 67 59 24 54 48 97 87 21 18 97 98 82 93 69 94

使用matchpairs匹配成本矩阵的行和列。要获得最大匹配数,请使用较大的取消分配代价(相对于代价矩阵中条目的大小)。指定三个输出以返回不匹配的行和列的索引。

[M,uR,uC] = matchpairs(C,1e4)
M =3×23 2 2 4 1 8
uR = 0x1空双列向量
加州大学=5×11 3 5 6 7

其中五列C不与任何行匹配。

将出租车分配到利润最大化的路线上。

一家出租车公司接到了来自全市的几次乘车请求。该公司希望以一种最赚钱的方式来调度有限的出租车。

此表显示了每五次乘车请求的估计出租车费用。5个乘车请求中只有3个可以完成。

1 2 3. 4 5 出租车 一个 5 7 0 6 3. 0 3. 1 0 4 8 0 3. 5 0 出租车 B 5 8 0 6 4 0 3. 3. 0 4 7 0 3. 2 0 出租车 C 5 7 0 6 3. 0 3. 2 0 4 9 0 3. 4 0

创建一个利润矩阵来表示每次出租车的利润。

P = [5.7 6.3 3.1 4.8 3.5 5.8 6.4 3.3 4.7 3.2 5.7 6.3 3.2 4.9 3.4];

使用matchpairs让出租车与最赚钱的服务相匹配。指定三个输出以返回任何不匹配的行和列“马克斯”选择最大化利润。将取消分配的成本指定为零,因为公司不会从未坐满的出租车或乘车请求中赚钱。

costUnmatched = 0;[M,uR,uC] = matchpairs(P,costUnmatched,“马克斯”
M =3×21 1 2 2 3 4
uR = 0x1空双列向量
加州大学=2×13个5

matchpairs计算出最赚钱的行程。该解决方案使乘坐请求3和5未填充。

1 2 3. 4 5 出租车 一个 5 7 0 6 3. 0 3. 1 0 4 8 0 3. 5 0 出租车 B 5 8 0 6 4 0 3. 3. 0 4 7 0 3. 2 0 出租车 C 5 7 0 6 3. 0 3. 2 0 4 9 0 3. 4 0

计算计算出的解决方案的总利润。自costUnmatched是零,你只需要把每一场比赛的利润加在一起。

TotalProfits =总和(P (sub2ind(大小(P), M (: 1), M (:, 2))))
总利润= 17

使用matchpairs通过最小化距离的总变化来跟踪几个点的运动。

在时间点上画一个网格 t 0 在绿色。在时间 t 1 ,其中一些点在随机方向上有少量移动。

[x,y] = meshgrid(4:6:16);X0 = x(:)';Y0 = y(:)';情节(x0, y0,“g *”)举行rng默认的再现率%X1 = x0 + randn(size(x0));Y1 = y0 + randn(size(y0));情节(x1, y1,的r *

图中包含一个轴对象。axis对象包含2个line类型的对象。

使用matchpairs来匹配点 t 0 点在 t 1 .要做到这一点,首先计算一个成本矩阵C (i, j)到点的欧氏距离是多少对点j

C = 0(大小(x).^2);k = 1:length(y1) C(k,:) = vecnorm([x1(k)-x0;日元(k) y0) 2 1)”;结束C
C =9×92.8211 3.2750 9.2462 6.1243 6.3461 10.7257 11.7922 11.9089 4.9987 2.2771 7.5752 6.2434 4.3794 8.4485 11.1792 10.2553 12.5447 15.2037 9.3130 3.7833 17.1539 12.2408 8.7988 20.7211 16.8803 7.5783 6.9004 8.6551 13.1987 1.1267 5.3446 11.3075 5.1888 7.3633 12.3901 8.6703 8.3173 5.6816 8.3089 13.5530 8.1918 4.7464 12.7818 6.8409 1.4903 8.6652 9.9242 7.3426 11.5682 13.1257 16.8150 5.5702 8.4144 13.4796 6.2201 12.2127 13.6699 12.3432 13.7784 8.64616.3438 8.8167 5.8858 0.3644 6.1337 20.6072 17.2853 15.6495 16.5444 12.1590 9.6935 13.9562 8.3006 3.8761

下一步,使用matchpairs匹配成本矩阵中的行和列。将取消分配的代价指定为1。相对于成本矩阵中的条目,取消分配的成本如此之低,很可能matchpairs会留下一些无法比拟的分数。

M = matchpairs(C,1)
M =5×24 4 5 5 6 6 7 7 8 8

的值米(:,2)与原点对应 x 0 y 0 ,而价值观M (: 1)对应于被移动的点 x 1 y 1

画出匹配的点对。移动得更远的点2 * costUnmatched远离原点依然无人能敌。

xc = [x0(M(:,2));x1 (M (: 1)));yc = [y0(M(:,2));日元(M (: 1)));情节(xc、yc“o”

图中包含一个轴对象。axis对象包含7个line类型的对象。

输入参数

全部折叠

成本矩阵。每个条目成本(i, j)指定分配行的代价对列j

数据类型:|

不匹配的代价,指定为标量。matchpairs比较的值2 * costUnmatched成本以确定保持不匹配的行或列哪个更有利。使用此参数可以在算法中增加或减少匹配的可能性。有关更多信息,请参见线性分配问题

例子:M = matchpairs(C,10)属性的行或列不匹配时指定代价10C

数据类型:|

优化目标,指定为任意一个“最小值”“马克斯”.优化目标指定了总成本是最小化还是最大化。

例子:M = matchpairs(Cost,costUnmatched,'max')的行和列成本应该匹配在一起,以最大限度地提高总成本。

输出参数

全部折叠

匹配,作为矩阵返回。是一个p——- - - - - -2矩阵,M (i, 1)而且M (i, 2)是代价矩阵中匹配对的行索引和列索引。一排排的按升序对第二列进行排序。

  • 每一行和每列只能匹配一个时间,所以每M (i, 1)价值和每一个M (i, 2)价值是唯一的。

  • 包含p匹配,p是否小于或等于最大匹配数min(大小(成本))

  • 匹配的成本总和([成本(M (1, 1), M(1、2)、成本(M(2, 1),(2, 2)),…、成本(M (p, 1), M (p, 2))))

未赋值的行,作为索引的列向量返回。中的条目你的指示在成本未赋值的。每一项你的而且加州大学有助于解决方案的总成本根据costUnassigned

未赋值的列,作为索引的列向量返回。中的条目加州大学指出在成本未赋值的。每一项你的而且加州大学有助于解决方案的总成本根据costUnassigned

更多关于

全部折叠

线性分配问题

线性分配问题是一种将行分配给列的方法,以便将每行分配给一列,并且使分配的总代价最小化(或最大化)。将每行分配给每列的代价在成本矩阵.条目成本(i, j)是分配行的代价吗对列j

转让成本为任何不匹配的行或列分配代价。这种做法允许不分配所有行或列的最低成本解决方案。金宝搏官方网站如果行和列不匹配,则会增加总开销2 * costUnmatched

解决方案的总成本是所有匹配对的代价加上所有未匹配对的代价的总和:

T C 1 p 成本 1 2 + costUnmatched + n 2 p

在代码中,总成本是

CostAssigned =(成本总和(sub2ind(大小(成本),M (: 1), M (:, 2))));CostUnassigned = costUnmatched*(sum(size(Cost)))-2*size(M,1));TotalCost = CostAssigned + CostUnassigned;

  • 成本是一个——- - - - - -n矩阵。

  • 是一个p——- - - - - -2矩阵,M (i, 1)而且M (i, 2)是匹配对的行和列。

  • (m + 2 * p)总数是多少无与伦比的行和列。

参考文献

达夫,I.S.和J.科斯特。《关于将大条目排列到稀疏矩阵对角线的算法》SIAM J.矩阵肛门。和达成。22(4), 2001年。页973 - 996。

扩展功能

版本历史

在R2019a中引入

另请参阅

||