Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamu <samurey@gmail.com>2013-04-16 00:52:40 (GMT)
committer Samu <samurey@gmail.com>2013-04-16 00:52:40 (GMT)
commit42fe0a63f5dfc3789165ddfd7b432278c6f12835 (patch)
tree9f241e0a548889b6be0949f4160d56a4b4496850
parent9d70566274b3fb1485280a852d2be41df6875f07 (diff)
Agregado el formulario de conceptos y funcionando la red
-rw-r--r--EjercitarServer/ejbModule/beans/AdministracionBean.java239
-rw-r--r--EjercitarServer/ejbModule/beans/AdministracionBeanRemote.java7
-rw-r--r--EjercitarServer/ejbModule/beans/EjercitarWSBean.java6
-rw-r--r--EjercitarWeb/WebContent/Concepto.jsp46
-rw-r--r--EjercitarWeb/WebContent/Ejercicios.jsp20
5 files changed, 304 insertions, 14 deletions
diff --git a/EjercitarServer/ejbModule/beans/AdministracionBean.java b/EjercitarServer/ejbModule/beans/AdministracionBean.java
index d74f0c1..b4d822f 100644
--- a/EjercitarServer/ejbModule/beans/AdministracionBean.java
+++ b/EjercitarServer/ejbModule/beans/AdministracionBean.java
@@ -1,5 +1,6 @@
package beans;
+import java.util.ArrayList;
import java.util.List;
import javax.ejb.LocalBean;
@@ -7,6 +8,12 @@ import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
+import smile.Network;
+
+import model.Asignatura;
+import model.Concepto;
+import model.Ejercicio;
+import model.Profesor;
import model.Tema;
/**
@@ -32,4 +39,236 @@ public class AdministracionBean implements AdministracionBeanRemote, Administrac
System.out.println(conceptoList.toString());
return conceptoList;
}
+
+ public void agregarEjercicio(Ejercicio ejercicio) {
+ //Poner en una transaccion
+ em.persist(ejercicio);
+ agregarEjercicioRed(ejercicio);
+
+ }
+
+ public void agregarTema(Tema tema) {
+ //Poner en una transaccion
+ em.persist(tema);
+ agregarTemaRed(tema);
+
+ }
+
+ public void agregarConcepto(Concepto concepto) {
+ //Poner en una transaccion
+ em.persist(concepto);
+ agregarConceptoRed(concepto);
+
+ }
+
+ public void calcularProbabilidades(Profesor profesor) {
+ // Calculo de las probabilidades condicionales de las relaciones de agregacion
+
+ String nombreRed = "red_base_curso_1.xdsl";
+ System.out.println("redes/" + nombreRed);
+ Network net = new Network();
+ net.readFile("redes/" + nombreRed);
+
+ //agregar where
+ List<Tema> temaList = (List<Tema>) em.createQuery("Select e from Tema e").getResultList();
+ for(Tema tema : temaList) {
+ double[] temaDef = calcularProbabilidadesTema(tema);
+ net.setNodeDefinition(tema.getNombre(), temaDef);
+ }
+
+ //agregar where
+ List<Asignatura> asignaturaList = (List<Asignatura>) em.createQuery("Select e from Asignatura e").getResultList();
+ for(Asignatura asignatura : asignaturaList) {
+ double[] asignaturaDef = calcularProbabilidadesAsignatura(asignatura);
+ net.setNodeDefinition(asignatura.getNombre(), asignaturaDef);
+ }
+
+ net.writeFile("redes/" + nombreRed);
+ }
+
+ private double[] calcularProbabilidadesAsignatura(Asignatura asignatura) {
+ int dimension = (int) Math.pow(2, asignatura.getTemaList().size());
+ double [] asignaturaDef = new double[dimension * 2];
+
+ int j = 0;
+ for(int i = 0; i < dimension; i++) {
+ asignaturaDef[j] = cpAsignatura(asignatura, i);
+ j++;
+ asignaturaDef[j] = 1 - asignaturaDef[j-1];
+ j++;
+
+ }
+
+ return asignaturaDef;
+ }
+
+ private double cpAsignatura(Asignatura asignatura, int i) {
+ String comb = Integer.toBinaryString(i);
+ int dimension = asignatura.getTemaList().size();
+ while(comb.length() != dimension){
+ comb = "0" + comb;
+ }
+ int k = dimension - 1;
+ double valTemp = 0;
+ for (int j = 0; j < dimension; j++) {
+ if(comb.charAt(k) == '1') {
+ valTemp = valTemp + asignatura.getTemaList().get(j).getPeso();
+ }
+ k--;
+ }
+
+ return valTemp;
+ }
+
+ private double [] calcularProbabilidadesEval(Ejercicio ejercicio) {
+ //Calculo de las probabilidades condicionales
+ int dimension = (int) Math.pow(2, ejercicio.getConceptoList().size());
+ double [] ejercicioDef = new double[dimension * 2];
+
+ int j = 0;
+ for(int i = 0; i < dimension; i++) {
+ ejercicioDef[j] = cp(ejercicio, i);
+ j++;
+ ejercicioDef[j] = 1 - ejercicioDef[j-1];
+ j++;
+
+ }
+
+ return ejercicioDef;
+ }
+
+ private double cp(Ejercicio ejercicio, int i) {
+
+ String comb = Integer.toBinaryString(i);
+ while(comb.length() < ejercicio.getConceptoList().size()){
+ comb = "0" + comb;
+ System.out.println(comb);
+ }
+ int k = ejercicio.getConceptoList().size() - 1;
+ double valTemp = 1;
+ for (int j = 0; j < ejercicio.getConceptoList().size(); j++) {
+ if(comb.charAt(k) == '0') {
+ valTemp = valTemp * ejercicio.getConceptoList().get(j).getAdivinanza();
+ } else {
+ valTemp = valTemp * (1 -
+ ejercicio.getConceptoList().get(j).getDescuido());
+ }
+
+ k--;
+ }
+
+ return valTemp;
+
+ }
+
+ private double [] calcularProbabilidadesTema(Tema tema) {
+ //Calculo de las probabilidades condicionales
+ int dimension = (int) Math.pow(2, tema.getConceptoList().size());
+ double [] temaDef = new double[dimension * 2];
+
+ int j = 0;
+ for(int i = 0; i < dimension; i++) {
+ temaDef[j] = cpTema(tema, i);
+ j++;
+ temaDef[j] = 1 - temaDef[j-1];
+ j++;
+
+ }
+
+ return temaDef;
+ }
+
+ private double cpTema(Tema tema, int i) {
+
+ String comb = Integer.toBinaryString(i);
+ while(comb.length() < tema.getConceptoList().size()){
+ comb = "0" + comb;
+ }
+ int k = tema.getConceptoList().size() - 1;
+ double valTemp = 0;
+ for (int j = 0; j < tema.getConceptoList().size(); j++) {
+ if(comb.charAt(k) == '1') {
+ valTemp = valTemp + tema.getConceptoList().get(j).getPeso();
+ }
+ k--;
+ }
+
+ return valTemp;
+
+ }
+
+ private void agregarEjercicioRed(Ejercicio ejercicio) {
+ //operaciones sobre la red bayesiana con smile
+ String nombreRed = "red_base_curso_1.xdsl";
+ System.out.println("redes/" + nombreRed);
+ Network net = new Network();
+ net.readFile("redes/" + nombreRed);
+
+ //agregar nodo ejercicio
+ String titulo = "E" + Integer.toString(ejercicio.getIdEjercicio());
+ net.addNode(Network.NodeType.Cpt, titulo);
+ net.setOutcomeId(titulo, 0, "Incorrecto");
+ net.setOutcomeId(titulo, 1, "Correcto");
+
+ //agregar los arcos
+ List<Concepto> conceptoList = ejercicio.getConceptoList();
+ for(Concepto concepto : conceptoList) {
+ net.addArc(concepto.getNombre(), titulo);
+ }
+
+ //definir probabilidades condicionales
+ double[] ejercicioDef = calcularProbabilidadesEval(ejercicio);
+ net.setNodeDefinition(titulo, ejercicioDef);
+
+ net.writeFile("redes/" + nombreRed);
+ }
+
+ private void agregarTemaRed(Tema tema) {
+ //operaciones sobre la red bayesiana con smile
+ String nombreRed = "red_base_curso_1.xdsl";
+ System.out.println("redes/" + nombreRed);
+ Network net = new Network();
+ net.readFile("redes/" + nombreRed);
+
+ //agregar nodo ejercicio
+ String titulo = tema.getNombre();
+ net.addNode(Network.NodeType.Cpt, titulo);
+ net.setOutcomeId(titulo, 0, "No_conoce");
+ net.setOutcomeId(titulo, 1, "Conoce");
+
+ //agregar los arcos
+ List<Concepto> conceptoList = tema.getConceptoList();
+ for(Concepto concepto : conceptoList) {
+ net.addArc(concepto.getNombre(), titulo);
+ }
+
+ //definir probabilidades
+ //net.setNodeDefinition(titulo, ejercicioDef);
+ net.writeFile("redes/" + nombreRed);
+ }
+
+ private void agregarConceptoRed(Concepto concepto) {
+ //operaciones sobre la red bayesiana con smile
+ String nombreRed = "red_base_curso_1.xdsl";
+ System.out.println("redes/" + nombreRed);
+ Network net = new Network();
+ net.readFile("redes/" + nombreRed);
+
+ //agregar nodo concepto
+ String titulo = concepto.getNombre();
+ net.addNode(Network.NodeType.Cpt, titulo);
+ net.setOutcomeId(titulo, 0, "No_conoce");
+ net.setOutcomeId(titulo, 1, "Conoce");
+
+ //agregar los arcos
+
+ net.addArc(titulo, concepto.getTema().getNombre());
+
+ //definir probabilidades
+ double [] conceptoDef = new double [2];
+ conceptoDef[1] = concepto.getApriori();
+ conceptoDef[0] = 1 - conceptoDef[1];
+ net.setNodeDefinition(titulo, conceptoDef);
+ net.writeFile("redes/" + nombreRed);
+ }
}
diff --git a/EjercitarServer/ejbModule/beans/AdministracionBeanRemote.java b/EjercitarServer/ejbModule/beans/AdministracionBeanRemote.java
index 0dc47b6..50ba3de 100644
--- a/EjercitarServer/ejbModule/beans/AdministracionBeanRemote.java
+++ b/EjercitarServer/ejbModule/beans/AdministracionBeanRemote.java
@@ -4,7 +4,14 @@ import java.util.List;
import javax.ejb.Remote;
+import model.Concepto;
+import model.Ejercicio;
+
@Remote
public interface AdministracionBeanRemote {
public List getConceptoList(int idTema);
+
+ public void agregarEjercicio(Ejercicio ejercicio);
+ public void agregarConcepto(Concepto concepto);
+
}
diff --git a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
index 9a926f4..f687245 100644
--- a/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
+++ b/EjercitarServer/ejbModule/beans/EjercitarWSBean.java
@@ -76,11 +76,11 @@ public class EjercitarWSBean implements EjercitarWSRemote {
Ejercicio ejercicio = em.find(Ejercicio.class, idEjercicio);
Network net1 = new Network();
String nombreRed = "red_alumno_" + alumno.getIdAlumno() + ".xdsl";
- net1.readFile(nombreRed);
+ net1.readFile("redes/" + nombreRed);
net1.updateBeliefs();
String nombreEjercicio = "E" + idEjercicio;
- if(respuesta.equals(ejercicio.getIdRespuesta().getDescripcion())){
+ if(respuesta.equals(ejercicio.getRespuesta().getDescripcion())){
net1.setEvidence(nombreEjercicio, "Correcto");
} else {
net1.setEvidence(nombreEjercicio, "Incorrecto");
@@ -96,7 +96,7 @@ public class EjercitarWSBean implements EjercitarWSRemote {
net1.clearEvidence(nombreEjercicio);
net1.updateBeliefs();
- net1.writeFile(nombreRed);
+ net1.writeFile("redes/" + nombreRed);
}
@WebMethod
diff --git a/EjercitarWeb/WebContent/Concepto.jsp b/EjercitarWeb/WebContent/Concepto.jsp
new file mode 100644
index 0000000..7c66176
--- /dev/null
+++ b/EjercitarWeb/WebContent/Concepto.jsp
@@ -0,0 +1,46 @@
+<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
+ pageEncoding="ISO-8859-1"%>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Insert title here</title>
+</head>
+<body>
+ <%@page import="java.util.List" import="model.Tema" %>
+
+<form style="width: 1071px; height: 521px;" method="post" name="ejercicio_form">
+ <br>
+ Profesor: <input name="profesor" id="profesor">
+ <br>
+ Nombre: <input name="nombre" id= "nombre">
+ <br>
+ Descripcion:
+ <br>
+ <textarea cols="40" rows="10" name="descripcion"></textarea>
+ <br>
+ Tema: <select id="temas" name="tema">
+ <% List<Tema> temas = (List<Tema>)request.getAttribute("lista_temas"); %>
+ <% for(Tema tema : temas) {%>
+ <option value="<%= tema.getIdTema() %>"><%= tema.getNombre() %></option>
+ <% } %>
+ </select>
+ <br>
+ <br> Probabilidades:
+
+ <br>
+ A priori: <input name="a_priori" id= "a_priori">
+ <br>
+ Adivinanza: <input name="adivinanza" id="adivinanza">
+ <br>
+ Descuido: <input name="descuido" id="descuido">
+ <br>
+ Peso: <input name="peso" id="peso">
+ <br>
+ <input type="submit" name="Aceptar" value="Aceptar1">
+
+ </form>
+</body>
+
+
+</html> \ No newline at end of file
diff --git a/EjercitarWeb/WebContent/Ejercicios.jsp b/EjercitarWeb/WebContent/Ejercicios.jsp
index ee96c00..d8b5ae3 100644
--- a/EjercitarWeb/WebContent/Ejercicios.jsp
+++ b/EjercitarWeb/WebContent/Ejercicios.jsp
@@ -9,8 +9,14 @@
<%@page import="java.util.List" import="model.Tema" %>
+
<form style="width: 1071px; height: 521px;" method="post" name="ejercicio_form">
+
+
+ <br>
+ Profesor: <input name="profesor" id="profesor">
+ <br>
Enunciado:
<br>
<textarea cols="40" rows="10" name="enunciado"></textarea>
@@ -22,20 +28,12 @@
<% } %>
</select>
<br>
- Concepto: <select id="conceptos" multiple="multiple" name="Concepto" >
+ Concepto: <select id="conceptos" multiple="multiple" name="concepto" >
</select>
<br>
- Probabilidades:
- <br>
- A priori: <input name="priori">
- <br>
- Adivinanza: <input name="adivinanza">
- <br>
- Descuido: <input name="descuido">
- <br>
- <%= request.getParameter("atributo") %>
- <input type="submit" name="Aceptar" value="Aceptar1" >
+
+ <input type="submit" name="Aceptar" value="Aceptar" >
</form>
<script type="text/javascript">