matchpairs
求解线性分配问题
语法
描述
解决了线性分配问题对于矩阵的行和列米
= matchpairs (成本
,costUnmatched
)成本
.以总代价最小的方式将每行分配给一列。costUnmatched
指定不为每一行分配数据的每行成本,以及不为每列分配数据的每列成本。
[
另外返回中不匹配行的索引米
,你的
,加州大学
= matchpairs(成本
,costUnmatched
)你的
中不匹配列的索引加州大学
.
[___= matchpairs(
使用以前语法中的任何输出参数组合指定优化目标。成本
,costUnmatched
,目标
)目标
可以“最小值”
或“马克斯”
使总成本最小化或最大化。
例子
以最低的成本安排航班
将销售人员分配到航班上,这样总运输成本就会降到最低。
一家公司有四名销售人员,他们需要到全国各地的主要城市出差。该公司必须为他们预订机票,并希望尽可能少地花钱。这些销售人员分布在全国不同的地区,因此他们飞往每个城市的成本各不相同。
这个表格显示了每个销售人员飞往每个主要城市的费用。
每个城市都代表一个销售机会。如果错过了一个城市,那么公司就会损失平均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
计算让销售人员到每个城市的最便宜的方式。
行数和列数不相等
当成本矩阵中的列比行多时,将行与列相匹配。
创建一个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个可以完成。
创建一个利润矩阵来表示每次出租车的利润。
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未填充。
计算计算出的解决方案的总利润。自costUnmatched
是零,你只需要把每一场比赛的利润加在一起。
TotalProfits =总和(P (sub2ind(大小(P), M (: 1), M (:, 2))))
总利润= 17
随时间跟踪点位置
使用matchpairs
通过最小化距离的总变化来跟踪几个点的运动。
在时间点上画一个网格 在绿色。在时间 ,其中一些点在随机方向上有少量移动。
[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 *)
使用matchpairs
来匹配点
点在
.要做到这一点,首先计算一个成本矩阵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)
与原点对应
,而价值观M (: 1)
对应于被移动的点
.
画出匹配的点对。移动得更远的点2 * costUnmatched
远离原点依然无人能敌。
xc = [x0(M(:,2));x1 (M (: 1)));yc = [y0(M(:,2));日元(M (: 1)));情节(xc、yc“o”)
输入参数
成本
- - - - - -成本矩阵
矩阵
成本矩阵。每个条目成本(i, j)
指定分配行的代价我
对列j
.
数据类型:单
|双
目标
- - - - - -优化目标
“最小值”
(默认)|“马克斯”
优化目标,指定为任意一个“最小值”
或“马克斯”
.优化目标指定了总成本是最小化还是最大化。
例子: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
.
解决方案的总成本米
是所有匹配对的代价加上所有未匹配对的代价的总和:
在代码中,总成本是
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。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
使用注意事项和限制:
代码生成不支持此函数的稀疏矩阵输入。金宝app
版本历史
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。金宝app
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。