[WIP] Improvement based on Fred's advies.
This commit is contained in:
parent
e84733b3b5
commit
ec5f2bd44d
|
@ -40,7 +40,12 @@ Ce paramètre permet de construire des séries pour une gymnaste bien précis en
|
|||
|
||||
## Localisations
|
||||
|
||||
Ce module permet de gérer les localisations et les clubs. (plus d'informations à venir)
|
||||
|
||||
## Compétitions
|
||||
|
||||
Ce module permet de gérer les compétitions. (plus d'informations à venir)
|
||||
|
||||
## Personnes
|
||||
|
||||
Ce module permet de gérer les personnes. (plus d'informations à venir)
|
|
@ -25,7 +25,7 @@ class Country(models.Model):
|
|||
|
||||
class Place(models.Model):
|
||||
"""
|
||||
Classe représentant un lieu. En plus de l'adresse, un lieu est spécifié par un nombre
|
||||
Représente un lieu. En plus de l'adresse, un lieu est spécifié par un nombre
|
||||
de kilomètres et une durée de trajet. Pour faciliter les filtres, un lieu peut être
|
||||
actif ou non.
|
||||
"""
|
||||
|
@ -51,7 +51,7 @@ class Place(models.Model):
|
|||
|
||||
class Club(models.Model):
|
||||
"""
|
||||
Classe représentant un club. Un club est associé à un lieu. Pour faciliter les filtres,
|
||||
Représente un club. Un club est associé à un lieu. Pour faciliter les filtres,
|
||||
un club peut être actif ou non.
|
||||
|
||||
.. todo:: Un club peut avoir plusieurs salle et une salle peut-être louée par plusieurs clubs... M2M ?
|
||||
|
|
|
@ -349,16 +349,7 @@ def random_skill(request, number=None):
|
|||
return render(request, "judge_training_diff.html", context)
|
||||
|
||||
|
||||
def __construct_routine(skill_list, routine):
|
||||
""" """
|
||||
pass
|
||||
# routine.append(random(skill_list))
|
||||
# if len(routine) < 10:
|
||||
# __construct_routine(skill_list, routine)
|
||||
|
||||
|
||||
def suggest_routine(
|
||||
request,
|
||||
def __construct_routine(
|
||||
routine_length,
|
||||
total_difficulty_score=None,
|
||||
competition=True,
|
||||
|
@ -369,10 +360,10 @@ def suggest_routine(
|
|||
""" Construit et propose des séries.
|
||||
|
||||
Args:
|
||||
routine_length (int): nombre de sauts que doit contenir la série.
|
||||
total_difficulty_score (int): score de difficulté total souhaité de la série.
|
||||
competition (bool): indique si la série doit pouvoir être utilisée en compétition.
|
||||
logic (bool): indique si la série doit suivre certaines règles de logique (sportive).
|
||||
routine_length (int): nombre de sauts qui compose la série.
|
||||
total_difficulty_score (int): score total de difficulté souhaité de la série.
|
||||
competition (bool): indique si la série doit respecter les règles de compétition.
|
||||
logic (bool): indique si la série doit suivre les règles de logique (sportive).
|
||||
gymnast (gymnast): gymnaste.
|
||||
last_jump (skill): dernier saut sélectionné pour la série.
|
||||
|
||||
|
@ -382,41 +373,42 @@ def suggest_routine(
|
|||
|
||||
current_routine = []
|
||||
|
||||
if last_jump:
|
||||
skill_list = Skill.objects.filter(
|
||||
departure=last_jump.landing, difficulty__lte=total_difficulty_score
|
||||
)
|
||||
if logic and last_jump.landing == "Debout":
|
||||
skill_list = skill_list.exclude(rotationType=last_jump.rotationType)
|
||||
else:
|
||||
skill_list = Skill.objects.filter(departure__longLabel="Debout")
|
||||
skill_list = Skill.objects.all()
|
||||
|
||||
if competition:
|
||||
skill_list = skill_list.filter(is_competitive=True)
|
||||
# if last_jump:
|
||||
# skill_list = Skill.objects.filter(
|
||||
# departure = last_jump.landing, difficulty__lte = total_difficulty_score
|
||||
# )
|
||||
# if logic and last_jump.landing == "Debout":
|
||||
# skill_list = skill_list.exclude(rotationType = last_jump.rotationType)
|
||||
# else:
|
||||
# skill_list = Skill.objects.filter(departure__longLabel = "Debout")
|
||||
|
||||
if logic and total_difficulty_score:
|
||||
min_difficulty_score = math.ceil(max(0, ((total_difficulty_score / 10) - 5)))
|
||||
# if competition:
|
||||
# skill_list = skill_list.filter(is_competitive = True)
|
||||
|
||||
if total_difficulty_score <= 65:
|
||||
max_difficulty_score = math.ceil(total_difficulty_score / 5) + 1
|
||||
elif total_difficulty_score <= 120:
|
||||
max_difficulty_score = math.ceil(total_difficulty_score / 10) + 7
|
||||
else:
|
||||
max_difficulty_score = math.ceil(total_difficulty_score / 15) + 11
|
||||
# if logic and total_difficulty_score:
|
||||
# min_difficulty_score = math.ceil(max(0, ((total_difficulty_score / 10) - 5)))
|
||||
|
||||
skill_list = skill_list.filter(
|
||||
difficulty__gte=min_difficulty_score, difficulty__lte=max_difficulty_score
|
||||
)
|
||||
# if total_difficulty_score <= 65:
|
||||
# max_difficulty_score = math.ceil(total_difficulty_score / 5) + 1
|
||||
# elif total_difficulty_score <= 120:
|
||||
# max_difficulty_score = math.ceil(total_difficulty_score / 10) + 7
|
||||
# else:
|
||||
# max_difficulty_score = math.ceil(total_difficulty_score / 15) + 11
|
||||
|
||||
if gymnast:
|
||||
# skill_list = skill_list.filter(can_do__ blablabla)
|
||||
pass
|
||||
# skill_list = skill_list.filter(
|
||||
# difficulty__gte = min_difficulty_score,
|
||||
# difficulty__lte = max_difficulty_score
|
||||
# )
|
||||
|
||||
# if gymnast:
|
||||
# skill_list = skill_list.filter(can_do__gymnast = gymnast)
|
||||
|
||||
for skill in skill_list:
|
||||
current_routine.append(skill)
|
||||
current_routine.append(
|
||||
self.suggest_routine(
|
||||
request,
|
||||
total_difficulty_score - skill.difficulty,
|
||||
max_difficulty_score,
|
||||
routine_length - 1,
|
||||
|
@ -444,6 +436,42 @@ def suggest_routine(
|
|||
# n = len(val)
|
||||
# print(knapSack(W, wt, val, n))
|
||||
|
||||
return current_routine
|
||||
|
||||
|
||||
def suggest_routine(
|
||||
request,
|
||||
routine_length,
|
||||
total_difficulty_score=None,
|
||||
competition=True,
|
||||
logic=True,
|
||||
gymnast=None,
|
||||
last_jump=None,
|
||||
):
|
||||
""" Construit et propose des séries.
|
||||
|
||||
Args:
|
||||
routine_length (int): nombre de sauts qui compose la série.
|
||||
total_difficulty_score (int): score total de difficulté souhaité de la série.
|
||||
competition (bool): indique si la série doit respecter les règles de compétition.
|
||||
logic (bool): indique si la série doit suivre les règles de logique (sportive).
|
||||
gymnast (gymnast): gymnaste.
|
||||
last_jump (skill): dernier saut sélectionné pour la série.
|
||||
|
||||
Returns:
|
||||
??? (list): liste des séries correspondantes aux criètres.
|
||||
"""
|
||||
|
||||
current_routine = suggest_routine(
|
||||
routine_length,
|
||||
total_difficulty_score,
|
||||
competition,
|
||||
logic,
|
||||
gymnast,
|
||||
last_jump
|
||||
)
|
||||
print(current_routine)
|
||||
|
||||
|
||||
@login_required
|
||||
def chrono_listing(request, gymnastid=None, routineid=None):
|
||||
|
|
|
@ -95,8 +95,7 @@ class Gymnast(Markdownizable):
|
|||
Soit le jour/mois pour cette année
|
||||
Soit le jour/mois pour l'année prochaine.
|
||||
|
||||
Examples:
|
||||
>>> "en supposant qu'on soit le 23/05/2019 :-)"
|
||||
Examples: en supposant qu'on soit le 23/05/2019
|
||||
>>> from datetime import date
|
||||
>>> gregg = People(name='Tru', firstname='Gregg', birthdate=date(1982, 2, 5)
|
||||
>>> gregg.next_birthday()
|
||||
|
@ -120,9 +119,7 @@ class Gymnast(Markdownizable):
|
|||
|
||||
@property
|
||||
def age(self):
|
||||
"""
|
||||
Renvoie l'âge d'un gymnaste.
|
||||
"""
|
||||
""" Renvoie l'âge d'un gymnaste. """
|
||||
today = date.today()
|
||||
return (
|
||||
today.year
|
||||
|
@ -132,16 +129,12 @@ class Gymnast(Markdownizable):
|
|||
|
||||
@property
|
||||
def nextAge(self):
|
||||
"""
|
||||
Renvoie l'âge prochain du gymnaste.
|
||||
"""
|
||||
""" Renvoie l'âge prochain du gymnaste. """
|
||||
return (self.age) + 1
|
||||
|
||||
@property
|
||||
def known_skills(self):
|
||||
"""
|
||||
Renvoie la liste des objectifs qu'un gymnaste sait faire.
|
||||
"""
|
||||
""" Renvoie la liste des objectifs qu'un gymnaste sait faire. """
|
||||
return CanDoRelation.objects.filter(gymnast=self.id)
|
||||
|
||||
@property
|
||||
|
@ -189,7 +182,7 @@ class Accident(Markdownizable):
|
|||
|
||||
class CanDoRelation(models.Model):
|
||||
"""
|
||||
Classe représentant les objectifs qu'un gymnaste sait faire (à partir d'une date donnée).
|
||||
Représente les objectifs qu'un gymnaste sait faire (à partir d'une date donnée).
|
||||
"""
|
||||
|
||||
class Meta:
|
||||
|
@ -206,7 +199,7 @@ class CanDoRelation(models.Model):
|
|||
# QUESTIONS
|
||||
# ---------
|
||||
#
|
||||
# 1) Cela ne dervait pas être deux relation ManyToMany dans chacune des tables GYMNAST et EDUCATIVE (ou SKILL) ?
|
||||
# 1) Cela ne dervait pas être deux relations ManyToMany dans chacune des tables GYMNAST et EDUCATIVE (ou SKILL) ?
|
||||
# Un élève saura faire plusieurs figures.
|
||||
# Et une figure pourra savoir être faite par plusieurs élèves... Donc, ?
|
||||
#
|
||||
|
|
Loading…
Reference in New Issue