Convocatoria
Septiembre
Curso 2012/13
Funcionalidad
ESTADIO PPAL
ESTADIO PPAL
ESTADIO PPAL
PISCINA
VILLA
PISCINA
VILLA
VILLA
Importancia
10
10
10
7
8
7
8
8
Precio
(mil. de yenes)
7
8
9
6
8
7
10
9
Valor
Calidad
8
9
10
9
10
8
10
8
Valoracin
Final
11,42
11,25
11,11
10,5
10
8
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.
Precio
Valor
Valoracin
Nombre
Funcionalidad Importancia
(mil. de yenes)
Calidad
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)
NOTA: recuerde que si necesita una clase con funcionalidad adicional (por ejemplo, Predicate,
Comparator, Function, etc) debe implementarla.
ADDA
Convocatoria
Septiembre
Curso 2012/13
Nombre: _____________________________________________________
Titulacin: ___________________________________________________
Ficha 1
Problema Comit Olmpico de Japn
Tcnica: Algoritmo Voraz
Propiedades Compartidas
Solucin:
Objetivo:
Inicial:
Alternativas
next
ADDA
Convocatoria
Septiembre
Curso 2012/13
proyectosDisponibles: List<Proyecto>
presupuestoTotal: Integer
0,5
Solucin: SolucionJOC
proyectosElegidos: List<Proyecto>
proyectosPorElegir: List<Proyecto>
presupuestoDisponible: Integer
valorCalidadImportanciaTotal: Double
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
ADDA
Convocatoria
Septiembre
Curso 2012/13
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 Proyecto getAlternativa()
1 punto
@Override
public Proyecto getAlternativa() {
Proyecto proyecto = null;
if(!proyectosPorElegir.isEmpty()){
proyecto = proyectosPorElegir.get(0);
}
return proyecto;
}
o void next(Proyecto p)
1 punto
@Override
public void next(Proyecto p) {
this.proyectosPorElegir.remove(p);
this.proyectosElegidos.add(p);
this.presupuestoDisponible = this.presupuestoDisponible-p.getPrecio();
this.valorCalidadImportanciaTotal = this.valorCalidadImportanciaTotal
+ (p.getValorCalidad()*p.getImportancia());
// Actualizar y filtrar la lsita de proyectosPorElegir
this.proyectosPorElegir =
Lists.newLinkedList(Iterables.filter(proyectosPorElegir, new
DistintaFuncionalidadYDentroPresupuesto(p)));
}
ADDA
Convocatoria
Septiembre
Curso 2012/13
1 punto
private class DistintaFuncionalidadYDentroPresupuesto implements
Predicate<Proyecto> {
private Proyecto proyecto;
public DistintaFuncionalidadYDentroPresupuesto(Proyecto p){
this.proyecto = p;
}
@Override
public boolean apply(Proyecto arg0) {
return
(!(arg0.getFuncionalidad().equalsIgnoreCase(proyecto.getFuncionalidad())) &&
arg0.getPrecio() <= presupuestoDisponible);
}
}
0.5 punto