So far, only the core utility logic and backend GUI are implemented. The EloEverything-style ranking interface isn't implemented yet.
Run gui.py to play with the algorithm.
![image](https://private-user-images.githubusercontent.com/76539808/325612268-10227d68-aa1c-4e70-b6c8-3f7c0b827d2f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjIyNDExMTgsIm5iZiI6MTcyMjI0MDgxOCwicGF0aCI6Ii83NjUzOTgwOC8zMjU2MTIyNjgtMTAyMjdkNjgtYWExYy00ZTcwLWI2YzgtM2Y3YzBiODI3ZDJmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzI5VDA4MTMzOFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTBjNmVmMjFkMjY1MjQyOTcyZTliNTVmNzhmNWYxY2M0ODQxMzVjY2YxNjkzMjgyOWU0YzA0NzVjNmY1ZGJhNzMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.p_t74F0sURkk8I2nmxi9YLZuWp98cRBgdEsk-UxF8pE)
To use elo_optimizer.py from your own file:
-
Import it. It is a stateful module with globals:
ITEMS: list[Item] LOTTERIES: list[Lottery] RESULTS: list[Result] PARAMETERS: list[torch.Tensor] MODE = "compound" # "compound" or "overwrite" (mode for adding results for pairs that have already been played)
-
Interact with it as follows:
- Use the Item() and Lottery() constructors to create items and lotteries
- Use add_result() to add results (don't use the Result constuctor directly)
- Items, Lotteries, and Results have delete() methods. The delete() method removes an object, its dependents, and its parameters from global lists.
- Call optimization methods as needed to recompute the best fit utilities and temperatures. Currently only full_batch_optimize() exists.
- Interact directly with the global lists for other operations