Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcecigg <caggsld@gmail.com>2014-09-20 14:17:08 (GMT)
committer cecigg <caggsld@gmail.com>2014-09-20 14:17:08 (GMT)
commite78234da8c2eff861f7ea03174996fbecddb8acf (patch)
tree6d3455799b3a8ed28f303ffceeb0ea032e78e5eb
parent662c0c14b908bb126aa0483aefa9d018933e7a85 (diff)
se arreglo el calculo para obtener el siguiente ejercicio
-rw-r--r--EjercitarServer/ejbModule/beans/AdministracionBean.java42
-rw-r--r--EjercitarServer/ejbModule/beans/EjercitarWSBean.java77
2 files changed, 86 insertions, 33 deletions
diff --git a/EjercitarServer/ejbModule/beans/AdministracionBean.java b/EjercitarServer/ejbModule/beans/AdministracionBean.java
index a47f7a6..2884a25 100644
--- a/EjercitarServer/ejbModule/beans/AdministracionBean.java
+++ b/EjercitarServer/ejbModule/beans/AdministracionBean.java
@@ -68,11 +68,12 @@ public class AdministracionBean implements AdministracionBeanRemote{
int j = 0;
int contador = 0;
double x = calcularXasterisco(ejercicio);
+ System.out.println("x: " + x);
for(int i = 0; i < dimension; i++) {
double multiplicador = i / (dimension - 1);
System.out.println("i: " + i + " /dimension: "+ dimension);
System.out.println("mult " + multiplicador);
- ejercicioDef[j] = funcionGx((multiplicador * x), dimension.intValue(), ejercicio);
+ ejercicioDef[j] = 1 - funcionGx((multiplicador * x), dimension.intValue(), ejercicio);
System.out.println("funcionGx: " + ejercicioDef[j]);
j++;
ejercicioDef[j] = 1 - ejercicioDef[j-1];
@@ -94,7 +95,7 @@ public class AdministracionBean implements AdministracionBeanRemote{
double b = ejercicio.getNivelDificultad();
//c = 1/n
- double c = 1 / ejercicio.getConceptoList().size();
+ double c = 1.0 / Double.valueOf(ejercicio.getConceptoList().size());
//s = adivinanza
double s = ejercicio.getAdivinanza();
@@ -109,7 +110,7 @@ public class AdministracionBean implements AdministracionBeanRemote{
private double funcionGx(double x, int dimension, Ejercicio ejercicio){
//G(X) = 1- ( (1-c)(1+exp(-1.7ab)) ) / ( 1+exp(1.7a(x-b)) )
-
+ System.out.println("##################################################");
//indice de discriminacion
double a = 1;
@@ -117,14 +118,20 @@ public class AdministracionBean implements AdministracionBeanRemote{
double b = ejercicio.getNivelDificultad();
//c = 1/n
- double c = 1 / ejercicio.getConceptoList().size();
-
+ double c = 1.0 / Double.valueOf(ejercicio.getConceptoList().size());
+ System.out.println("cant concepto: " + ejercicio.getConceptoList().size());
+ System.out.println("a: " + a + "b: " + b + "c: " + c);
+
double numerador = (1 - c) * (1 + Math.exp(-1.7 * a * b));
+ System.out.println("numerado: " + numerador);
double denominador = 1 + Math.exp(1.7 * a * (x - b));
-
+ System.out.println("denominador: " + denominador);
double gX = 1 - (numerador / denominador);
+ System.out.println("gx: " + gX);
+ System.out.println("##################################################");
+
return gX;
}
@@ -682,10 +689,10 @@ public class AdministracionBean implements AdministracionBeanRemote{
}
-
-/* List<Concepto> conceptoList = new ArrayList();
+ em.flush();
+ List<Concepto> conceptoList = new ArrayList();
String queryConceptosPlantillas = "select c from Concepto c join c.tema t where t.asignatura = :asignatura";
- String queryEjercicios = "select e from Ejercicio e join e.conceptoList c where c in (:conceptos)";
+ String queryEjercicios = "select DISTINCT e from Ejercicio e join e.conceptoList c where c in (:conceptos)";
String queryConceptos = "Select c from Concepto c where c.nombre = :nombre and c.descripcion = :descripcion and c.profesor = :profe order by c.idConcepto asc";
List<Concepto> conceptos = em.createQuery(queryConceptosPlantillas)
@@ -708,9 +715,10 @@ public class AdministracionBean implements AdministracionBeanRemote{
.getNivelDificultad());
ejercicio.setProfesor(profesor);
ejercicio.setRespuesta(ejercicioPlantilla.getRespuesta());
-
+ em.persist(ejercicio);
// ejercicio.setConceptoList(ejercicioPlantilla.getConceptoList());
// crear Respuestas para ejercicios
+ em.flush();
for (Concepto conceptoP : ejercicioPlantilla.getConceptoList()) {
Concepto nuev = (Concepto) em
@@ -723,8 +731,11 @@ public class AdministracionBean implements AdministracionBeanRemote{
conceptoList.add(nuev);
}
- for (Respuesta respuestaPlantilla : ejercicioPlantilla
- .getRespuestaList()) {
+
+
+ String queryRespuesta = "select r from Respuesta r join r.ejercicioList e where e = :ejercicio ";
+ List <Respuesta>respuestas = em.createQuery(queryRespuesta).setParameter("ejercicio", ejercicioPlantilla).getResultList();
+ for (Respuesta respuestaPlantilla : respuestas) {
respuesta = new Respuesta();
respuesta.setDescripcion(respuestaPlantilla.getDescripcion());
@@ -732,16 +743,17 @@ public class AdministracionBean implements AdministracionBeanRemote{
respuestaList.add(respuesta);
}
+
ejercicio.setConceptoList(conceptoList);
ejercicio.setRespuestaList(respuestaList);
// agregar ejercicio a la red
em.persist(ejercicio);
- ;
-
+
+ conceptoList.clear();
}
- */
+
}
diff --git a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
index b98f3cb..15ad226 100644
--- a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
+++ b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
@@ -3,8 +3,11 @@ package beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Random;
+import java.util.TreeMap;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
@@ -81,14 +84,15 @@ public class EjercitarWSBean implements EjercitarWSRemote {
System.out.println("cant tareas:" + listaTareas.size());
- Query query = em.createQuery("SELECT DISTINCT t from Tarea t left outer join t.sesionList s where s.alumno = :alumno and s.estadoTerminado = false and s.tarea in (:tareas)");
+ /*Query query = em.createQuery("SELECT DISTINCT t from Tarea t left outer join t.sesionList s where s.alumno = :alumno and s.estadoTerminado = false and s.tarea in (:tareas)");
query.setParameter("alumno", alumno);
query.setParameter("tareas", listaTareas);
List<Tarea> listaTareasDisponibles = query.getResultList();
//return (List<Tarea>) listaTareas;
- System.out.println(listaTareasDisponibles.size());
+ System.out.println(listaTareasDisponibles.size());*/
+ List<Tarea> listaTareasDisponibles = new ArrayList<Tarea>();
if(listaTareasDisponibles.size() == 0){
listaTareasDisponibles = listaTareas;
@@ -124,7 +128,7 @@ public class EjercitarWSBean implements EjercitarWSRemote {
//
//Ejercicio ejercicio = seleccionAleatoria(tarea);
- Ejercicio ejercicio = seleccionUtilidadMax(tarea, alumno);
+ Ejercicio ejercicio = seleccionUtilidadMax(tarea, alumno, idEjercicio);
String enunciado = toASCII(ejercicio.getEnunciado());
System.out.println(enunciado);
String ejercicioElement = ejercicio.getIdEjercicio().toString() + "#" + enunciado;
@@ -180,17 +184,18 @@ public class EjercitarWSBean implements EjercitarWSRemote {
return ejercicio;
}
- private Ejercicio seleccionUtilidadMax(Tarea tarea, Alumno alumno) {
+ private Ejercicio seleccionUtilidadMax(Tarea tarea, Alumno alumno, int idEjercicioAnterior) {
try{
List<Concepto> conceptoList = em.createQuery("Select c from Concepto c inner join c.tareaList t where t = :tarea").setParameter("tarea", tarea).getResultList();
// inicializacion
double utilidadMax = 0;
-
+ Map<Double, Ejercicio> hUtilidades= new HashMap<Double, Ejercicio>();
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());
Network net1 = new Network();
String nombreRed = "red_alumno_" + alumno.getIdAlumno() + "_asignatura_" + tarea.getAsignatura().getIdAsignatura() +".xdsl";
System.out.println("seleccionUtilidadMax - /home/redes/" + nombreRed);
@@ -202,36 +207,72 @@ public class EjercitarWSBean implements EjercitarWSRemote {
System.out.println("values");
- System.out.println(values.toString());
+ System.out.println(" pC0: " + values[0]);
+ System.out.println(" pC1: " + values[1]);
- double pC1 = values[0]; // P(C=1)
+ double pC1 = values[1]; // P(C=1)
- double pC0 = values[1]; // P(C=0)
+ double pC0 = values[0]; // P(C=0)
List<Ejercicio> ejercicios = concepto.getEjercicioList();
+ System.out.println("cantidad ejercicio: " + ejercicios.size());
for(Ejercicio ejercicioConcepto : ejercicios){
String nombreEjercicio = "E" + ejercicioConcepto.getIdEjercicio();
+
+ values = net1.getNodeValue(nombreEjercicio);
+ double pE1 = values[1]; // P(E=1)
+ double pE0 = values[0]; // P(E=0)
+
+
+ System.out.println("nombreEjercicio: " + nombreEjercicio);
net1.setEvidence(nombreConcepto, "Conoce");
net1.updateBeliefs();
values = net1.getNodeValue(nombreEjercicio);
- double pE1C1 = values[0]; // P(E=1/C=1)
- double utilidadParcial1 = pE1C1 * pC1;
+ System.out.println("values " + values);
+ double pE1C1 = values[1]; // P(E=1/C=1)
+ 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);
net1.clearEvidence(nombreConcepto);
net1.updateBeliefs();
net1.setEvidence(nombreConcepto, "No_conoce");
net1.updateBeliefs();
- double pE0C0 = values[1]; // P(E=0/C=0)
- double utilidadParcial2 = pE0C0 * pC0;
- double utilidadMaxParcial = utilidadParcial1 + utilidadParcial2;
+ values = net1.getNodeValue(nombreEjercicio);
+ System.out.println("values_ " + values);
+
+ double pE0C0 = values[0]; // P(E=0/C=0)
+ 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);
+ double utilidadMaxParcial = utilidadParcial1 + utilidadParcial2;
+
if(utilidadMaxParcial > utilidadMax) {
utilidadMax = utilidadMaxParcial;
ejercicio = ejercicioConcepto;
}
+ hUtilidades.put(utilidadMaxParcial, ejercicioConcepto);
+ System.out.println("utilidadMax: " + utilidadMax);
+ System.out.println("utilidadMaxParcial: " + utilidadMaxParcial);
}
}
- return ejercicio;
+ System.out.println(hUtilidades);
+ TreeMap<Double, Ejercicio> tUtilidades = new TreeMap<Double, Ejercicio>(hUtilidades);
+ System.out.println(tUtilidades);
+
+ //int i = tUtilidades.size();
+ Map.Entry<Double, Ejercicio> valor;
+ while(true) {
+ valor = tUtilidades.pollLastEntry();
+ if( valor.getValue().getIdEjercicio()!= idEjercicioAnterior) {
+ return valor.getValue();
+ }
+ }
+
+ //return ejercicio;
}catch(Exception e){
e.printStackTrace();
}
@@ -379,7 +420,7 @@ public class EjercitarWSBean implements EjercitarWSRemote {
public void corregirProbabilidadesEjercicios() {
- Asignatura asignatura = em.find(Asignatura.class, 3);
+ Asignatura asignatura = em.find(Asignatura.class, 13);
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();
@@ -390,7 +431,7 @@ public class EjercitarWSBean implements EjercitarWSRemote {
System.out.println("conceptos " + conceptos.size() );
Network net = new Network();
- net.readFile("/home/redes/red_asignatura_3.xdsl");
+ net.readFile("/home/redes/red_asignatura_13.xdsl");
System.out.println("########## leido #############");
@@ -407,7 +448,7 @@ public class EjercitarWSBean implements EjercitarWSRemote {
}
}
- net.writeFile("/home/redes/red_asignatura_3.xdsl");
+ net.writeFile("/home/redes/red_asignatura_13.xdsl");
}