Matlab - Función MILP!!

 
Vista:

Función MILP!!

Publicado por Andrés Pasqual (1 intervención) el 06/08/2002 16:23:42
Hola:
Estoy aproblemado con una optimización entera y creo que la función MILP es la que debo usar, el problema es que no se como usarla y no sé si el código de la función que tengo esté bueno. ¿Alguien tiene un código o un ejemplo de MILP para Matlab?
Cualquier respuesta se las agradecería mucho.
Chao.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Ejemplo de optimización entera mixta (MILP) para asignación de tareas

Publicado por Alejandro (145 intervenciones) el 05/10/2023 15:59:59
¡Hola, Andrés! Claro, puedo proporcionarte un ejemplo básico de un problema de programación lineal entera mixta (MILP) en MATLAB utilizando la función `intlinprog`. Vamos a resolver un simple problema de asignación. Imagina que tienes 3 tareas y 3 trabajadores, y necesitas asignar cada tarea a un trabajador de manera que maximices la productividad total.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
% Definir la matriz de costos (beneficios)
costos = [3, 1, 5; 2, 6, 4; 7, 1, 8];
 
% Número de tareas y trabajadores
num_tareas = size(costos, 1);
num_trabajadores = size(costos, 2);
 
% Definir la función objetivo (maximizar la productividad)
f = -reshape(costos, 1, []);
 
% Restricciones de asignación (una tarea por trabajador y viceversa)
Aeq = zeros(num_tareas + num_trabajadores, num_tareas * num_trabajadores);
beq = ones(num_tareas + num_trabajadores, 1);
 
for i = 1:num_tareas
    Aeq(i, (i-1)*num_trabajadores + 1:i*num_trabajadores) = 1;
end
 
for j = 1:num_trabajadores
    Aeq(num_tareas + j, j:num_trabajadores:num_tareas*num_trabajadores) = 1;
end
 
% Variables binarias (asignación o no asignación)
intcon = 1:num_tareas * num_trabajadores;
 
% Resolver el MILP
[x, fval, exitflag] = intlinprog(f, intcon, [], [], Aeq, beq, zeros(num_tareas * num_trabajadores, 1), ones(num_tareas * num_trabajadores, 1));
 
% Reshape de la solución para obtener la asignación
asignacion = reshape(x, num_tareas, num_trabajadores);
 
% Mostrar los resultados
disp('Asignación óptima:');
disp(asignacion);
disp(['Productividad total: ' num2str(-fval)]);

Este es solo un ejemplo básico, pero debería darte una idea de cómo usar `intlinprog` en MATLAB para resolver problemas MILP. Ajusta los costos y las restricciones según tu problema específico.

¡Espero que esto te ayude!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar