1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
|
package beans;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import javax.ejb.LocalBean;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import smile.Network;
import model.Alumno;
import model.Concepto;
import model.Curso;
import model.Ejercicio;
import model.Tarea;
import model.Tema;
/**
* Session Bean implementation class EjercitarWS
*/
@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
@Remote(EjercitarWSRemote.class)
@Stateless
public class EjercitarWSBean implements EjercitarWSRemote {
@PersistenceContext
EntityManager em;
/**
* Default constructor.
*/
public EjercitarWSBean() {
}
@WebMethod
public List<Tarea> getTareas(int idAlumno) {
// TODO Auto-generated method stub
System.out.println(idAlumno);
Alumno alumno = em.find(Alumno.class, idAlumno);
System.out.println(alumno.getApellido());
Curso curso = alumno.getCurso();
List<Tarea> listaTareas = curso.getTareaList();
return (List<Tarea>) listaTareas;
}
@WebMethod
public Ejercicio getSiguienteEjercicio(int idTarea, int idAlumno, int idEjercicio, String respuesta) {
// TODO Auto-generated method stub
Tarea tarea = em.find(Tarea.class, idTarea);
Alumno alumno = em.find(Alumno.class, idAlumno);
//
responderEjercicio(idEjercicio, respuesta, alumno);
//
Ejercicio ejercicio = seleccionAleatoria(tarea);
seleccionUtilidadMax(tarea, alumno);
System.out.println(ejercicio.getRespuestaList().toString()); // NO BORRAR
return ejercicio;
}
private void responderEjercicio(int idEjercicio, String respuesta, Alumno alumno) {
Ejercicio ejercicio = em.find(Ejercicio.class, idEjercicio);
Network net1 = new Network();
String nombreRed = "red_alumno_" + alumno.getIdAlumno() + ".xdsl";
net1.updateBeliefs();
String nombreEjercicio = "E" + idEjercicio;
if(respuesta.equals(ejercicio.getIdRespuesta().getDescripcion())){
net1.setEvidence(nombreEjercicio, "Correcto");
} else {
net1.setEvidence(nombreEjercicio, "Incorrecto");
}
}
@WebMethod
public String getText() {
return "hola mundo";
}
private Ejercicio seleccionAleatoria(Tarea tarea) {
Tema tema = tarea.getTema();
//List<Concepto> = tema.getIdConcepto()
List<Ejercicio> ejercicios = em.createQuery("SELECT e FROM Ejercicio e").getResultList();
System.out.println(ejercicios.size());
Random rnd = new Random();
int siguienteID = rnd.nextInt(ejercicios.size());
System.out.println(siguienteID);
Ejercicio ejercicio = ejercicios.get(siguienteID);
System.out.println(ejercicio.getEnunciado());
return ejercicio;
}
private Ejercicio seleccionUtilidadMax(Tarea tarea, Alumno alumno) {
Tema tema = tarea.getTema();
List<Concepto> conceptoList = new ArrayList();
conceptoList.add(tema.getIdConcepto()); // CAMBIAR
// inicializacion
double utilidadMax = 0;
Ejercicio ejercicio = null;
for (Concepto concepto : conceptoList) {
//red
Network net1 = new Network();
String nombreRed = "red_alumno_" + alumno.getIdAlumno() + ".xdsl";
System.out.println("redes/" + nombreRed);
net1.readFile("redes/" + nombreRed);
net1.updateBeliefs();
//Network net2 = new Network();
//net2.readFile("redes/" + nombreRed);
//red
String nombreConcepto = "C" + concepto.getIdConcepto();
//prueba de evidencias 1
double [] values = net1.getNodeValue(nombreConcepto);
System.out.println("values");
System.out.println(values.toString());
double pC1 = values[0]; // P(C=1)
double pC0 = values[1]; // P(C=0)
List<Ejercicio> ejercicios = concepto.getEjercicioList();
for(Ejercicio ejercicioConcepto : ejercicios){
String nombreEjercicio = "E" + ejercicioConcepto.getIdEjercicio();
net1.setEvidence(nombreConcepto, "Conoce");
net1.updateBeliefs();
values = net1.getNodeValue(nombreEjercicio);
double pE1C1 = values[0]; // P(E=1/C=1)
double utilidadParcial1 = pE1C1 * pC1;
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;
if(utilidadMaxParcial > utilidadMax) {
utilidadMax = utilidadMaxParcial;
ejercicio = ejercicioConcepto;
}
}
}
return ejercicio;
}
}
|