problema de asignación
Formulario estándar para preguntas de tareas
Modelo matemático del problema de asignación
Problemas de asignación en forma no estándar.
Procedimiento general para la solución húngara del problema de asignación
Los pasos anteriores no son fáciles de entender, aquí hay algunos ejemplos para facilitar la comprensión.
Ejemplo de solución húngara
Este es un ejemplo relativamente amigable. Simplemente siga los pasos. Aquí hay
otro ejemplo que es un poco complicado.
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
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
: para comprender mejor el código, se proporciona la distribución de elementos específicos de la matriz a.