diff options
-rw-r--r-- | EjercitarJPA/src/model/Alumno.java | 6 | ||||
-rw-r--r-- | EjercitarServer/ejbModule/beans/AdministracionBean.java | 11 | ||||
-rw-r--r-- | EjercitarServer/ejbModule/beans/EjercitarWSBean.java | 40 | ||||
-rw-r--r-- | EjercitarServer/ejbModule/beans/Simulacion.java | 72 |
4 files changed, 95 insertions, 34 deletions
diff --git a/EjercitarJPA/src/model/Alumno.java b/EjercitarJPA/src/model/Alumno.java index 45d1fbb..b878a19 100644 --- a/EjercitarJPA/src/model/Alumno.java +++ b/EjercitarJPA/src/model/Alumno.java @@ -73,13 +73,13 @@ public class Alumno implements Serializable { @ManyToOne private Curso curso; @Transient - private String tipoAlumno; + private Double tipoAlumno; - public String getTipoAlumno() { + public Double getTipoAlumno() { return tipoAlumno; } - public void setTipoAlumno(String tipoAlumno) { + public void setTipoAlumno(Double tipoAlumno) { this.tipoAlumno = tipoAlumno; } diff --git a/EjercitarServer/ejbModule/beans/AdministracionBean.java b/EjercitarServer/ejbModule/beans/AdministracionBean.java index 6aea6d4..7a6c376 100644 --- a/EjercitarServer/ejbModule/beans/AdministracionBean.java +++ b/EjercitarServer/ejbModule/beans/AdministracionBean.java @@ -94,8 +94,8 @@ public class AdministracionBean implements AdministracionBeanRemote{ //b = nivel de dificultad double b = ejercicio.getNivelDificultad(); - //c = 1/n - double c = 1.0 / Double.valueOf(ejercicio.getConceptoList().size()); + //c = 1/n - n=4 - cantidad de respuestas + double c = 0.25; //s = adivinanza double s = ejercicio.getAdivinanza(); @@ -104,6 +104,8 @@ public class AdministracionBean implements AdministracionBeanRemote{ double x = (Math.log(k) + (1.7 * a * b)) / (1.7 * a); + System.out.println("b, c, s, k, x: " + b + " - " + c + " - "+ s + " - "+ k + " - "+ x); + return x; } @@ -767,7 +769,10 @@ public class AdministracionBean implements AdministracionBeanRemote{ } - + public Ejercicio getEjercicio(int idEjercicio ){ + Ejercicio ejercicio = em.find(Ejercicio.class, idEjercicio); + return ejercicio; + } diff --git a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java index cbd1c9d..8b29f74 100644 --- a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java +++ b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java @@ -197,20 +197,20 @@ public class EjercitarWSBean implements EjercitarWSRemote { Ejercicio ejercicio = null;
System.out.println("cantidad concepto: " + conceptoList.size() + " de la tarea: " + tarea.getDescripcion());
for (Concepto concepto : conceptoList) {
- System.out.println("concepto " + concepto.getNombre());
+ //System.out.println("concepto " + concepto.getNombre());
Network net1 = new Network();
String nombreRed = "red_alumno_" + alumno.getIdAlumno() + "_asignatura_" + tarea.getAsignatura().getIdAsignatura() +".xdsl";
- System.out.println("seleccionUtilidadMax - /home/redes/" + nombreRed);
+ //System.out.println("seleccionUtilidadMax - /home/redes/" + nombreRed);
net1.readFile("/home/redes/" + nombreRed);
net1.updateBeliefs();
String nombreConcepto = concepto.getNombre();
double [] values = net1.getNodeValue(nombreConcepto);
- System.out.println("values");
+ //System.out.println("values");
- System.out.println(" pC0: " + values[0]);
- System.out.println(" pC1: " + values[1]);
+ //System.out.println(" pC0: " + values[0]);
+ //System.out.println(" pC1: " + values[1]);
double pC1 = values[1]; // P(C=1)
@@ -219,7 +219,7 @@ public class EjercitarWSBean implements EjercitarWSRemote { List<Ejercicio> ejercicios = concepto.getEjercicioList();
- System.out.println("cantidad ejercicio: " + ejercicios.size());
+ //System.out.println("cantidad ejercicio: " + ejercicios.size());
for(Ejercicio ejercicioConcepto : ejercicios){
String nombreEjercicio = "E" + ejercicioConcepto.getIdEjercicio();
@@ -228,13 +228,13 @@ public class EjercitarWSBean implements EjercitarWSRemote { double pE0 = values[0]; // P(E=0)
- System.out.println("nombreEjercicio: " + nombreEjercicio);
+ //System.out.println("nombreEjercicio: " + nombreEjercicio);
net1.setEvidence(nombreConcepto, "Conoce");
net1.updateBeliefs();
values = net1.getNodeValue(nombreEjercicio);
- System.out.println("values " + values);
+ //System.out.println("values " + values);
double pE1C1 = values[1]; // P(E=1/C=1)
- System.out.println("pE1C1: " + pE1C1);
+ //System.out.println("pE1C1: " + pE1C1);
double pAuxi1 = pE1C1-pE1; //P(E=1/C=1) - P(E=1)
double utilidadParcial1 = pAuxi1 * pC1;
System.out.println("utilidadParcial1: " + utilidadParcial1);
@@ -246,23 +246,29 @@ public class EjercitarWSBean implements EjercitarWSRemote { System.out.println("values_ " + values);
double pE0C0 = values[0]; // P(E=0/C=0)
- System.out.println("pE0C0: " + pE0C0);
+ //System.out.println("pE0C0: " + pE0C0);
double pAuxi0 = pE0C0-pE0; //P(E=0/C=0) - P(E=0)
double utilidadParcial2 = pAuxi0 * pC0;
- System.out.println("utilidadParcial2: " + utilidadParcial2);
+ //System.out.println("utilidadParcial2: " + utilidadParcial2);
double utilidadMaxParcial = utilidadParcial1 + utilidadParcial2;
if(utilidadMaxParcial > utilidadMax) {
utilidadMax = utilidadMaxParcial;
ejercicio = ejercicioConcepto;
+ } else if (utilidadMaxParcial == utilidadMax) {
+ Random rnd = new Random();
+ int eleccion = rnd.nextInt(2);
+ if (eleccion == 1) {
+ ejercicio = ejercicioConcepto;
+ }
}
hUtilidades.put(utilidadMaxParcial, ejercicioConcepto);
- System.out.println("utilidadMax: " + utilidadMax);
- System.out.println("utilidadMaxParcial: " + utilidadMaxParcial);
+ //System.out.println("utilidadMax: " + utilidadMax);
+ //System.out.println("utilidadMaxParcial: " + utilidadMaxParcial);
}
}
- System.out.println(hUtilidades);
+ //System.out.println(hUtilidades);
TreeMap<Double, Ejercicio> tUtilidades = new TreeMap<Double, Ejercicio>(hUtilidades);
System.out.println(tUtilidades);
@@ -423,7 +429,7 @@ public class EjercitarWSBean implements EjercitarWSRemote { public void corregirProbabilidadesEjercicios() {
- Asignatura asignatura = em.find(Asignatura.class, 13);
+ Asignatura asignatura = em.find(Asignatura.class, 3);
System.out.println(asignatura.getNombre());
List<Tema> temas = (List<Tema>) em.createQuery("select t from Tema t where t.asignatura = :asignatura").setParameter("asignatura", asignatura).getResultList();
@@ -434,7 +440,7 @@ public class EjercitarWSBean implements EjercitarWSRemote { System.out.println("conceptos " + conceptos.size() );
Network net = new Network();
- net.readFile("/home/redes/red_asignatura_13.xdsl");
+ net.readFile("/home/redes/red_asignatura_3.xdsl");
System.out.println("########## leido #############");
@@ -451,7 +457,7 @@ public class EjercitarWSBean implements EjercitarWSRemote { }
}
- net.writeFile("/home/redes/red_asignatura_13.xdsl");
+ net.writeFile("/home/redes/red_asignatura_3.xdsl");
}
diff --git a/EjercitarServer/ejbModule/beans/Simulacion.java b/EjercitarServer/ejbModule/beans/Simulacion.java index a82eaa0..7c9b8fd 100644 --- a/EjercitarServer/ejbModule/beans/Simulacion.java +++ b/EjercitarServer/ejbModule/beans/Simulacion.java @@ -1,5 +1,9 @@ package beans; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + import javax.ejb.EJB; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -7,15 +11,19 @@ import javax.persistence.PersistenceContext; import model.Alumno; import model.Asignatura; import model.Curso; +import model.Ejercicio; +import model.Tarea; public class Simulacion { @EJB AdministracionBean admin; - - public Alumno crearAlumno(Curso curso, String tipo){ + @EJB + EjercitarWSBean ws; + + public Alumno crearAlumno(Curso curso, Double tipo){ Alumno alumno = new Alumno(); @@ -33,32 +41,74 @@ public class Simulacion { } - public void generacionAlumno(Asignatura asignatura){ + public List<Alumno> generacionAlumnos(Asignatura asignatura){ Curso curso = asignatura.getCurso(); int cantidadAlumnos = 30; - String tipo; + Double tipo; + + List<Alumno> alumnos = new ArrayList<Alumno>(); + for (int i = 0; i < cantidadAlumnos; i++) { if(i <= 10){ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_BAJO; - }else if(i >10 && i <=15){ + }else if(i >10 && i <=20){ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_MEDIO; }else{ tipo = TipoAlumno.NIVEL_CONOCIMIENTO_ALTO; } - crearAlumno(curso, tipo); - + Alumno alumno = crearAlumno(curso, tipo); + + alumnos.add(alumno); } admin.crearRedAlumnos(asignatura.getIdAsignatura()); - + + return alumnos; + } + + + public void simular(Asignatura asignatura, Tarea tarea) { + + + List<Alumno> alumnos = generacionAlumnos(asignatura); + + for(Alumno alumno : alumnos) { + + String siguienteEjercicio = ws.getSiguienteEjercicio(tarea.getIdTarea(), alumno.getIdAlumno(), 0, "respuesta"); + Boolean parada = false; + int cant = 0; + while(!parada) { + + String [] ejercicioString = siguienteEjercicio.split("#"); + int idEjercicio = Integer.valueOf(ejercicioString[0]); + Ejercicio ejercicio = admin.getEjercicio(idEjercicio); + + Random rnd = new Random(); + int decision = rnd.nextInt(100); + String respuesta = null; + int idRespuesta; + if(decision <= (alumno.getTipoAlumno()*100)) { + respuesta = ejercicio.getRespuesta().getDescripcion(); + idRespuesta = ejercicio.getRespuesta().getIdRespuesta(); + } else { + respuesta = ejercicio.getRespuestaList().get(0).equals(ejercicio.getRespuesta()) ? + ejercicio.getRespuestaList().get(1).getDescripcion() : ejercicio.getRespuestaList().get(0).getDescripcion(); + idRespuesta = ejercicio.getRespuestaList().get(0).equals(ejercicio.getRespuesta()) ? + ejercicio.getRespuestaList().get(1).getIdRespuesta() : ejercicio.getRespuestaList().get(0).getIdRespuesta(); + } + + siguienteEjercicio = ws.getSiguienteEjercicio(tarea.getIdTarea(), alumno.getIdAlumno(), idRespuesta, respuesta); + + } + } } public static class TipoAlumno { - public static final String NIVEL_CONOCIMIENTO_BAJO = "OO"; - public static final String NIVEL_CONOCIMIENTO_MEDIO = "0.5"; - public static final String NIVEL_CONOCIMIENTO_ALTO = "1"; + public static final Double NIVEL_CONOCIMIENTO_BAJO = 0.0; + public static final Double NIVEL_CONOCIMIENTO_MEDIO = 0.5; + public static final Double NIVEL_CONOCIMIENTO_ALTO = 1.0; } |