Tournaments are time-bound forecasting competitions on Metaculus where participants compete for prizes and recognition. They provide a structured way to test forecasting skills on curated question sets.
From projects/models.py:286-311, tournaments have specific time and prize configuration:
class Project(TimeStampedModel, TranslatedModel): type = models.CharField(max_length=32, choices=ProjectTypes.choices) # Tournament-specific fields prize_pool = models.DecimalField( default=None, decimal_places=2, max_digits=15, null=True, blank=True ) start_date = models.DateTimeField(null=True, blank=True) close_date = models.DateTimeField( help_text=( "The date the tournament wraps up and prizes will be paid. " "All questions that should be included in the leaderboard must " "close and resolve before this date. " "This is displayed on the front end as the 'Winners announced date'" ), ) forecasting_end_date = models.DateTimeField( help_text=( "The date the last scored question that counts for the tournament closes. " "The date shown is the latest of the Forecasting end date " "and the latest question close date closing and resolving before the Close date." ), ) sign_up_fields = models.JSONField( default=list, blank=True, help_text="Used during tournament onboarding." )
Tournaments automatically get a default leaderboard on creation (from projects/models.py:422-439):
def save(self, *args, **kwargs): creating = not self.pk super().save(*args, **kwargs) if creating and not self.primary_leaderboard and self.type in ( self.ProjectTypes.TOURNAMENT, self.ProjectTypes.QUESTION_SERIES, self.ProjectTypes.COMMUNITY, ): from scoring.models import Leaderboard leaderboard = Leaderboard.objects.create( project=self, score_type=LeaderboardScoreTypes.PEER_TOURNAMENT, ) Project.objects.filter(pk=self.pk).update(primary_leaderboard=leaderboard)
The default leaderboard uses PEER_TOURNAMENT scoring, which sums peer scores across all tournament questions.
Tournaments can have multiple leaderboards with different prize allocations (from scoring/models.py:184-201):
class Leaderboard(TimeStampedModel): prize_pool = models.DecimalField( help_text="""Optional. If not set, the Project's prize_pool will be used. If the Project has a prize pool, but this leaderboard has none, set this to 0. """, ) minimum_prize_amount = models.DecimalField( default=50.00, decimal_places=2, max_digits=15, help_text="""The minimum amount a user can win in this leaderboard. Any remaining money is redistributed. Tournaments that close before June 2025 will have a value of 0.00. """, )
Prizes are typically distributed to top performers. The exact distribution formula depends on tournament rules and leaderboard configuration.
class BotLeaderboardStatus(models.TextChoices): EXCLUDE_AND_HIDE = "exclude_and_hide" EXCLUDE_AND_SHOW = "exclude_and_show" INCLUDE = "include" BOTS_ONLY = "bots_only"bot_leaderboard_status = models.CharField( max_length=32, choices=BotLeaderboardStatus.choices, default=BotLeaderboardStatus.EXCLUDE_AND_SHOW, help_text="""Sets the status of bots in any leaderboard associated with this project. exclude_and_hide: Bots excluded from ranks/prizes/medals and hidden from leaderboard. exclude_and_show: Bots excluded from ranks/prizes/medals but shown on leaderboard. include: Bots included in ranks/prizes/medals and shown on leaderboard. bots_only: Only Bots included in ranks/prizes/medals. Non-bots still shown. """,)
Exclude & Hide
Exclude & Show
Include
Bots Only
Bots don’t appear on the leaderboard at all. Used when bots would be distracting.
Default setting. Bots appear on leaderboard for reference but don’t compete for prizes. Useful for benchmarking.
Bots compete alongside humans for ranks and prizes. Rarely used.
Only bots compete for prizes. Humans can participate but don’t rank. Used for bot competitions.
class Visibility(models.TextChoices): NORMAL = "normal" NOT_IN_MAIN_FEED = "not_in_main_feed" UNLISTED = "unlisted"visibility = models.CharField( choices=Visibility.choices, default=Visibility.NOT_IN_MAIN_FEED, help_text=( "Sets the visibility of this project:\n" "Normal: Visible on main feed, contributes to global leaderboards/medals, " "lists the project in tournaments/question series page.\n" "Not In Main Feed: Not visible in main feed but searchable, doesn't contribute " "to global leaderboards/medals, lists in tournaments page.\n" "Unlisted: Not visible in main feed, not searchable, doesn't contribute " "to global leaderboards/medals. Default for newly created Tournaments/Question Series." ),)