Necesito una fórmula matemática que se pueda utilizar en cualquier lenguaje de programación y que me dé un valor por el que pueda ordenar o clasificar. Tengo 2 variables:
variable 1 = sólo un recuento arbitrario (podría ser algo como 0, 1, 5, 20, 50, 100)
variable 2 = número de días transcurridos desde la fecha actual (puede ser 0, 1, 2, 50, 100) Necesito una fórmula personalizada ponderada donde:
- entre 0-30 días a partir de la fecha actual, la variable 1 (recuento) comienza en el 100% del peso y la variable 2 en el 0% del peso. A medida que pasan los días hasta llegar a 30 días, el peso de la variable 1 desciende hasta el 50% en el día 30 y la variable 2 (número de días transcurridos) aumenta del 0% al 50% en el día 30.
- entre 31 y 60 días a partir de la fecha actual, la variable 1 empieza a aumentar del 50% al 100%, alcanzando su máximo en el día 60, y la variable 2 empieza a disminuir hasta 0 y llega a 0 en el día 60
- más allá del día 60, la variable 1 está siempre al 100% y la variable 2, obviamente, al 0%.
Por poner algunos ejemplos:
1) conjunto #1: x1 = 5,x2 = 1; conjunto #2: x1 = 5,x2 = 2 -> el conjunto #1 debería estar mejor clasificado
2) set #1: x1 = 5,x2 = 1; set #2: x1 = 6, x2 = 2 -> el set #2 debería clasificarse mucho más alto porque está al principio de los primeros 30 días y x1 debería estar alrededor del 90% y x2 cerca del 10% así que x1 es lo que cuenta aquí
A medida que x2 aumenta y llega al día 30, x1 y x2 se igualan en su peso. Después del día 30, x2 empieza a perder peso y en el día 60 deja de tener sentido y se queda en 0. Sin embargo, en el día 15, x1 tiene un peso mucho mayor que x2.
Nota: En igualdad de condiciones x1 = 100 es equivalente a x2 = 30. x1 es una cuenta arbitraria y x2 es el número de días, así que no puedo hacer x1 != x2 != 1
Tengo lo siguiente pero no cubre los 2 ejemplos anteriores: float k = abs(x2-30.0); if (k < 30.0) { // Rule 1 and 2 rank = k/60.0 + (60.0-k) * x1 / 60.0; } else { // Rule 3 rank = x1; } return rank;
Pido disculpas porque no sé qué etiquetas aplicar. Si este post no está claro, por favor sugiéralo y lo editaré para que tenga más sentido. He pensado que con dar las reglas y algunos ejemplos sería suficiente.