Comments (3)
you suggest that we create an auxiliary class that would be responsible for generating random inputs (regarding the player class) when arguments are optional and not given by the user, and also to be able to mutate default values?
Yes, I'm suggesting that the parameters, how they are randomly generated, and how they mutate would make more sense as a separate class rather than intermingled with the strategy code. You could imagine the Player class asking the auxiliary class:
- if the parameters are sufficiently specified on
__init__
(with the derived parameters generated as needed) - if the parameters have nontrivial mutation options
- to generate a new variant
I haven't thought through all the implications.
This suggestion could also resolve issue #1345 -- the parameter holding class could have a default no-op mutation case (alternatively so could the Player class...). These could be good candidates for using dataclasses or the attrs
library, which play nicely with mypy.
Anyway that's separate from the immediate typing issues, just wanted to mention it as something to think about in the context of whether the parameters are truly optional or not, since at least some of them have to be specified.
from axelrod.
In this specific case the arguments are truly optional since the strategy generates a random set of parameters (given the seed) if a non-sufficient set of arguments is given. If we were to specify default options of the correct type it would change this behavior.
However there is a non-trivial collection of which combinations parameters can be specified or not (see the logic in the code here), so each argument isn't truly independently optional. It may be a good idea to better factor out these behaviors at some point into an auxiliary class that handles the parameters and associated logic for generating new values (and mutated existing ones).
from axelrod.
However there is a non-trivial collection of which combinations parameters can be specified or not (see the logic in the code here), so each argument isn't truly independently optional.
Yup, you are right.
It may be a good idea to better factor out these behaviors at some point into an auxiliary class that handles the parameters and associated logic for generating new values (and mutated existing ones).
Just to make sure I understood you correctly: you suggest that we create an auxiliary class that would be responsible for generating random inputs (regarding the player class) when arguments are optional and not given by the user, and also to be able to mutate default values?
from axelrod.
Related Issues (20)
- Reorganisation of documentation. HOT 3
- Reorganisation ? of cheating strategies
- Add a citation.cff file HOT 6
- Links to contributing guide broken by docs restructure
- Implement asymmetric games HOT 6
- Game classification HOT 4
- Implement abstract games more fully (5.0.0)
- Restructure strategies folder HOT 4
- Documentation for 5.0.0
- Simplify/move the `ResultSet` HOT 1
- Expressing in a formal logical language HOT 2
- You may have missed some details in your code HOT 1
- I couldn't find the strategy submitted by Mauk in the competition for 19th place HOT 2
- If I want to test the first tournament, what should I do based on your codeοΌ HOT 2
- Do you know the source code of the first tournament? HOT 2
- axelrod.plot.Plot may be incompatible with recent Pandas udpates HOT 2
- Change the TFT in the first tournament HOT 3
- High-noise Tournament for comparison HOT 1
- Supporting Python 3.12 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. πππ
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google β€οΈ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from axelrod.