/** * Clase para organizar la asignación de trabajos a distintas maquinas. * Ejemplo de uso de colas de prioridad, * @author Amparo López Gaona * @version 1a. ed. **/ public class Planeacion { private int nMaquinas; // Cantidad de maquinas private Maquina[] maquinas; // Maquinas en que se realizaran los trabajos /** * Constructor a partir de la cantidad de maquinas * @param num -- cantidad de maquinas disponibles */ public Planeacion(int num) { maquinas = new Maquina[(num > 0)? num : 3]; for (int i = 0; i < maquinas.length; i++) { maquinas[i] = new Maquina(""+(i+1), 0); } } /** * Método para organizar el proceso de trabajos * @param trab -- arreglo con los trabajos que se desean realizar * @param nMaq -- entero que indica la cantidad de máquinas disponibles. */ public void planear(Trabajo [] trab, int nMaq) { if (trab.length <= maquinas.length){ // Hay menos trabajos que maquinas System.out.println("Asigna un trabajo a una maquina diferente"); return; } Heap h = new Heap(new ComparaTrabajos(), trab); Object [] trb = h.ordenar(); //Ordena usando el heap sort en orden descendente Heap heapMaq = new Heap(new ComparaMaquinas()); for (int i = 0; i < nMaq; i++) { heapMaq.agregar(maquinas[i]); } // Genera la planeacion for (int i=0; i< trb.length; i++) { Maquina maq = (Maquina) heapMaq.obtenerPrimero(); heapMaq.eliminar(); int tLibre = maq.obtenerTLibre(); System.out.print("El trabajo "+((Trabajo)trb[i]).obtenerID()+ " se realizo en la maquina"+ maq.obtenerID()+ " del tiempo "+maq.obtenerTLibre()); maq.asignarTDisponible(maq.obtenerTLibre() + ((Trabajo)trb[i]).obtenerDuracion()); maq.asignarTrabajo(new Trabajo(((Trabajo)trb[i]).obtenerID(), tLibre, maq.obtenerTLibre())); System.out.println("al tiempo "+maq.obtenerTLibre()); heapMaq.agregar(maq); } } /** * Metodo para mostrar la planeacion */ public void mostrarPlaneacion() {