You mentioned "The program starts by creating a population of totally random decks. Then, it gives each deck a score based on a number of factors, like color consistency, card synergy, card quality and mana curve.". May I ask you how exactly you evaluate programmatically card synergy and card quality?
In my software "The Vault", I implemented a module to find similar cards of a given card, and "interpreting" ability texts was revealed to be a difficult task.
In addition, I am very curious if the automatic deck builder is able to propose by itself Fetchlands, drawers like Brainstorm etc. in order to smooth/optimize the card flow so as to avoid converging towards "linear" decks (i.e. I draw, I play a card, end of turn, I draw, I play a card, end of turn ...). I also fear the automatic builder will not be able to favour cards which would have more synergies in a realistic metagame (as it has no information at all on the metagame, but prescribing decklists to define a metagame could help... This remains very difficult).
You have all my support for this ambitious project!
You are totally right about the program currently being agnostic about the metagame and smoothers. That will be for sure a challenge, and thank you for mentioning it! But you know, one step at a time, there is still much to do
I will check out your project. Seems very interesting!
Thanks
I am still pretty interested in having more details on how you intend to evaluate card synergies & card quality. This seems not at all straightforward, but it's the keystone of the program
If this is done in an effective way, your program will be a very powerful assistant for deck building.
I use regex to look for patterns in the card's oracle text and assign tags to them depending on the regex matches. Each tag knows with which other tags it synergizes. I check each card pair in the deck and determine if they synergize or not given their tags. The more card pairs synergize between each other the better overall synergy the deck has.
Example of two tags:
Tag: MillsOpponent
Regex: "(?<=opponent|player) mill"
Synergizes with tag: OpponentGraveyardMatters
Tag: OpponentGraveyardMatters
Regex: "(?<!exile.*)(player|opponent)('s)? graveyard"
Synergizes with tag: MillsOpponent
Cheers!
Private Mod Note
():
Rollback Post to RevisionRollBack
To post a comment, please login or register a new account.
I’m working on a program that creates random synergistic decks.
Full description and details in the following link:
https://blas-mena.itch.io/automatic-mtg-deckbuilder
Very intersting and ambitious project!
You mentioned "The program starts by creating a population of totally random decks. Then, it gives each deck a score based on a number of factors, like color consistency, card synergy, card quality and mana curve.". May I ask you how exactly you evaluate programmatically card synergy and card quality?
In my software "The Vault", I implemented a module to find similar cards of a given card, and "interpreting" ability texts was revealed to be a difficult task.
In addition, I am very curious if the automatic deck builder is able to propose by itself Fetchlands, drawers like Brainstorm etc. in order to smooth/optimize the card flow so as to avoid converging towards "linear" decks (i.e. I draw, I play a card, end of turn, I draw, I play a card, end of turn ...). I also fear the automatic builder will not be able to favour cards which would have more synergies in a realistic metagame (as it has no information at all on the metagame, but prescribing decklists to define a metagame could help... This remains very difficult).
You have all my support for this ambitious project!
You are totally right about the program currently being agnostic about the metagame and smoothers. That will be for sure a challenge, and thank you for mentioning it! But you know, one step at a time, there is still much to do
I will check out your project. Seems very interesting!
Cheers!
I am still pretty interested in having more details on how you intend to evaluate card synergies & card quality. This seems not at all straightforward, but it's the keystone of the program
If this is done in an effective way, your program will be a very powerful assistant for deck building.
Regards,
I use regex to look for patterns in the card's oracle text and assign tags to them depending on the regex matches. Each tag knows with which other tags it synergizes. I check each card pair in the deck and determine if they synergize or not given their tags. The more card pairs synergize between each other the better overall synergy the deck has.
Example of two tags:
Tag: MillsOpponent
Regex: "(?<=opponent|player) mill"
Synergizes with tag: OpponentGraveyardMatters
Tag: OpponentGraveyardMatters
Regex: "(?<!exile.*)(player|opponent)('s)? graveyard"
Synergizes with tag: MillsOpponent
Cheers!