Aprenda el algoritmo húngaro para resolver problemas de tareas

problema de asignación

Insertar descripción de la imagen aquí

Formulario estándar para preguntas de tareas

Insertar descripción de la imagen aquí

Modelo matemático del problema de asignación

Insertar descripción de la imagen aquí

Problemas de asignación en forma no estándar.

Insertar descripción de la imagen aquí

Procedimiento general para la solución húngara del problema de asignación

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Los pasos anteriores no son fáciles de entender, aquí hay algunos ejemplos para facilitar la comprensión.

Ejemplo de solución húngara

Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Este es un ejemplo relativamente amigable. Simplemente siga los pasos. Aquí hay
otro ejemplo que es un poco complicado.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

Soluciones informáticas a problemas de tareas

Los problemas de programación entera se pueden resolver utilizando un software especial como Lingo. Para problemas generales de programación entera, las funciones de Matlab no se pueden usar directamente y se debe usar la programación de Matlab para implementar soluciones de rama y ligada y soluciones de plano de corte. Sin embargo, para problemas especiales de programación entera, como problemas de asignación, la función linprog de Matlab a veces se puede utilizar directamente.
Utilice MATLAB para resolver la siguiente matriz de asignación
Insertar descripción de la imagen aquí

c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5; 8 4 2 3 5;9 10 6 9 10];
c=c(:);
 %把矩阵c转化为25维列向量
a=zeros(10,25);
%10表示有5行5列的共10个约束(行列xij的和=1)25表示有25种xij类型
for i=1:5
    a(i,(i-1)*5+1:5*i)=1;
    a(5+i,i:5:25)=1;%每行每列相加等于一
end     
%此循环把指派问题转化为线性规划问题
b=ones(10,1);
[x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1));
%zeros(25,1),ones(25,1)指的是取值要么是0要么去1
X=reshape(x,5,5)
%把x变成5*5的矩阵
opt=y

Resultados de ejecución
Insertar descripción de la imagen aquí
: para comprender mejor el código, se proporciona la distribución de elementos específicos de la matriz a.
Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/Luohuasheng_/article/details/128511087
Recomendado
Clasificación