APN-Pucky / tyrant_optimize

MIT License
15 stars 7 forks source link

TUO returning old DB result even when card buffed #53

Closed TrevorNBudd closed 1 year ago

TrevorNBudd commented 1 year ago

TUO v6.3.0 with db enabled is returning results from database even when they are no longer valid. As demonstrated below, I ran a sim twice with the db enabled (default). As expected the second run returned the result stored in the db. I then buffed one of the cards used - so the result should change. When I tested again, TUO still returned the result from the db even though this was no longer correct.

To cross check the results, TUO was also run with the no_db option. This generated correct results in all cases.

Testing v6.3.0 with db enabled (database deleted):
Command: .\tuo-debug.exe "Malika[1010], Furrage_Test2, Furrage_Test2" "Malika[1010], Furrage_Test1, Furrage_Test1" sim 1 +v
-------------------------------------------
DB version 
DB checksum 
Your Deck:1: Deck: S/HdCiHdCi
Malika, Furrage_Test2, Furrage_Test2
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10

Enemy's Deck:1: Deck: S/GdCiGdCi
Malika, Furrage_Test1, Furrage_Test1
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1

RNG seed 1535929304
------------------------------------------------------------------------
TURN 1 begins for P0 Commander [Malika hp:30]
P0 Commander [Malika hp:30] plays Assault 0 [Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10]
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Commander [Malika hp:30] for 10 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] absorbs 3 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:17] takes 0 counter damage from P1 Commander [Malika hp:20]
TURN 1 ends for P0 Commander [Malika hp:30]
------------------------------------------------------------------------
TURN 2 begins for P1 Commander [Malika hp:20]
P1 Commander [Malika hp:20] plays Assault 0 [Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1]
P1 Commander [Malika hp:20] Strike 3 on P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:17]
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:17] absorbs 3 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:200] attacks P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14] for 10-[20(armor)]=0 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:200] takes 10 counter damage from P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14]
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:190] activates Flurry x 2
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:190] attacks P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14] for 10-[20(armor)]=0 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:190] takes 10 counter damage from P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14]
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:180] attacks P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14] for 10-[20(armor)]=0 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:180] takes 10 counter damage from P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:14]
TURN 2 ends for P1 Commander [Malika hp:20]

...

TURN 13 begins for P0 Commander [Malika hp:30]
P0 Commander [Malika hp:30] Strike 3 on P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:10] but it evades
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:10] for 10 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0] dies
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] venoms P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0] by 0
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] absorbs 10 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:10] takes 0 counter damage from P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0]
P0 Assault 1 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Commander [Malika hp:10] for 10 damage
P1 Commander [Malika hp:0] dies
Dead and removed: P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0]
You win.
win%: 100 (1 / 1)
stall%: 0 (0 / 1)
loss%: 0 (0 / 1)
 0.519095s wall, 0.328125s user + 0.109375s system = 0.437500s CPU (84.3%)

// Turn by turn output indicates TUO ran a sim instead of pulling a result from the db

Repeating testing v6.3.0 with db enabled (database should now have been recreated):
Command: .\tuo-debug.exe "Malika[1010], Furrage_Test2, Furrage_Test2" "Malika[1010], Furrage_Test1, Furrage_Test1" sim 1 +v
-------------------------------------------
DB version v6.3.0-debug
DB checksum 825880214
Your Deck:1: Deck: S/HdCiHdCi
Malika, Furrage_Test2, Furrage_Test2
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10

Enemy's Deck:1: Deck: S/GdCiGdCi
Malika, Furrage_Test1, Furrage_Test1
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1

RNG seed 3478853736
win%: 100 (1 / 1)
stall%: 0 (0 / 1)
loss%: 0 (0 / 1)
 0.533524s wall, 0.312500s user + 0.062500s system = 0.375000s CPU (70.3%)

// TUO immediately returned a result indicating it came from the db

Testing v6.3.0 with db disabled:
Command: .\tuo-debug.exe "Malika[1010], Furrage_Test2, Furrage_Test2" "Malika[1010], Furrage_Test1, Furrage_Test1" sim 1 +v no-db
-------------------------------------------
Your Deck:1: Deck: S/HdCiHdCi
Malika, Furrage_Test2, Furrage_Test2
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10

Enemy's Deck:1: Deck: S/GdCiGdCi
Malika, Furrage_Test1, Furrage_Test1
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1
  Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1

RNG seed 2389774264
------------------------------------------------------------------------
TURN 1 begins for P0 Commander [Malika hp:30]
P0 Commander [Malika hp:30] plays Assault 0 [Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10]
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Commander [Malika hp:30] for 10 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] absorbs 3 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:17] takes 0 counter damage from P1 Commander [Malika hp:20]
TURN 1 ends for P0 Commander [Malika hp:30]
------------------------------------------------------------------------

...

TURN 13 begins for P0 Commander [Malika hp:30]
P0 Commander [Malika hp:30] Strike 3 on P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:10] but it evades
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:10] for 10 damage
P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0] dies
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] venoms P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0] by 0
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] absorbs 10 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:10] takes 0 counter damage from P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0]
P0 Assault 1 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Commander [Malika hp:10] for 10 damage
P1 Commander [Malika hp:0] dies
Dead and removed: P1 Assault 0 [Furrage_Test1 att:[[10(base)]]=10 hp:0]
You win.
win%: 100 (1 / 1)
stall%: 0 (0 / 1)
loss%: 0 (0 / 1)
 0.428256s wall, 0.296875s user + 0.031250s system = 0.328125s CPU (76.6%)

// _Same result reached when nodb option used


Testing v6.3.0 with db enabled (using buffed card Furrage_Test1):
Command: .\tuo-debug.exe "Malika[1010], Furrage_Test2, Furrage_Test2" "Malika[1010], Furrage_Test1, Furrage_Test1" sim 1 +v
-------------------------------------------
DB version v6.3.0-debug
DB checksum 825880214
Your Deck:1: Deck: S/HdCiHdCi
Malika, Furrage_Test2, Furrage_Test2
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10

Enemy's Deck:1: Deck: S/GdCiGdCi
Malika, Furrage_Test1, Furrage_Test1
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test1: 40/700/0 imperial, Evade 10, Counter 10, Flurry 2 every 1
  Furrage_Test1: 40/700/0 imperial, Evade 10, Counter 10, Flurry 2 every 1

RNG seed 1776061336
win%: 100 (1 / 1)
stall%: 0 (0 / 1)
loss%: 0 (0 / 1)
 0.537000s wall, 0.421875s user + 0.031250s system = 0.453125s CPU (84.4%)

// _Note FurrageTest1 is now buffed: From: "Furrage_Test1: 10/200/0 imperial, Evade 10, Counter 10, Flurry 2 every 1" To: "Furrage_Test1: 40/700/0 imperial, Evade 10, Counter 10, Flurry 2 every 1"). However TUO still returned the result from the db (which is based on the unbuffed card).

Testing v6.3.0 with db disabled (using buffed card Furrage_Test1):
Command: .\tuo-debug.exe "Malika[1010], Furrage_Test2, Furrage_Test2" "Malika[1010], Furrage_Test1, Furrage_Test1" sim 1 +v no-db
-------------------------------------------
Your Deck:1: Deck: S/HdCiHdCi
Malika, Furrage_Test2, Furrage_Test2
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10
  Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10

Enemy's Deck:1: Deck: S/GdCiGdCi
Malika, Furrage_Test1, Furrage_Test1
Malika: hp:30 raider, Counter 3, Heal raider 4, Strike 3
  Furrage_Test1: 40/700/0 imperial, Evade 10, Counter 10, Flurry 2 every 1
  Furrage_Test1: 40/700/0 imperial, Evade 10, Counter 10, Flurry 2 every 1

RNG seed 2963001288
------------------------------------------------------------------------
TURN 1 begins for P0 Commander [Malika hp:30]
P0 Commander [Malika hp:30] plays Assault 0 [Furrage_Test2: 10/200/0 imperial, Armor 20, Absorb 20, Counter 10]
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] attacks P1 Commander [Malika hp:30] for 10 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:20] absorbs 3 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:200 absorb:17] takes 0 counter damage from P1 Commander [Malika hp:20]
TURN 1 ends for P0 Commander [Malika hp:30]

...

TURN 8 begins for P1 Commander [Malika hp:10]
P1 Commander [Malika hp:10] Strike 3 on P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:20 absorb:10]
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:20 absorb:10] absorbs 3 damage
P1 Assault 0 [Furrage_Test1 att:[[40(base)]]=40 hp:580] attacks P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:20 absorb:7] for 40-[20(armor)]=20 damage
P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:0 absorb:7] dies
P1 Assault 0 [Furrage_Test1 att:[[40(base)]]=40 hp:580] venoms P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:0 absorb:7] by 0
P1 Assault 0 [Furrage_Test1 att:[[40(base)]]=40 hp:580] takes 10 counter damage from P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:0 absorb:7]
P1 Assault 0 [Furrage_Test1 att:[[40(base)]]=40 hp:570] activates Flurry x 2
P1 Assault 0 [Furrage_Test1 att:[[40(base)]]=40 hp:570] attacks P0 Commander [Malika hp:30] for 40 damage
P0 Commander [Malika hp:0] dies
Dead and removed: P0 Assault 0 [Furrage_Test2 att:[[10(base)]]=10 hp:0 absorb:7]
You lose.
win%: 0 (0 / 1)
stall%: 0 (0 / 1)
loss%: 100 (1 / 1)
 0.408814s wall, 0.218750s user + 0.046875s system = 0.265625s CPU (65.0%)

// When the db is disabled the correct result is returned.

APN-Pucky commented 1 year ago

Yes, that's what the strict-db flag is for see: https://github.com/APN-Pucky/tyrant_optimize/wiki/v5.0.0-database Then tuo discards the database if either the tuo version or card xmls change. (Correct me if I am wrong though, I did not yet look through all of your example)

APN-Pucky commented 1 year ago

We can also make that the enabled default for following tuo releases.

TrevorNBudd commented 1 year ago

With regard to the strict-db flag, when you say TUO aborts, does that mean it "bombs out" without a solution? The preferred default would be that it discards the current database and runs with a new blank database. Thus it would still generate a solution and start rebuilding the database. It would be cool if it could tell when cards change and discard entries based on the old card (but I don't know how difficult that would be or if it would be worth it).

In general, the db flags need to be added to the flags page, "https://github.com/APN-Pucky/tyrant_optimize/wiki/Flags". A lot of users would benefit from this. Especially true for the db-limit N flag since there were complaints about the db size.

APN-Pucky commented 1 year ago

So far it just stops with an error. Since I did not want to delete the database without the user's knowledge. I could also just move it to database.yml.bakN.

APN-Pucky commented 1 year ago

TUO can not know which cards have changed since it does not have a copy of the previous cards_section.xml. Also changes to TUO need a whole discard unless I encode into every tuo version what changed between the version, which cards it affects and filter those, but that is not worth the effort, so it will remain a total discard/rename.

TrevorNBudd commented 1 year ago

I think you can safely discard and recreate the database. For most users, the database is a hidden, backend function that "just works". On the other hand, weird errors throw off most users I know.

APN-Pucky commented 1 year ago

I think the wiki can be edited by anyone with a github account (top right Edit). IMO having it in the sidebar grouped under flags, is enough, but maybe all flags should be renamed to common flags. Feel free to change stuff if you think that will help users.

TrevorNBudd commented 1 year ago

Also note this is something that happens regularly. Buffs and new cards come out weekly, so TUO needs to seamlessly adjust to them without reporting errors.

TrevorNBudd commented 1 year ago

I think the wiki can be edited by anyone with a github account (top right Edit). IMO having it in the sidebar grouped under flags, is enough, but maybe all flags should be renamed to common flags. Feel free to change stuff if you think that will help users.

Ok. Cool. I will definitely try that out.

TrevorNBudd commented 1 year ago

Changes work wonderfully. Nice job.