Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign to support other scoring methods #2525

Open
eldering opened this issue May 2, 2024 · 3 comments
Open

Redesign to support other scoring methods #2525

eldering opened this issue May 2, 2024 · 3 comments

Comments

@eldering
Copy link
Member

eldering commented May 2, 2024

In the past there have been various requests to support other scoring methods than pass/fail with penalty time, some have been listed in scoring

Before we try to support any of these, we should consider what a common (internal) interface/data structures would look like to generically support these. This would include making a trade-off where the more weird scoring methods we'd support, the broader and less well-defined this interface would become. This ticket is to discuss that interface.

We should then also refactor our code so that all scoring related code is hidden behind implementations of this interface. Currently there is plenty of code scattered around the code base.

@eldering
Copy link
Member Author

eldering commented May 2, 2024

Some comments/questions for this:

  1. I think we should not allow a scoring method to take arbitrary data from the system to determine the score (like: the current CPU load on the server, to name something silly). So what should be the set of allowed input to a score for a single submission? For team team on a problem? For a team in the whole contest?
  2. Related, what is the data format for the score for a submission, problem, etc? A float, or can it be any more complex structure like, {"points": 123, "time": 6534.061, "penalty": 20, "foobar": [1, 2, 3]}?

@meisterT
Copy link
Member

meisterT commented May 3, 2024

Some thoughts here:

  • We probably want to try to implement the current score in seconds and runtime as a tie breaker using whatever new mechanism we design as a litmus test.
  • We need to check what the implications on score cache and rank cache are.
  • Partial scoring seems to be then the easiest to add.
  • As data format I'm thinking of a list of (named) floats, it should be doable to represent any scoring function with that. Then this list of floats can be used for sorting/ranking teams (that implies it's maximized and you need to negate one of the floats if you want to minimize). In addition, we probably want to add a text representation (e.g. for the scoreboard).
  • How do the new scoring methods affect the event feed?

@MathisHammel
Copy link

Hi!
I would be interested in financially supporting the development of such a feature, mainly to include optimization problems in the small contests we run. Let me know if we can make this happen, contact details are on my GitHub profile if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants