Решение задачи линейного назначения
решает задачу линейного назначения для строк и столбцов матрицы M = matchpairs(Cost,costUnmatched)Cost. Каждая строка назначается столбцу таким образом, чтобы общая стоимость была сведена к минимуму. costUnmatched указывает стоимость за строку, не назначив каждой строке, а также стоимость за столбец, не имея строки, назначенной каждому столбцу.
[ дополнительно возвращает индексы для несопоставленных строк в M,uR,uC] = matchpairs(Cost,costUnmatched)uR и индексы для несопоставленных столбцов в uC.
[___] = matchpairs( задает цель оптимизации с использованием любой из комбинаций выходных аргументов в предыдущих синтаксисах. Cost,costUnmatched,goal)goal может быть 'min' или 'max' для получения совпадений, которые либо минимизируют, либо максимизируют общую стоимость.
Назначьте продавцов рейсам таким образом, чтобы общая стоимость транспортировки была сведена к минимуму.
Компания имеет четырех продавцов, которым нужно путешествовать по ключевым городам страны. Компания должна забронировать свои рейсы, и хочет потратить как можно меньше денег. Эти продавцы базируются в разных частях страны, поэтому стоимость их перелета в каждый город варьируется.
В этой таблице показаны затраты для каждого продавца на перелет в каждый ключевой город.
$325 $290 $600 $540
Каждый город представляет возможность продаж. Если город упущен, то компания теряет в среднем прибыль в размере 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×2
3 1
2 2
4 3
1 4
matchpairs вычисляет наименее дорогостоящий способ получения продавца в каждом городе.
$325 $290 $600 $540
Сопоставьте строки со столбцами, если в матрице затрат имеется гораздо больше столбцов, чем строк.
Создайте матрицу затрат 3 на 8. Так как у вас только три строки, matchpairs может производить не более трех совпадений с восемью столбцами.
rng default % for reproducibility C = randi([10 100], 3, 8)
C = 3×8
84 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×2
3 2
2 4
1 8
uR = 0x1 empty double column vector
uC = 5×1
1
3
5
6
7
Пять столбцов в C не соответствуют ни одной строке.
Назначьте такси маршрутам таким образом, чтобы прибыль была максимизирована.
У таксомоторной компании есть несколько запросов на поездку со всего города. Компания хочет отправить свое ограниченное количество такси таким образом, чтобы заработать больше всего денег.
В этой таблице приведены расчетные тарифы на проезд в такси по каждому из пяти запросов на проезд. Только три из пяти запросов на поездку могут быть заполнены.
Создайте матрицу прибыли для представления прибыли каждой поездки на такси.
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 сопоставить такси с самыми прибыльными аттракционами. Укажите три вывода для возврата всех несопоставленных строк и столбцов, а также 'max' возможность максимизировать прибыль. Укажите нулевую стоимость отмены присвоения, поскольку компания не получает денег от незаполненных такси или заявок на проезд.
costUnmatched = 0;
[M,uR,uC] = matchpairs(P,costUnmatched,'max')M = 3×2
1 1
2 2
3 4
uR = 0x1 empty double column vector
uC = 2×1
3
5
matchpairs вычисляет наиболее выгодные для заполнения аттракционы. Раствор оставляет запросы на езду 3 и 5 незаполненными.
Вычислите общую прибыль для рассчитанного решения. С тех пор costUnmatched равно нулю, нужно только сложить прибыль от каждого матча.
TotalProfits = sum(P(sub2ind(size(P), M(:,1), M(:,2))))
TotalProfits = 17
Использовать matchpairs для отслеживания перемещения нескольких точек путем минимизации общего изменения расстояния.
Постройте сетку точек в момент времени 0 зеленым цветом. В = 1 некоторые точки перемещаются на небольшую величину в случайном направлении.
[x,y] = meshgrid(4:6:16); x0 = x(:)'; y0 = y(:)'; plot(x0,y0,'g*') hold on rng default % for reproducibility x1 = x0 + randn(size(x0)); y1 = y0 + randn(size(y0)); plot(x1,y1,'r*')

Использовать matchpairs для согласования точек в 0 с точками = 1. Для этого сначала вычислите матрицу затрат, гдеC(i,j) - евклидово расстояние от точки i указать j.
C = zeros(size(x).^2); for k = 1:length(y1) C(k,:) = vecnorm([x1(k)-x0; y1(k)-y0],2,1)'; end C
C = 9×9
2.8211 3.2750 9.2462 6.1243 6.3461 10.7257 11.7922 11.9089 14.7169
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 14.5783
6.9004 8.6551 13.1987 1.1267 5.3446 11.3075 5.1888 7.3633 12.3901
8.6703 6.3191 8.7571 5.9455 0.3249 6.0714 8.2173 5.6816 8.3089
13.5530 8.1918 4.7464 12.7818 6.8409 1.4903 14.6652 9.9242 7.3426
11.5682 13.1257 16.8150 5.5702 8.3359 13.4144 0.4796 6.2201 12.2127
13.6699 12.3432 13.7784 8.6461 6.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×2
4 4
5 5
6 6
7 7
8 8
Ценности M(:,2) соответствуют исходным точкам ), в то время как значенияM(:,1) соответствуют перемещенным точкам ).
Постройте график совпадающих пар точек. Точки, которые двигались дальше, чем 2*costUnmatched в стороне от исходной точки остаются несопоставимыми.
xc = [x0(M(:,2)); x1(M(:,1))];
yc = [y0(M(:,2)); y1(M(:,1))];
plot(xc,yc,'-o')
Cost - Матрица затратМатрица затрат. Каждая запись Cost(i,j) указывает стоимость назначения строки i к колонке j.
Типы данных: single | double
costUnmatched - Стоимость несоответствияСтоимость несоответствия, указанная как скаляр. matchpairs сравнивает значение 2*costUnmatched к записям в Cost чтобы определить, является ли более выгодным, чтобы строка или столбец оставались несопоставимыми. Используйте этот параметр, чтобы сделать совпадения более или менее вероятными в алгоритме. Дополнительные сведения см. в разделе Проблема линейного назначения.
Пример: M = matchpairs(C,10) указывает стоимость 10 за несоответствие строки или столбца C.
Типы данных: single | double
goal - Цель оптимизации'min' (по умолчанию) | 'max'Цель оптимизации, указанная как 'min' или 'max'. Цель оптимизации определяет, должны ли общие затраты быть минимизированы или максимизированы.
Пример: M = matchpairs(Cost,costUnmatched,'max') указывает, что строки и столбцы Cost должны сочетаться друг с другом для максимизации общих затрат.
M - СпичкиСовпадения, возвращенные в виде матрицы. M является pоколо-2 матрица, где M(i,1) и M(i,2) - индексы строки и столбца совпадающей пары в матрице затрат. Строки M сортируются со вторым столбцом в порядке возрастания.
Каждая строка и столбец могут быть сопоставлены только один раз, поэтому каждый M(i,1) значение и каждое M(i,2) значение уникально.
M содержит p совпадения, и p меньше или равно максимальному количеству совпадений min(size(Cost)).
Стоимость матчей в M является sum([Cost(M(1,1),M(1,2)), Cost(M(2,1),M(2,2)), ..., Cost(M(p,1),M(p,2))]).
uR - Неназначенные строкиНеназначенные строки, возвращаемые в виде вектора столбцов индексов. Записи в uR указать, какие строки в Cost не назначены. Каждая запись в uR и uC вносит вклад в общую стоимость решения в соответствии с costUnassigned.
uC - Неназначенные столбцыНеназначенные столбцы, возвращаемые как вектор столбцов индексов. Записи в uC указать, какие столбцы в Cost не назначены. Каждая запись в uR и uC вносит вклад в общую стоимость решения в соответствии с costUnassigned.
Проблема линейного назначения - это способ назначения строк столбцам таким образом, что каждая строка назначается столбцу и общая стоимость назначений минимизируется (или максимизируется). Стоимость назначения каждой строки каждому столбцу фиксируется в матрице затрат. Вход Cost(i,j) - стоимость присвоения строки i к колонке j.
Стоимость отмены присвоения присваивает стоимость любой строке или столбцу, которые не сопоставлены. Эта практика позволяет использовать решения с минимальными затратами, которые не назначают все строки или столбцы. Если строка и столбец не сопоставлены, это увеличивает общую стоимость на 2*costUnmatched.
Общая стоимость решения M - сумма стоимости всех сопоставленных пар, добавленная к стоимости всех несопоставленных пар:
(m + n − 2p)
В коде общая стоимость составляет
CostAssigned = sum(Cost(sub2ind(size(Cost), M(:,1), M(:,2)))); CostUnassigned = costUnmatched*(sum(size(Cost))-2*size(M,1)); TotalCost = CostAssigned + CostUnassigned;
Cost является mоколо-n матрица.
M является pоколо-2 матрица, где M(i,1) и M(i,2) - строка и столбец совпадающей пары.
(m+n-2*p) - общее число несопоставленных строк и столбцов.
[1] Дафф, И. С. и Дж. Костер. «О алгоритмах перестановки больших записей в диагональ разреженной матрицы». SIAM J. Matrix Anal. & Appl. 22 (4), 2001. pp 973-996.
Примечания и ограничения по использованию:
Генерация кода не поддерживает разреженные матричные входы для этой функции.
dmperm | equilibrate | sprank
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.