Решите задачу линейного присвоения
решает задачу линейного назначения для строк и столбцов матрицы M
= matchpairs(Cost
,costUnmatched
)Cost
. Каждая строка присваивается столбцу таким образом, чтобы общая стоимость была минимизирована. costUnmatched
определяет стоимость строки без назначения каждой строки, а также стоимость столбца без строки, назначенной каждому столбцу.
[
дополнительно возвращает индексы для несопоставленных строк в M
,uR
,uC
] = matchpairs(Cost
,costUnmatched
)uR
и индексы для несопоставленных столбцов в uC
.
[___] = matchpairs(
задает цель оптимизации, используя любую из комбинаций выходных аргументов в предыдущих синтаксисах. Cost
,costUnmatched
,goal
)goal
можно 'min'
или 'max'
для создания совпадений, которые минимизируют или максимизируют общую стоимость.
Присвоение продавцов рейсам таким образом, чтобы общая стоимость перевозки была сведена к минимуму.
Компания имеет четырех продавцов, которым нужно путешествовать по ключевым городам по всей стране. Компания должна забронировать свои рейсы, и хочет потратить как можно меньше денег. Эти продавцы базируются в разных частях страны, поэтому стоимость для них полетов в каждый город варьируется.
В этой таблице показана стоимость для каждого продавца лететь в каждый ключевой город.
Каждый город представляет возможность для продаж. Если город пропущен, то компания проигрывает на средний доход в размере 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
вычисляет наименее дорогой способ получить продавца в каждый город.
Сопоставляйте строки с столбцами, когда у вас есть гораздо больше столбцов, чем строк в матрице затрат.
Создайте матрицу затрат 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
отслеживать движение нескольких точек путем минимизации общих изменений расстояния.
Постройте график сетки точек в момент времени в зеленом цвете. В момент времени некоторые точки перемещают небольшую величину в случайном направлении.
[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
чтобы соответствовать точкам в с точками в . Для этого сначала вычислите матрицу затрат, где 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
-by- 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
- сумма стоимости всех совпадающих пар, добавленная к стоимости всех несопоставленных пар:
В коде общая стоимость:
CostAssigned = sum(Cost(sub2ind(size(Cost), M(:,1), M(:,2)))); CostUnassigned = costUnmatched*(sum(size(Cost))-2*size(M,1)); TotalCost = CostAssigned + CostUnassigned;
Cost
является m
-by- n
матрица.
M
является p
-by- 2
матрица, где M(i,1)
и M(i,2)
- строка и столбец совпадающей пары.
(m+n-2*p)
- общее количество несопоставленных строк и столбцов.
[1] Дафф, И.С. и Дж. Костер. «Об алгоритмах перестановки больших записей в диагональ разреженной матрицы». SIAM J. Matrix Anal. & Appl. 22 (4), 2001. стр 973-996.
Указания и ограничения по применению:
Генерация кода не поддерживает разреженные матричные входы для этой функции.
dmperm
| equilibrate
| sprank
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.