Je suis actuellement en train de mettre en place un logiciel qui mesure certaines valeurs dans le temps. L'utilisateur peut choisir de mesurer la valeur 100 fois sur une durée de 28 jours. (Juste pour donner un exemple)Comment: Trouver un bon algorithme mathématique pour distribuer des points de mesure dans le temps?
La distribution linéaire n'est pas un problème, mais j'essaie actuellement d'obtenir une distribution logarithmique des points sur la durée.
L'implémentation directe serait d'itérer sur les points et donc j'ai besoin d'une fonction exponentielle. (! Je suis arrivé jusqu'ici)
Mon algorithme actuel (C#) est la suivante:
long tRelativeLocation = 0;
double tValue;
double tBase = PhaseTimeSpan.Ticks;
int tLastPointMinute = 0;
TimeSpan tSpan;
for (int i = 0; i < NumberOfPoints; i++)
{
tValue = Math.Log(i + 1, NumberOfPoints);
tValue = Math.Pow(tBase, tValue);
tRelativeLocation = (long)tValue;
tSpan = new TimeSpan(tRelativeLocation);
tCurrentPoint = new DefaultMeasuringPointTemplate(tRelativeLocation);
tPoints.Add(tCurrentPoint);
}
cela me donne un résultat plutôt "bon" pendant 28 jours et 100 points.
Les 11 premiers points sont tous à 0 secondes,
points 12 à 1 sec,
20 à 50 sec,
50 à 390 min,
95e à 28605 min
99 e à 37697 minutes (ce qui rend 43 heures avant le dernier point)
Ma question est: Est-ce que quelqu'un a une bonne idée de comment séparer les premiers 20-30 points les uns des autres, peut-être en rapprochant les 20-30 derniers? ? Je comprends que je devrai éventuellement ajouter un algorithme qui sépare les premiers points d'au moins une minute, parce que je ne serai pas capable d'obtenir ce genre de comportement dans un algorithme strictement mathématique.
Quelque chose comme ceci:
if (((int)tSpan.TotalMinutes) <= tLastPointMinute)
{
tSpan = new TimeSpan((tLastPointMinute +1) * 600000000L);
tRelativeLocation = tSpan.Ticks;
tLastPointMinute = (int)tSpan.TotalMinutes;
}
Cependant, je voudrais obtenir une distribution légèrement mieux dans l'ensemble.
Toutes les idées géniales de votre part seraient grandement appréciées!
Paul: Merci. L'idée avec le décalage m'a beaucoup aidé. Avec un peu plus de réglage, je vais faire ce travail assez décemment. Merci beaucoup – yas4891