Comunidad de diseño web y desarrollo en internet online

algoritmo de selección

Citar            
MensajeEscrito el 11 Ago 2006 12:29 pm
Hace algún tiempo que tengo en mente un programa que me pregunte palabras en distintos idiomas, y que pregunte una palabra otra en función de un rank que vayan consiguiendo (pero pseudoaleatoria), por acertar decrece, por fallar crece, si acaba de preguntarla un factor creciente que empieza en 0...
La pregunta (quizá algo infantil pero es que no veo solución) es qué hacer cuando un valor es igual o menor que 0. Dar ranks iniciales muy grandes y sumar y restar poco no es una buena idea porque habrá las probabilidades serán muy parecidas para una palabra que sé y otra que no consigo recordar , y sumarle a todas las palabras el valor necesario para que la palabra que menos valga sea 1 tampoco porque entonces transtoca la proporcionalidad...
Si se fijan en la función que utilizo verán por qué no pueden ser negativos los valores

Código :

   public function extract(nums:Array) {
   var arr:Array = nums;
   var ln:Number = arr.length;
   var suma:Number = 0;
   for (var i:Number=0; i<ln; i++) {
      suma += arr[i].rank;
   }
   var aleat:Number = Math.floor(Math.random()*suma);
   var ind = 0;
   for (i=0; i<ln; i++) {
      ind += arr[i].rank;
      if (ind>aleat) {
         arr[i].times++;
         return arr[i].id;
      }
   }
}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 13 Ago 2006 05:30 pm
No revise tu función a fondo, pero te digo, donde quieras que un valor no sea menor o igual a esto, puedes hacer algo así:

Código :

valor = 0;
valor = (valor <= 0) ? 1 : valor;
trace(valor);
valor = -6;
valor = (valor <= 0) ? 1 : valor;
trace(valor);
valor = 5;
valor = (valor <= 0) ? 1 : valor;
trace(valor);

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

clabbrowser
Citar            
MensajeEscrito el 14 Ago 2006 08:04 am
establecemos por ejemplo una escala, del 1 al 19. (1 va a salir casi seguro, 19 no saldrá casi seguro)
Si se le pregunta una palabra y acierta se le suma 1
Si falla se le resta 1, -5 o se queda igual (como quieras)

Para hallar una nueva palabra lo que se hace es 20-valorPalabra, así tenemos "el inverso" por ejemplo una palabra 5 tendrá de "inverso" 15.
se suman los inversos, y se hace un random desde 0 al "sumaInversos" luego se elige la palabra que haya salido poniéndolas en orden.

si los inversos son 5,3,2,4 5+3+2+4 = 14
si el random cae entre 0-5 = palabra 1
5-8 = palabra 2
8-10 = palabra 3
10-14 = palabra 4

Imagino que al llegar todas a 19 habría que depurar algo como volverlas a 1 o algo así

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 14 Ago 2006 11:44 am
Ya, pero así ¿qué consigo? Ahora el problema que tenía con el 0 lo tengo con el 19... aunque empiezo a ver que tiene difícil solución y tampoco es tan importante que sea tan exacto.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 14 Ago 2006 11:58 am
por eso el 1 y el 19
20-19 = 1 ... hay posibilidades
la cosa es que no valga 0 no?

Por _CONEJO

BOFH

7639 de clabLevel

17 tutoriales
21 articulos

 

clabbrowser
Citar            
MensajeEscrito el 14 Ago 2006 03:48 pm
La cosa es que no haya palabras cuyo valor no cambie al acertar o al fallar (porque ya valen el máximo) y bueno con lo que has dicho, se me ha ocurrido que el límite sea variable, cuando la puntuación de una palabra llegue por ejemplo, a 19, el límite sea 21.
¿Es buena solución?

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.