ADDA Septiembre 2012 2013 Ej3 Solucion

download ADDA Septiembre 2012 2013 Ej3 Solucion

of 6

description

ADDA

Transcript of ADDA Septiembre 2012 2013 Ej3 Solucion

  • ADDA Convocatoria Septiembre Curso 2012/13

    Ejercicio 3: Algoritmo Voraz

    Tokio acaba de ser elegida ciudad olmpica para el ao 2020, por lo que el Comit Olmpico de Japn (JOC) necesita planificar la construccin de los diferentes edificios donde se celebrarn las olimpiadas. Para el ao 2014, el JOC dispone ya de una cantidad de dinero que quiere aprovechar para empezar a construir, y para demostrar que estn muy comprometidos con la eleccin recibida, quieren empezar por los edificios de mejor calidad e importancia posibles. Para ello, el JOC tiene un catlogo ordenado con varios proyectos, cada proyecto tiene la siguiente informacin:

    - Nombre: nombre del edificio. - Funcionalidad: funcin que desempear en las olimpiadas (por ejemplo,

    estadio, piscina, villa, etc). - Importancia: relevancia que tendr el edificio dentro de las olimpiadas. Ser una

    puntuacin entre 0 y 10 dada por el JOC, siendo 0 la mnima puntuacin y 10 la mxima.

    - Precio: presupuesto por construir el edificio (en yenes). - Valor de Calidad: puntuacin entre 0 y 10 dada por un equipo de expertos en

    edificacin, siendo 0 la mnima puntuacin y 10 la mxima. El JOC ha decidido contratar sus servicios para la realizacin de un Algoritmo Voraz que les permita decidir qu edificios construir para que la suma total del valor en relacin a la calidad por importancia de los edificios sea mxima. Adems, hay que tener en cuenta que slo se puede elegir un edificio que tenga la misma funcionalidad (por ejemplo, no se pueden construir 2 piscinas olmpicas para la natacin) y que est dentro del presupuesto disponible. Por ejemplo, con un presupuesto de 20 millones de Yenes y la siguiente lista de proyectos ordenados por la funcin objetivo: [(Importancia * Valor de Calidad)/Precio]

    Nombre Funcionalidad Importancia Precio

    (mil. de yenes) Valor

    Calidad Valoracin

    Final

    Sakura ESTADIO PPAL 10 7 8 11,42

    Natsuki ESTADIO PPAL 10 8 9 11,25

    Akira ESTADIO PPAL 10 9 10 11,11

    Hikari PISCINA 7 6 9 10,5

    Mizuki VILLA 8 8 10 10

    Ryu PISCINA 7 7 8 8

    Sora VILLA 8 10 10 8

    Ai VILLA 8 9 8 7,11

    La solucin obtenida sera la siguiente tabla, con un presupuesto restante de 6 millones de Yenes y un Valor de Calidad-Importancia Total de 143.

    Nombre Funcionalidad Importancia Precio

    (mil. de yenes) Valor

    Calidad Valoracin

    Final

    Sakura PPAL 10 7 8 11,42

    Hikari NAT 7 6 9 10,5

  • ADDA Convocatoria Septiembre Curso 2012/13

    Se pide: - Completar la ficha adjunta siguiendo la informacin del problema detallado anteriormente - Implemente los siguientes mtodos pertenecientes a la clase EstadoJOCAP:

    o private EstadoJOCAP() o public SolucionJOC getSolucion() o public boolean condicionDeParada() o Proyecto getAlternativa() o void next(Proyecto p)

    - Implemente el siguiente mtodo perteneciente a la clase ProblemaJOCAP: o EstadoJOCAP getEstadoInicial()

    NOTA: recuerde que si necesita una clase con funcionalidad adicional (por ejemplo, Predicate, Comparator, Function, etc) debe implementarla.

    Tiempo estimado: 45 min. Puntuacin: 2,5 ptos

  • ADDA Convocatoria Septiembre Curso 2012/13

    Nombre: _____________________________________________________ Titulacin: ___________________________________________________

    Ficha 1

    Problema Comit Olmpico de Japn Tcnica: Algoritmo Voraz

    Propiedades Compartidas

    Propiedades del Estado

    Solucin:

    Objetivo:

    Inicial:

    Alternativas

    next

  • ADDA Convocatoria Septiembre Curso 2012/13

    SOLUCION (4puntos repartidos) Ficha 1

    Problema Comit Olmpico de Japn Tcnica: Algoritmo Voraz

    Propiedades Compartidas

    0,5

    proyectosDisponibles: List presupuestoTotal: Integer

    Propiedades del Estado

    1

    proyectosElegidos: List proyectosPorElegir: List presupuestoDisponible: Integer valorCalidadImportanciaTotal: Double

    Solucin: SolucionJOC 0,25

    Objetivo: 0,25

    Maximizar valor valorCalidadImportanciaTotal

    Inicial: 0,6 proyectosElegidos: {} proyectosPorElegir: proyectosDisponibles presupuestoDisponible: presupuestoTotal valorCalidadImportanciaTotal: 0.0

    Alternativas 0,4 A = {p en proyectosPorElegir} tal que p es el primer valor de proyectosPorElegir

    Next 1 proyectosElegidos -> proyectosElegidos + p proyectosPorElegir -> proyectosPorElegir p (filtrar por funcionalidad y presupuesto) presupuestoDisponible = presupuestoDisponible p.getPrecio() valorCalidadImportanciaTotal = valorCalidadImportanciaTotal + (p.getValorCalidad() * p.getImportancia())

  • ADDA Convocatoria Septiembre Curso 2012/13

    - Implemente los siguientes mtodos pertenecientes a la clase EstadoJOCAP: (6 puntos repartidos)

    o private EstadoJOCAP() 1 punto

    private EstadoJOCAP() { super(); this.proyectosElegidos = Lists.newLinkedList(); this.presupuestoDisponible = ProblemaJOC.getPresupuestoTotal(); this.proyectosPorElegir =

    Lists.newLinkedList(ProblemaJOC.getProyectosDisponibles()); this.valorCalidadImportanciaTotal = 0.0; }

    o public SolucionJOC getSolucion() 0.5 punto

    @Override public SolucionJOC getSolucion() { return SolucionJOC.create(proyectosElegidos); }

    o public boolean condicionDeParada() 1 punto

    @Override public boolean condicionDeParada() {

    return (proyectosPorElegir.isEmpty() || presupuestoDisponible

  • ADDA Convocatoria Septiembre Curso 2012/13

    1 punto private class DistintaFuncionalidadYDentroPresupuesto implements Predicate {

    private Proyecto proyecto; public DistintaFuncionalidadYDentroPresupuesto(Proyecto p){ this.proyecto = p; } @Override public boolean apply(Proyecto arg0) { return (!(arg0.getFuncionalidad().equalsIgnoreCase(proyecto.getFuncionalidad())) && arg0.getPrecio()