I keep getting gateway timeouts. Keep trying and hope for the best?
my vps is a little overloaded at the moment as I am doing some brain training. Reduce the character count to around 1500 seems to work for me. I'll need to fiddle with something more ajaxy as a work around.
Private Mod Note
():
Rollback Post to RevisionRollBack
Proud to be saving the world since 1984 -- I also have an open source website to make AI generated magic cards. Source code
I can't imagine how someone could think it's a good idea to try running this sort of thing on an Android device, but humans can be surprising.
Actually, once it's already trained it's not hard to do. There has been a ton of work on optimizing neural network models to run in constrained conditions. Voice recognition and such on smart phones uses LSTM networks like ours, for example.
Good point, I was only considering the training part.
Now I want to know what Linklash is
Good point, I was only considering the training part.
Now I want to know what Linklash is
I imagine that it averaged "lifelink" and "unleash", but what that actually means is beyond me, haha.
---
For the record, I started training a modern-only run with the bias-added version of the network and names removed from the cards. I'll let you know how things go.
EDIT: Btw, since I'm training on modern cards only, I should have training completed in 12 hours or so, rather than 20+.
On Thursday I started my first experiment using my toolbox! However, I have been unable to connect to my work network this weekend to check on its progress. I was just finally able to reconnect to the network, only to find that my experiment crashed due to a silly typo. Oh well, it was an easy fix and now my experiment is starting back up for real!
jml34, we're currently having talks at work as to whether or not we want to release our toolbox for public use. If it turns out we do not release it, I can point you to another really great python library that you can use to train NNs and RNNs.
Battlefow Guide {3}{w}
Creature 3/3 — Human Soldier
When Battlefow Guide enters the battlefield, put 4 1/1 white Soldier creature tokens onto the battlefield instead.
# guides small soldier to the battlefield, then, er, then what?
It's worded improperly. Should be "If Battleflow guide would enter the battlefield..."
The result is that any effect that would put it onto the battlefield, including casting it, instead generates 4 1/1 tokens on resolution.
Not sure what happens after the effect resolves, though. The spell's on the stack, its entering of the battlefield is replaced with the token generations... And then? Does it stay on the stack indefinitely? Return to hand? Go to your graveyard?
While it wasn't quite properly defined, one of the suggestions I got for Linklash was that if a source would deal damage to you, you may have 1 of that damage dealt to target creature instead.
Then I tried suggesting "when another creature with linklash dies,"
|charging wanderer||creature||human druid|N|&^/&^|{GG}|sacrifice @: target creature gets +&^/+&^ until end of turn.linklash: when another creature with linklash dies, you may copy those cards. if you do, that creature gets -X/-X until end of turn, where X is that card's converted mana cost.|
#well defined X, except that creature and those cards are not defined
|razortimber charm||instant|||O||{UU}|target player draws two cards, then discards all the cards in his or her hand.linklash: when another creature with linklash dies, put a &^/&^ green saproling creature token onto the battlefield.|
# would be nice on a creature... also weird discard after draw! Mean.
|mad sliver||creature||sliver|A|&^^^/&^^^|{^^WW^^WW}|all sliver creatures have haste.linklash: when another creature with linklash dies, put a % counter on @.|
#this is awesome. a functioning sliver and useful ability
|ensouled catacombs||land|||N|||T: add {^} to your mana pool.\{^^}, T: put a -&^/-&^ counter on @. activate this ability only any time you could cast a sorcery.linklash: when another creature with linklash dies, put a % counter on @.\remove faur % counters from @: put a -&^/-&^ counter on target creature.|
#it mispelled four, but at least it got the counters doing something useful, if horribly slow
|visions of blood||instant|||N||{^GG^}|creatures you control get +&^/+&^ until end of turn. untap those creatures.linklash: when another creature with linklash dies, put a +&^/+&^ counter on @.|
#if only it was a creature
|convolute favor||instant|||O||{WW}|if you control a plains, you may cast @ without paying its mana cost.\you may search your library for a land card, put it onto the battlefield tapped, then shuffle your library.|
Well... that's something
I made up a version of linklash to work on any card type. 3 that work are attached.
And here's one that I couldn't save (on mobile) because the filename isn't valid (can't choose a different name on mobile):
|wild weapongrus||creature||zombie|O|&^^/&^|{^^BB}|when @ blocks, it gets +&^/+&^ until end of turn.\linklash: when another permanent with linklash is put into your graveyard this turn, each opponent may put a creature card from his or her hand onto the battlefield under your control.|
#should either be compulsory or under his or her control Or maybe they give you Phage. Does that make you lose since you control it?
(BTW, most images don't have the .png extention, which is a nuisance.)
|crenectal hero||creature||human soldier|N|&^^/&^^|{^^WW}|flying\{RR}, T: @ deals &^ damage to target creature or player.\linklash: when another permanent with linklash is put into your graveyard this turn, you may put a +&^/+&^ counter on @.|
|act of the blood rats||creature||imp|O|&^^^/&^^|{^^BB^^}|flying\whenever @ deals combat damage to a creature, that creature's controller may search his or her library for a card and reveal them. that player discards that card.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^^ damage to that werewolves on the battlefield.|
|rift hunt storm||creature||faerie|O|&^^/&^|{^UU}|flying\morph {^UU^^}\linklash: when another permanent with linklash is put into your graveyard this turn, you may pay {BB^}. if you do, draw two cards instead.|
|fluxmage bond||enchantment|||N||{BBBB}|at the beginning of your upkeep, you may pay {^^^^}. if you do, put a +&^/+&^ counter on @.\linklash: when another permanent with linklash is put into your graveyard this turn, exile that card.|
|constricton's covenant||enchantment||aura|O||{^UU^}|enchant creature\when @ enters the battlefield, tap enchanted creature.\enchanted creature doesn't untap during its controller's untap step.\linklash: when another permanent with linklash is put into your graveyard this turn, you may put a % counter on it. if you do, return @ to your hand.|
|paldivide marshal||creature||human soldier|O|&^^/&^^|{GG^^}|{GG^^^}: target creature you control gains flying and deathtouch until end of turn.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^^^ damage to that player.|
|balefire mauler||creature||human soldier|O|&^^/&^^|{^^^WW}|flying\{WW}, T: tap target elf creature.\linklash: when another permanent with linklash is put into your graveyard this turn, you may put a &^/&^ white kithkin soldier creature token onto the battlefield.|
|seer's predator||artifact creature||bird|N|&^^/&^^^|{^^^^^}|flying\whenever @ attacks, defending player sacrifices a creature.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^ damage to that creature's controller.|
|nightmare shaman||creature||human cleric|N|&^/&^^^|{^^WW}|{^^WW}, T: prevent all damage that would be dealt to target creature or player this turn.\linklash: when another permanent with linklash is put into your graveyard this turn, you may draw a card.|
|flameship||land|||N|||@ enters the battlefield tapped.\when @ enters the battlefield, sacrifice it unless you return an untapped soldier you control to its owner's hand.\T: add {GG} to your mana pool.\linklash: when another permanent with linklash is put into your graveyard this turn, that player may put a % counter on @.|
|chain of dragons||sorcery|||O||{^RR^^}|@ deals &^^^^^^^ damage to target creature or player.\linklash: when another permanent with linklash of the chosen color is put into a graveyard from the battlefield, return @ to its owner's hand.|
#this one is good, maybe to good. Most of the rest just put a cost after the end of the whisper.
|infernal plague||sorcery|||O||{^^UU}|tap up to two target creatures. at the beginning of the next end step, destroy that creature.\linklash: when another permanent with linklash {^^BB^}|
|soldevi stampede||instant|||N||{^WW}|@ deals &^^^^^ damage to target creature or player.\linklash: when another permanent with linklash of the chosen color at a multicolored creature instead.|
|serra ascendancy||enchantment||aura|N||{^WW}|enchant creature\enchanted creature gets +&^^^^/+&^^^^ as long as it's white.\{^^^^}, T: put a &^^/&^^ blue djinn monk creature token with flying onto the battlefield. then if an opponent has no cards in hand, that player may put a &^^/&^^ black zombie creature token onto the battlefield. at the beginning of the next end step, each player draws a card.\linklash: when another permanent with linklash {^^UU}|
|steel collapse||sorcery|||O||{RR^}|@ deals &^ damage to target creature or player. clash with an opponent. if you win, that creature doesn't untap during its controller's next untap step.\linklash: when another permanent with linklash {^BB} \whenever you cast a blue spell, you may draw a card.|
|call to desire||enchantment|||A||{^^^RR}|whenever a player taps a land for mana, that player one or more cards he or she revealed this way. put a &^^/&^^ black zombie creature token onto the battlefield.\linklash: when another permanent with linklash {^GG} \whenever you cast a spirit or arcane spell, you may put a &^/&^ green insect creature token onto the battlefield.|
|mask of night||instant|||P||{WW}|target creature gets +&^^^^/+&^^^^ until end of turn.\linklash: when another permanent with linklash {^RR}|
|worldly cannon||artifact||equipment|N||{^^}|equip {^^}\equipped creature gets +&^/+&^ and has vigilance.\whenever equipped creature deals damage to a player, you may draw a card.\enchanted creature gets +&^/+&^.\linklash: when another permanent with linklash power is &^^^^^^^ or greater.\enchanted creature gets +&^/+&^.|
|sage's graverath||land|||A|||T: add {^} to your mana pool.\{^^^^}, T, sacrifice @: target opponent loses &^^^ life.\linklash: when another permanent with linklash {^UU^}
I tried a different version, which worked better. Sometimes surprisingly well:
|junk construct||artifact creature||construct|A|&^^^^^/&^^^^^|{^^^^^^^^}|trample, haste\when @ enters the battlefield, target opponent puts the top five cards of his or her library into his or her graveyard.\linklash: when another spell with linklash is cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.|
#ouch!
ATTACHMENTS
-ice blast--instant---A--{^WW}-search your library for a card and reveal it. if you do, shuffle your library.-linklash- when ...
-martyr's bane--enchantment---N--{^WW}-{WW^}- target creature gains flying until end of turn.-linklash- when another permanen...
-venomous tactics--instant---O--{UU}-return target creature card from your graveyard to your hand.-linklash- when another per...
I've finally finished the first releasable version of my batcher. It's available as part of mtg-rnn.
The latest update now provides Talcos' sample_hs_v3.lua, in addition to the modifications he made to the LSTM model. Development is ongoing.
Currently, the batcher only supports randomizing the order of cards in the training set. You can read about the details in the Readme. I believe the current code should be an all-around improvement in all cases, though I don't have any data to confirm that yet. Give it a try and let me know what happens!
I have plans to add the ability to randomize mana symbols and field order as well as just the order of the cards. I also figured out how to do the training on one card at a time thing, I think, but that isn't implemented yet either. I'm very curious to see how it works, but it will probably be horrendously slow. I'm currently working on a sort of control group experiment by training a network with -batch_size 1 and -seq_length 1000, and the total training time will be about 4.5 days, even on my GPU.
mad sliver||creature||sliver|A|&^^^/&^^^|{^^WW^^WW}|all sliver creatures have haste.linklash: when another creature with linklash dies, put a % counter on @.|
#this is awesome. a functioning sliver and useful ability
If that's a +1/+1 counter, that feels like the Huntsmen of Annuvin from the Chronicles of Prydain - "As their numbers dwindle, their power grows".
Start with four 3/3 Mad Slivers; then three 4/4; then two 5/5; then one 6/6.
On Thursday I started my first experiment using my toolbox! However, I have been unable to connect to my work network this weekend to check on its progress. I was just finally able to reconnect to the network, only to find that my experiment crashed due to a silly typo. Oh well, it was an easy fix and now my experiment is starting back up for real!
jml34, we're currently having talks at work as to whether or not we want to release our toolbox for public use. If it turns out we do not release it, I can point you to another really great python library that you can use to train NNs and RNNs.
Exciting! Let us know how that turns out! I'd love to see your results.
And your people have a toolbox of their own? Is it the capabilities of what's currently available don't match your needs, or is it more of a performance matter?
EDIT: Or, for that matter, is it an ease-of-implementation sort of deal? That's another potential factor.
I quite like this thing I managed to get out of it:
Word of Summoning 1R
Instant
Word of Summoning deals 1 damage to target creature or player. If that creature was a multicoloured creature, destroy it.
#This is just a cool card. Feels Ravnican, or more to the point anti-Ravnican.
I agree. It seems like a spell belonging to the gateless, the oppressed proleteriats. None of the multicolored guilds really speak for the workers, the common people. The guilds deserve what's coming to them.
Nothing beginning with "Garruk" in magic is ever anything other than G, B, or BG. However, the RNN produced on demand... 2 cards, out of the 16, that followed that rule, and 1 artifact which was remotely green.
If it gave you only G/B/BG cards, I would be terribly concerned, as that would be an example of overfitting on the data. Only 0.07325% of Magic cards have Garruk in their title, and for the network to assume that Garruk implied green and black would be reading too much into it.
For the same reason, Avacyn concerns me slightly, haha. Are you saying you're getting white angels every time, or what?
Planeswalker cards are very few in number. This makes sense, as planeswalkers are rare beings, so rare that most scholars dismiss them as mere myths, if they have even heard of them at all. You, a human player, see them as iconic (they stand out for you), but for the network they're just cards like any other, and the network has very little to go on in terms of understanding how they work.
The other problem is that planeswalker cards push the limit on the number of characters a Magic card can have, and the network errs on the side of caution and usually cuts them off after granting them just one ability. This is because the network tries to reliably imitate Magic cards, and a huge part of that is knowing when a Magic card is done. As I showed in posts while back, I found a number of cells that I call "regulators" that prevent a card from going on too long, that sort of thing. Part of the network knows that planeswalkers need three abilities, but they are overruled by the regulators, who demand that cards not exceed a certain length.
I have plans to add the ability to randomize mana symbols and field order as well as just the order of the cards. I also figured out how to do the training on one card at a time thing, I think, but that isn't implemented yet either. I'm very curious to see how it works, but it will probably be horrendously slow. I'm currently working on a sort of control group experiment by training a network with -batch_size 1 and -seq_length 1000, and the total training time will be about 4.5 days, even on my GPU.
I think that's painful and tedious, but it's also necessary if we want to establish just what the effects of chopping/splicing cards are.
----
Less than two hours on training until we reach epoch 22, which is the stopping point I've defined (as that's as far as I've trained the other ones, and I'm trying to keep things similar across runs so we can make comparisons more easily). Current training losses are at or below 0.25, in large part because I took out the names, which are very difficult to get right and because the resources previously spent studying names are now spent on other parts of the card. It's not so low that I'm concerned about overfitting, but I do hope that the modern-only card pool is sufficiently diverse and large enough to foster creativity on the part of the network.
For the record, training completed on the latest network. I'm busy today so I don't have time right now to make a full report until later, but I can say that both training and validation loss are about 0.10 lower (that's 25% better) than previous networks, but keep in mind that this is partially due to the fact that the we removed the names, and partially due to the fact that we only trained on modern cards so there are fewer abilities and such to memorize.
For the most part, the cards are fresh and interesting. I get the feeling that color discipline is slightly better and garbage cards are slightly fewer in number, but I'm going to have do create a large dump of cards and do some analysis to see whether that's really the case or not. A few examples (note that the names are missing so I had to supply them):
Mysterious Ally 3G
Creature - Elf Archer Ally (Common)
Whenever Mysterious Ally or another ally enters the battlefield under your control, you may put a charge counter on Mysterious Ally.
Remove three charge counters from Mysterious Ally: Add one mana of any color to your mana pool.
3/3
#Note that it uses the ally text, and diverges from the use of +1/+1 counters, but still ties it all together to make a coherent card.
Mysterious Beastcaller 3GG
Creature - Elf Warrior (Rare) T: put a 3/3 green Elephant creature token onto the battlefield.
As long as you have more cards in hand than each opponent, Mysterious Beastcaller gets +1/+1 and has lifelink.
3/4
But I'm still seeing cards with errors here and there:
Mysterious Thoughtdelver BB
Creature - Zombie Wizard (Rare)
At the beginning of your upkeep, put the top four cards of your library into your graveyard.
Flashback 4R
2/2
#Misused ability
Mysterious Anthem 2WW
Enchantment (Rare)
As Mysterious Anthem enters the battlefield, choose a creature type.
Creatures you control get +1/+1.
#It cares about creatures, which is good. But notice that its not "creatures of the chosen type", just all creatures you control.
Enigmatic Artifacthate UU
Enchantment (Rare) UU: Look at the top four cards of your library. You may reveal an artifact card from among them and exile that card.
#I hate how all these pesky artifacts keep getting into my deck!
There are of course ways we could improve upon the network. The gradient norms were high enough towards the end of training that I have a feeling that we'd get slightly better performance if we trained the network for longer. There's also the question of what the ideal starting values for biases besides that of the forget gates.
As to jml34, interesting ideas! I'll comment on them later when I have the time.
EDIT: I'm generating a large dump of cards for later analysis. I have some specific color identity tests that I want to do, as well as seeing what percentage of cards are garbage (with the hopes that that figure will be lower than before).
And your people have a toolbox of their own? [...] Or, for that matter, is it an ease-of-implementation sort of deal? That's another potential factor.
Pretty much the ease-of-implementation. There are great NN libraries already so we didn't have to reinvent the wheel, so we just made a toolset that makes using these other libraries much easier and more streamlined. Plus there are a few types of layers and other additions that we came up with and added as well.
I was idly generating some cards through Croxis' website, using Talcos' NN, playing with some mechanics I'm testing to see what the network would make with them. It came up with this:
Noble Unicorn 6G
Uncommon
Creature ~ Unicorn
Augment - Whenever a source deals damage to Noble Unicorn, prevent that damage.
Whenever a player casts a spell, that player may put a 0/2 colorless prism artifact creature token onto the battlefield.
6/6
Yup, exactly like that, with no changes whatsoever. An unicorn that protects itself and gives the players animated prisms.
Murderurious Ghoul {3}{b}{b}
Creature 5/4 — Horror
[Trample], [Haste]
Murderurious Ghoul can't block.
Other black creatures you control get +1/+1.
When Murderurious Ghoul leaves the battlefield, return up to 3 target creature cards from your graveyard to your hand.
This is a baller card. First off, love the name. It's not just murderous but murderURIous. That's at least FIVE TIMES more murderous than murderous. Second, it's pretty much the definition of what a mythic should be - borderline overpowered/undercosted but not gamebreaking, with an interesting set of abilities you can build a deck around.
Also: love the Linklash ability word someone posted. Don't think any similar abilities have been done before, but it's really cool, and appropriate for a "Graveyard matters" set. Also pretty thematic for Phyrexians IMO to have a connection to each other that triggers on death.
For the same reason, Avacyn concerns me slightly, haha. Are you saying you're getting white angels every time, or what?
I'm getting large numbers of humans and I got an angel or two, and they're disproportionately on-colour. Should that not be happening?
Nah, that's fine. It's just interesting when the network gets fixated on some proper names but not others. It's likely due to the fact that few cards start with or involve the letters "avac" which makes the name stand out more.
EDIT: My machines are currently tied up learning mathematics and programming languages, rather than Magic cards. One funny result:
Input: 8 + 10
Expected Output: 18
Output the network gave me: 810
The network understands that addition is a kind of composition, but early on in the training process it doesn't quite understand what that really means. It just mashes numbers together and hopes it gets the right answer. However, over time it does learn how to do math correctly.
EDIT(2): Just one more:
Input: j=8
for x in range(3):j+=5
print(j)
Target: 23.
Prediction: 13.
Clever. It understands the idea of variables and can kinda-sorta do single digit addition, but it's still fuzzy on loops. Not bad though. It learns very quickly.
Murderurious Ghoul {3}{b}{b}
Creature 5/4 — Horror
[Trample], [Haste]
Murderurious Ghoul can't block.
Other black creatures you control get +1/+1.
When Murderurious Ghoul leaves the battlefield, return up to 3 target creature cards from your graveyard to your hand.
This is a baller card. First off, love the name. It's not just murderous but murderURIous. That's at least FIVE TIMES more murderous than murderous. Second, it's pretty much the definition of what a mythic should be - borderline overpowered/undercosted but not gamebreaking, with an interesting set of abilities you can build a deck around.
.
Oh my, that is a truly wonderful design. I'll have to make a card of that tonight. Murderurious indeed. I feel like with all its abilities it could be 4BB or 5BB but if it's a pushed mythic, 5cmc seems right.
Regarding its last one; if it goes to the graveyard, can it return itself as one of the 3 targets? If yes, wow. It's undead too.
Murderurious Ghoul {3}{b}{b}
Creature 5/4 — Horror
[Trample], [Haste]
Murderurious Ghoul can't block.
Other black creatures you control get +1/+1.
When Murderurious Ghoul leaves the battlefield, return up to 3 target creature cards from your graveyard to your hand.
This is a baller card. First off, love the name. It's not just murderous but murderURIous. That's at least FIVE TIMES more murderous than murderous. Second, it's pretty much the definition of what a mythic should be - borderline overpowered/undercosted but not gamebreaking, with an interesting set of abilities you can build a deck around.
.
Oh my, that is a truly wonderful design. I'll have to make a card of that tonight. Murderurious indeed. I feel like with all its abilities it could be 4BB or 5BB but if it's a pushed mythic, 5cmc seems right.
Regarding its last one; if it goes to the graveyard, can it return itself as one of the 3 targets? If yes, wow. It's undead too.
It cannot. The ability triggers when it leaves the battlefield but before it hits the graveyard.
OK, that's probably a good thing, otherwise that'd be bat***** crazy powerful. It beggars belief that the network came out with something so awesome and perfectly within the rules, though.
off-topic, but i can't resist getting into a rules debate.
when you put the triggered ability on the stack, our murderurious friend will already be in the graveyard, which means you can target it with the ability you're putting on the stack.
off-topic, but i can't resist getting into a rules debate.
when you put the triggered ability on the stack, our murderurious friend will already be in the graveyard, which means you can target it with the ability you're putting on the stack.
For the record, I'm entertaining guests tonight, so I'll have to hold off on posting more detailed updates about the new network. However...
EDIT: And by entertaining, I mean wowing them with technological wizardry and good food. New guests always end up asking questions about the voice controlled this and that, stumbling about with a VR headset on, and leafing through machine-generated literature and wondering when I'll end up making their job obsolete.
I will say that I made a dump of about 9000 cards, and at least 10.59% of cards have some kind of syntactic or semantic violation in them, according to a filtering script I concocted, which eliminates cards with a variety of obvious grammatical mistakes and off-color things like green counterspells. The number of violations is probably slightly higher, as I don't catch everything, but that's a good ballpark figure for how much bad there is relative to good.
That's actually a dramatic improvement. Previous dumps, like the ones I used to construct the last test set, had garbage rates of 14%, 23%, 20%, 28%, and 18% using the same metric.
10% is very, very low. That's the best in terms of quality that we've ever achieved.
And I'm sure we can do even better than that. There are clear ways that we can get some more improvements. So that's exciting.
I keep getting gateway timeouts. Keep trying and hope for the best?
my vps is a little overloaded at the moment as I am doing some brain training. Reduce the character count to around 1500 seems to work for me. I'll need to fiddle with something more ajaxy as a work around.
Now I want to know what Linklash is
Yes! It should work just fine. But let me know if for whatever reason it doesn't.
I imagine that it averaged "lifelink" and "unleash", but what that actually means is beyond me, haha.
---
For the record, I started training a modern-only run with the bias-added version of the network and names removed from the cards. I'll let you know how things go.
EDIT: Btw, since I'm training on modern cards only, I should have training completed in 12 hours or so, rather than 20+.
My LinkedIn profile... thing (I have one of those now!).
My research team's webpage.
The mtg-rnn repo and the mtg-encode repo.
jml34, we're currently having talks at work as to whether or not we want to release our toolbox for public use. If it turns out we do not release it, I can point you to another really great python library that you can use to train NNs and RNNs.
Creature 3/3 — Human Soldier
When Battlefow Guide enters the battlefield, put 4 1/1 white Soldier creature tokens onto the battlefield instead.
# guides small soldier to the battlefield, then, er, then what?
It's worded improperly. Should be "If Battleflow guide would enter the battlefield..."
The result is that any effect that would put it onto the battlefield, including casting it, instead generates 4 1/1 tokens on resolution.
Not sure what happens after the effect resolves, though. The spell's on the stack, its entering of the battlefield is replaced with the token generations... And then? Does it stay on the stack indefinitely? Return to hand? Go to your graveyard?
As is, I'd say it's not a legal card.
Then I tried suggesting "when another creature with linklash dies,"
|charging wanderer||creature||human druid|N|&^/&^|{GG}|sacrifice @: target creature gets +&^/+&^ until end of turn.linklash: when another creature with linklash dies, you may copy those cards. if you do, that creature gets -X/-X until end of turn, where X is that card's converted mana cost.|
#well defined X, except that creature and those cards are not defined
|razortimber charm||instant|||O||{UU}|target player draws two cards, then discards all the cards in his or her hand.linklash: when another creature with linklash dies, put a &^/&^ green saproling creature token onto the battlefield.|
# would be nice on a creature... also weird discard after draw! Mean.
|mad sliver||creature||sliver|A|&^^^/&^^^|{^^WW^^WW}|all sliver creatures have haste.linklash: when another creature with linklash dies, put a % counter on @.|
#this is awesome. a functioning sliver and useful ability
|ensouled catacombs||land|||N|||T: add {^} to your mana pool.\{^^}, T: put a -&^/-&^ counter on @. activate this ability only any time you could cast a sorcery.linklash: when another creature with linklash dies, put a % counter on @.\remove faur % counters from @: put a -&^/-&^ counter on target creature.|
#it mispelled four, but at least it got the counters doing something useful, if horribly slow
|visions of blood||instant|||N||{^GG^}|creatures you control get +&^/+&^ until end of turn. untap those creatures.linklash: when another creature with linklash dies, put a +&^/+&^ counter on @.|
#if only it was a creature
Well... that's something
I made up a version of linklash to work on any card type. 3 that work are attached.
And here's one that I couldn't save (on mobile) because the filename isn't valid (can't choose a different name on mobile):
|wild weapongrus||creature||zombie|O|&^^/&^|{^^BB}|when @ blocks, it gets +&^/+&^ until end of turn.\linklash: when another permanent with linklash is put into your graveyard this turn, each opponent may put a creature card from his or her hand onto the battlefield under your control.|
#should either be compulsory or under his or her control Or maybe they give you Phage. Does that make you lose since you control it?
(BTW, most images don't have the .png extention, which is a nuisance.)
|act of the blood rats||creature||imp|O|&^^^/&^^|{^^BB^^}|flying\whenever @ deals combat damage to a creature, that creature's controller may search his or her library for a card and reveal them. that player discards that card.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^^ damage to that werewolves on the battlefield.|
|rift hunt storm||creature||faerie|O|&^^/&^|{^UU}|flying\morph {^UU^^}\linklash: when another permanent with linklash is put into your graveyard this turn, you may pay {BB^}. if you do, draw two cards instead.|
|fluxmage bond||enchantment|||N||{BBBB}|at the beginning of your upkeep, you may pay {^^^^}. if you do, put a +&^/+&^ counter on @.\linklash: when another permanent with linklash is put into your graveyard this turn, exile that card.|
|constricton's covenant||enchantment||aura|O||{^UU^}|enchant creature\when @ enters the battlefield, tap enchanted creature.\enchanted creature doesn't untap during its controller's untap step.\linklash: when another permanent with linklash is put into your graveyard this turn, you may put a % counter on it. if you do, return @ to your hand.|
|paldivide marshal||creature||human soldier|O|&^^/&^^|{GG^^}|{GG^^^}: target creature you control gains flying and deathtouch until end of turn.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^^^ damage to that player.|
|balefire mauler||creature||human soldier|O|&^^/&^^|{^^^WW}|flying\{WW}, T: tap target elf creature.\linklash: when another permanent with linklash is put into your graveyard this turn, you may put a &^/&^ white kithkin soldier creature token onto the battlefield.|
|seer's predator||artifact creature||bird|N|&^^/&^^^|{^^^^^}|flying\whenever @ attacks, defending player sacrifices a creature.\linklash: when another permanent with linklash is put into your graveyard this turn, @ deals &^ damage to that creature's controller.|
|nightmare shaman||creature||human cleric|N|&^/&^^^|{^^WW}|{^^WW}, T: prevent all damage that would be dealt to target creature or player this turn.\linklash: when another permanent with linklash is put into your graveyard this turn, you may draw a card.|
|flameship||land|||N|||@ enters the battlefield tapped.\when @ enters the battlefield, sacrifice it unless you return an untapped soldier you control to its owner's hand.\T: add {GG} to your mana pool.\linklash: when another permanent with linklash is put into your graveyard this turn, that player may put a % counter on @.|
#this one is good, maybe to good. Most of the rest just put a cost after the end of the whisper.
|infernal plague||sorcery|||O||{^^UU}|tap up to two target creatures. at the beginning of the next end step, destroy that creature.\linklash: when another permanent with linklash {^^BB^}|
|soldevi stampede||instant|||N||{^WW}|@ deals &^^^^^ damage to target creature or player.\linklash: when another permanent with linklash of the chosen color at a multicolored creature instead.|
|serra ascendancy||enchantment||aura|N||{^WW}|enchant creature\enchanted creature gets +&^^^^/+&^^^^ as long as it's white.\{^^^^}, T: put a &^^/&^^ blue djinn monk creature token with flying onto the battlefield. then if an opponent has no cards in hand, that player may put a &^^/&^^ black zombie creature token onto the battlefield. at the beginning of the next end step, each player draws a card.\linklash: when another permanent with linklash {^^UU}|
|steel collapse||sorcery|||O||{RR^}|@ deals &^ damage to target creature or player. clash with an opponent. if you win, that creature doesn't untap during its controller's next untap step.\linklash: when another permanent with linklash {^BB} \whenever you cast a blue spell, you may draw a card.|
|call to desire||enchantment|||A||{^^^RR}|whenever a player taps a land for mana, that player one or more cards he or she revealed this way. put a &^^/&^^ black zombie creature token onto the battlefield.\linklash: when another permanent with linklash {^GG} \whenever you cast a spirit or arcane spell, you may put a &^/&^ green insect creature token onto the battlefield.|
|mask of night||instant|||P||{WW}|target creature gets +&^^^^/+&^^^^ until end of turn.\linklash: when another permanent with linklash {^RR}|
|worldly cannon||artifact||equipment|N||{^^}|equip {^^}\equipped creature gets +&^/+&^ and has vigilance.\whenever equipped creature deals damage to a player, you may draw a card.\enchanted creature gets +&^/+&^.\linklash: when another permanent with linklash power is &^^^^^^^ or greater.\enchanted creature gets +&^/+&^.|
|sage's graverath||land|||A|||T: add {^} to your mana pool.\{^^^^}, T, sacrifice @: target opponent loses &^^^ life.\linklash: when another permanent with linklash {^UU^}
I tried a different version, which worked better. Sometimes surprisingly well:
|junk construct||artifact creature||construct|A|&^^^^^/&^^^^^|{^^^^^^^^}|trample, haste\when @ enters the battlefield, target opponent puts the top five cards of his or her library into his or her graveyard.\linklash: when another spell with linklash is cast, the controller of the permanent it becomes sacrifices it at the beginning of the next cleanup step.|
#ouch!
The latest update now provides Talcos' sample_hs_v3.lua, in addition to the modifications he made to the LSTM model. Development is ongoing.
Currently, the batcher only supports randomizing the order of cards in the training set. You can read about the details in the Readme. I believe the current code should be an all-around improvement in all cases, though I don't have any data to confirm that yet. Give it a try and let me know what happens!
I have plans to add the ability to randomize mana symbols and field order as well as just the order of the cards. I also figured out how to do the training on one card at a time thing, I think, but that isn't implemented yet either. I'm very curious to see how it works, but it will probably be horrendously slow. I'm currently working on a sort of control group experiment by training a network with -batch_size 1 and -seq_length 1000, and the total training time will be about 4.5 days, even on my GPU.
If that's a +1/+1 counter, that feels like the Huntsmen of Annuvin from the Chronicles of Prydain - "As their numbers dwindle, their power grows".
Start with four 3/3 Mad Slivers; then three 4/4; then two 5/5; then one 6/6.
Exciting! Let us know how that turns out! I'd love to see your results.
And your people have a toolbox of their own? Is it the capabilities of what's currently available don't match your needs, or is it more of a performance matter?
EDIT: Or, for that matter, is it an ease-of-implementation sort of deal? That's another potential factor.
I agree. It seems like a spell belonging to the gateless, the oppressed proleteriats. None of the multicolored guilds really speak for the workers, the common people. The guilds deserve what's coming to them.
If it gave you only G/B/BG cards, I would be terribly concerned, as that would be an example of overfitting on the data. Only 0.07325% of Magic cards have Garruk in their title, and for the network to assume that Garruk implied green and black would be reading too much into it.
For the same reason, Avacyn concerns me slightly, haha. Are you saying you're getting white angels every time, or what?
Planeswalker cards are very few in number. This makes sense, as planeswalkers are rare beings, so rare that most scholars dismiss them as mere myths, if they have even heard of them at all. You, a human player, see them as iconic (they stand out for you), but for the network they're just cards like any other, and the network has very little to go on in terms of understanding how they work.
The other problem is that planeswalker cards push the limit on the number of characters a Magic card can have, and the network errs on the side of caution and usually cuts them off after granting them just one ability. This is because the network tries to reliably imitate Magic cards, and a huge part of that is knowing when a Magic card is done. As I showed in posts while back, I found a number of cells that I call "regulators" that prevent a card from going on too long, that sort of thing. Part of the network knows that planeswalkers need three abilities, but they are overruled by the regulators, who demand that cards not exceed a certain length.
Awesome! Thank you so much!
I think that's painful and tedious, but it's also necessary if we want to establish just what the effects of chopping/splicing cards are.
----
Less than two hours on training until we reach epoch 22, which is the stopping point I've defined (as that's as far as I've trained the other ones, and I'm trying to keep things similar across runs so we can make comparisons more easily). Current training losses are at or below 0.25, in large part because I took out the names, which are very difficult to get right and because the resources previously spent studying names are now spent on other parts of the card. It's not so low that I'm concerned about overfitting, but I do hope that the modern-only card pool is sufficiently diverse and large enough to foster creativity on the part of the network.
My LinkedIn profile... thing (I have one of those now!).
My research team's webpage.
The mtg-rnn repo and the mtg-encode repo.
For the most part, the cards are fresh and interesting. I get the feeling that color discipline is slightly better and garbage cards are slightly fewer in number, but I'm going to have do create a large dump of cards and do some analysis to see whether that's really the case or not. A few examples (note that the names are missing so I had to supply them):
Mysterious Ally
3G
Creature - Elf Archer Ally (Common)
Whenever Mysterious Ally or another ally enters the battlefield under your control, you may put a charge counter on Mysterious Ally.
Remove three charge counters from Mysterious Ally: Add one mana of any color to your mana pool.
3/3
#Note that it uses the ally text, and diverges from the use of +1/+1 counters, but still ties it all together to make a coherent card.
Mysterious Beastcaller
3GG
Creature - Elf Warrior (Rare)
T: put a 3/3 green Elephant creature token onto the battlefield.
As long as you have more cards in hand than each opponent, Mysterious Beastcaller gets +1/+1 and has lifelink.
3/4
But I'm still seeing cards with errors here and there:
Mysterious Thoughtdelver
BB
Creature - Zombie Wizard (Rare)
At the beginning of your upkeep, put the top four cards of your library into your graveyard.
Flashback 4R
2/2
#Misused ability
Mysterious Anthem
2WW
Enchantment (Rare)
As Mysterious Anthem enters the battlefield, choose a creature type.
Creatures you control get +1/+1.
#It cares about creatures, which is good. But notice that its not "creatures of the chosen type", just all creatures you control.
Enigmatic Artifacthate
UU
Enchantment (Rare)
UU: Look at the top four cards of your library. You may reveal an artifact card from among them and exile that card.
#I hate how all these pesky artifacts keep getting into my deck!
There are of course ways we could improve upon the network. The gradient norms were high enough towards the end of training that I have a feeling that we'd get slightly better performance if we trained the network for longer. There's also the question of what the ideal starting values for biases besides that of the forget gates.
As to jml34, interesting ideas! I'll comment on them later when I have the time.
EDIT: I'm generating a large dump of cards for later analysis. I have some specific color identity tests that I want to do, as well as seeing what percentage of cards are garbage (with the hopes that that figure will be lower than before).
My LinkedIn profile... thing (I have one of those now!).
My research team's webpage.
The mtg-rnn repo and the mtg-encode repo.
Noble Unicorn 6G
Uncommon
Creature ~ Unicorn
Augment - Whenever a source deals damage to Noble Unicorn, prevent that damage.
Whenever a player casts a spell, that player may put a 0/2 colorless prism artifact creature token onto the battlefield.
6/6
Yup, exactly like that, with no changes whatsoever. An unicorn that protects itself and gives the players animated prisms.
Creature 5/4 — Horror
[Trample], [Haste]
Murderurious Ghoul can't block.
Other black creatures you control get +1/+1.
When Murderurious Ghoul leaves the battlefield, return up to 3 target creature cards from your graveyard to your hand.
This is a baller card. First off, love the name. It's not just murderous but murderURIous. That's at least FIVE TIMES more murderous than murderous. Second, it's pretty much the definition of what a mythic should be - borderline overpowered/undercosted but not gamebreaking, with an interesting set of abilities you can build a deck around.
Also: love the Linklash ability word someone posted. Don't think any similar abilities have been done before, but it's really cool, and appropriate for a "Graveyard matters" set. Also pretty thematic for Phyrexians IMO to have a connection to each other that triggers on death.
Nah, that's fine. It's just interesting when the network gets fixated on some proper names but not others. It's likely due to the fact that few cards start with or involve the letters "avac" which makes the name stand out more.
EDIT: My machines are currently tied up learning mathematics and programming languages, rather than Magic cards. One funny result:
Input: 8 + 10
Expected Output: 18
Output the network gave me: 810
The network understands that addition is a kind of composition, but early on in the training process it doesn't quite understand what that really means. It just mashes numbers together and hopes it gets the right answer. However, over time it does learn how to do math correctly.
EDIT(2): Just one more:
Input: j=8
for x in range(3):j+=5
print(j)
Target: 23.
Prediction: 13.
Clever. It understands the idea of variables and can kinda-sorta do single digit addition, but it's still fuzzy on loops. Not bad though. It learns very quickly.
My LinkedIn profile... thing (I have one of those now!).
My research team's webpage.
The mtg-rnn repo and the mtg-encode repo.
Oh my, that is a truly wonderful design. I'll have to make a card of that tonight. Murderurious indeed. I feel like with all its abilities it could be 4BB or 5BB but if it's a pushed mythic, 5cmc seems right.
Regarding its last one; if it goes to the graveyard, can it return itself as one of the 3 targets? If yes, wow. It's undead too.
It cannot. The ability triggers when it leaves the battlefield but before it hits the graveyard.
when you put the triggered ability on the stack, our murderurious friend will already be in the graveyard, which means you can target it with the ability you're putting on the stack.
Goblins have poor impulse control. Don't click this link!!
some of my favourite flavour text:
Wayward Soul
"no home no heart no hope"
—Stronghold graffito
Raging Goblin
He raged at the world, at his family, at his life. But mostly he just raged.
0.o really? Dats nutz
EDIT: And by entertaining, I mean wowing them with technological wizardry and good food. New guests always end up asking questions about the voice controlled this and that, stumbling about with a VR headset on, and leafing through machine-generated literature and wondering when I'll end up making their job obsolete.
I will say that I made a dump of about 9000 cards, and at least 10.59% of cards have some kind of syntactic or semantic violation in them, according to a filtering script I concocted, which eliminates cards with a variety of obvious grammatical mistakes and off-color things like green counterspells. The number of violations is probably slightly higher, as I don't catch everything, but that's a good ballpark figure for how much bad there is relative to good.
That's actually a dramatic improvement. Previous dumps, like the ones I used to construct the last test set, had garbage rates of 14%, 23%, 20%, 28%, and 18% using the same metric.
10% is very, very low. That's the best in terms of quality that we've ever achieved.
And I'm sure we can do even better than that. There are clear ways that we can get some more improvements. So that's exciting.
My LinkedIn profile... thing (I have one of those now!).
My research team's webpage.
The mtg-rnn repo and the mtg-encode repo.