|
metadata
Hi !
Thanks for keeping TUO up to date.
I downloaded v3.2.1 yesterday, and updated the xml. Strangely, cards_section_1.xml does not have the latest commander stats (the ones we have in the game).
Any good reason for this ?
|
|
|
metadata
hit the update xml button in the starter(not thr dev one)
|
|
|
metadata
### v3.3.0 'evaluate' mode
Evaluate mode sims for each turn which of the options to play is the best and plays it, like 'flexible'.
Instead of simming all options to the end a score for the whole board is calculated to approximate the situation.
In detail:
Every turn you have 3 (or less) cards to choose from to play.
Evaluate will simulate what happens when you play one of those 3 cards. [A simulation in the simulation]
Then for each card the resulting board is *evalued* (after one turn by the player and one by the enemy).
The card with the highest score gets played.
Pro:
* Not as slow as flexible, but still significantly better than random (~8% better in 10x time vs random)
* More realistic simulation, due to dynamic order instead of a static/random order.
* Includes (multiple-)dynamic combos in playstyle.
* Simming enemies with evaluate order represents a more realistic random defense vs a manual offense.
Con:
* The Algorithm (eval-function) for judging the board has it's issues, eg. fine-tuned scaling of some skill values
* Some good decks might be avoided since they don't show a the board dominance to appeal to the eval-function
Options:
* 'eval'/'evaluate' : instead of ordered/random-order
* 'enemy:evaluate' : instead of ordered/random-order
* 'eval-iter X' : sets the number of iterations to X for the simulation which card should be played (default=8)
* 'eval-turn X' : sets the number of turns to use the evaluate method, after X turns random is used (default=8)
Notes:
* The output is not ordered, that means you need to figure out how to play this deck yourself.
* Before simming vs a gauntlet, better get a feeling for it vs a single deck.
* Values for normal iteration and (default-)eval-iter are not optimized (yet), just test and see how tuo responds.
If you have ideas how to easily/quickly and effective judge/evalue the board I'm happy to hear about new approaches.
|
|
|
metadata
### v3.3.0 'evaluate2' mode (cont.)
'eval2' mode is like 'eval' mode, but one more simulation of 1 (atm hardcoded) iteration follows in order to provide better plays:
1. simulation of the game
2. evaluation of the 3 available cards to play
3. evaluation of the 3 available cards to play after playing (2.)
4. Play the card from (2.) with the best score in (3.)
Pro:
* Scores are close to 'flexible' scores, but there is a gab.
* Quicker optimation of a bad start deck than starting with 'flex' (~twice as fast)
Options:
* Uses the parmeters from 'eval'
|
|
|
metadata
For the explorative compiling simmers, you can change some numbers in https://github.com/APN-Pucky/tyrant_optimize/blob/merged/sim.cpp#L3167 to get a different evaluation-function which might be better in special cases or generally.
|
|
|
metadata
Thank you for your work on the optimizer!
I am trying to compile it under MSYS2 / MinGW-64, but the compiled executable refuses to use more than one core. All the threads are stuck to a single one. (Unlike the executable released on GitHub, whose threads use multiple cores just fine.) I build Boost 1.72.0 with:
```
./bootstrap.sh
./b2 -j6 --build-dir=build --stagedir=build/stage toolset=gcc cxxflags="-Ofast -std=gnu++11" --layout=system link=static runtime-link=static variant=release threading=multi address-model=64 optimization=speed --with-filesystem --with-system --with-thread --with-regex --with-timer stage
```
(If I use the pre-built libraries from `pacman -S mingw64/mingw-w64-x86_64-boost`, I get errors from the mismatch between them and the compiler.) Then, I build TUO:
```
$ make main
make -f make/Makefile.windows all
make[1]: Entering directory '/d/software/TUO/tyrant_optimize'
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/algorithms.o -c algorithms.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/algorithms_util.o -c algorithms_util.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/cards.o -c cards.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/deck.o -c deck.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/read.o -c read.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/sim.o -c sim.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/sim_test.o -c sim_test.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/tyrant.o -c tyrant.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/tyrant_optimize.o -c tyrant_optimize.cpp
g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/xml.o -c xml.cpp
g++ -o tuo.exe obj/algorithms.o obj/algorithms_util.o obj/cards.o obj/deck.o obj/read.o obj/sim.o obj/sim_test.o obj/tyrant.o obj/tyrant_optimize.o obj/xml.o -L/d/software/TUO/boost/build/stage/lib -lboost_system -lboost_thread -lboost_filesystem -lboost_regex -lboost_timer
make[1]: Leaving directory '/d/software/TUO/tyrant_optimize'
```
The resulting executable is limited to one core. I had also tried earlier versions of Boost down until 1.69.0, and earlier TUO git tags, with the same result. `threading=single` while building Boost also makes no difference. Any help is appreciated.
**Edit**: When compiled with the [nuwen distribution](https://nuwen.net/mingw.html) of MinGW, the threads do use multiple cores. Looking at the [build script](https://github.com/StephanTLavavej/mingw-distro/blob/f438bf4400c9efcefaca03cc86d81cc0bc78f4fb/boost.sh) provided by the author, that distribution's Boost 1.71.0 is not built with any special flags that I hadn't used. MSYS2 and the nuwen distribution must therefore differ either in their GCC builds or the files GCC uses. I now have a working TUO, but I'd still like to know how to begin debugging this, as I'd prefer to only keep MSYS2 on my Windows box.
|
|
|
metadata
> *Originally posted by **[Valkjosandi](/forums/2468/topics/920187?page=15#13369842)**:*
> Thank you for your work on the optimizer!
>
> I am trying to compile it under MSYS2 / MinGW-64, but the compiled executable refuses to use more than one core. All the threads are stuck to a single one. (Unlike the executable released on GitHub, whose threads use multiple cores just fine.) I build Boost 1.72.0 with:
>
> ```
> ./bootstrap.sh
> ./b2 -j6 --build-dir=build --stagedir=build/stage toolset=gcc cxxflags="-Ofast -std=gnu++11" --layout=system link=static runtime-link=static variant=release threading=multi address-model=64 optimization=speed --with-filesystem --with-system --with-thread --with-regex --with-timer stage
> ```
>
> (If I use the pre-built libraries from `pacman -S mingw64/mingw-w64-x86_64-boost`, I get errors from the mismatch between them and the compiler.) Then, I build TUO:
>
> ```
> $ make main
> make -f make/Makefile.windows all
> make[1]: Entering directory '/d/software/TUO/tyrant_optimize'
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/algorithms.o -c algorithms.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/algorithms_util.o -c algorithms_util.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/cards.o -c cards.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/deck.o -c deck.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/read.o -c read.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/sim.o -c sim.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/sim_test.o -c sim_test.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/tyrant.o -c tyrant.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/tyrant_optimize.o -c tyrant_optimize.cpp
> g++ -I/d/software/TUO/boost -Wall -Werror -std=gnu++11 -Ofast -DNDEBUG -DNTIMER -DNQUEST -DTYRANT_OPTIMIZER_VERSION='"v3.3.0-dirty"' -o obj/xml.o -c xml.cpp
> g++ -o tuo.exe obj/algorithms.o obj/algorithms_util.o obj/cards.o obj/deck.o obj/read.o obj/sim.o obj/sim_test.o obj/tyrant.o obj/tyrant_optimize.o obj/xml.o -L/d/software/TUO/boost/build/stage/lib -lboost_system -lboost_thread -lboost_filesystem -lboost_regex -lboost_timer
> make[1]: Leaving directory '/d/software/TUO/tyrant_optimize'
> ```
>
> The resulting executable is limited to one core. I had also tried earlier versions of Boost down until 1.69.0, and earlier TUO git tags, with the same result. `threading=single` while building Boost also makes no difference. Any help is appreciated.
Sorry for the delayed response. I browse the forums rarely nowadays (for critical stuff github issues will send me a mail).
On Windows I always used nuwen since I didn't get boost to compile in MinGW.
You probably already inspected the cloud-debian script https://github.com/APN-Pucky/tyrant_optimize/blob/merged/build/windows/requirements.sh
It uses static [mxe](https://mxe.cc/) and mxe_$compiler$-boost to compile.
(One issue I recall is when you compile for threading to use [OpenMP](https://en.wikipedia.org/wiki/OpenMP) instead of boost, windows only supports one thread. But your log looks like you use boost.)
> *Originally posted by **[Valkjosandi](/forums/2468/topics/920187?page=15#13369842)**:*
>
> **Edit**: When compiled with the [nuwen distribution](https://nuwen.net/mingw.html) of MinGW, the threads do use multiple cores. Looking at the [build script](https://github.com/StephanTLavavej/mingw-distro/blob/f438bf4400c9efcefaca03cc86d81cc0bc78f4fb/boost.sh) provided by the author, that distribution's Boost 1.71.0 is not built with any special flags that I hadn't used. MSYS2 and the nuwen distribution must therefore differ either in their GCC builds or the files GCC uses. I now have a working TUO, but I'd still like to know how to begin debugging this, as I'd prefer to only keep MSYS2 on my Windows box.
I always had a separate nuwen installation for tuo on my windows machine.
|
|
|
metadata
I have an idea for a new sim mode that takes advantage of the cool modes already created to speed up sims for a very large gauntlet.
Derived Genetic
* take 3 samples of a gauntlet (say at 10% or 20 decks, whichever is greater)
* sim each of these using a fast mode (say anneal 50 10 .001)
* perform a genetic sim of the 3 results vs the full gauntlet
I've tried this out manually with a huge GT and net sim time ran around 60% of simming the full GT anneal 50 10 .001
|
|
|
metadata
> *Originally posted by **[Monkey_k](/forums/2468/topics/920187?page=15#13390316)**:*
> I have an idea for a new sim mode that takes advantage of the cool modes already created to speed up sims for a very large gauntlet.
>
> Derived Genetic
> * take 3 samples of a gauntlet (say at 10% or 20 decks, whichever is greater)
> * sim each of these using a fast mode (say anneal 50 10 .001)
> * perform a genetic sim of the 3 results vs the full gauntlet
>
> I've tried this out manually with a huge GT and net sim time ran around 60% of simming the full GT anneal 50 10 .001
>
>
This sounds interesting.
I'll think about implementing an abstract protocol where you could specify different modes at various stages.
A simpler example is:
Random-> Ordered->evaluate->flexible
|
|
|
metadata
## v4.0.0 parameter files
With '-p <file>' or 'params <file>' you can specify a file from where to load tuo parameters.
#### parameter file structure:
The first line applies to all following lines.
Each command in the lines after the first gets executed.
The optimized resulting deck from the previous line gets used as the input for the next
Example file "test.tuo":
```
sim 1000
// This is a comment
random
evaluate
flex
```
Then "./tuo deck1 deck2 -p test.tuo" will first execute 1000 random sims, then 1k evalute' sims and finally 1k flex sims.
###### Tips:
* use "timeout 0.5" for the sim to stop after 30 minutes and continue with the next (command-)line
* use "target 50" if you want the sim to stop at a score of 50 and continue with the next (command-)line
* you can use "-p <file>" also in your file to get some bigger structure (and eventually bugs)
###### Future:
* A way to stop after given amount of iterations will be implemented.
* swaping the enemy deck/gauntlet might get added. (v4.0.1)
* Only considering a (random) partition of a gauntlet might get added.
###### Breaking:
* This version breaks previous behaviour where a command like "sim 100 debug 5 climb 4" would execute all three operations after each other. Now only the last operation is executed
# This version hasn't been tested much so there might be some errors please report them or ideas
|
|
|
metadata
### v4.0.1
flags 'deck' and 'enemy:deck' will overwrite previously set decks
|
|
|
metadata
### v4.0.2
Add "@X@" dynamic parameters to parameter files.
With this variable you can reference previous results in a paramerter file. Example:
```
climb 1000
random
evaluate deck "Mission#142"
random enemy:deck "Mission#142" deck @1@
climb_forts 100 yfpool 3 yf "Phobos Station#2, Lightning Cannon#2,TC#2"
random enemy:deck "Mission#142" yf @4@ deck @3@ deck @0@
```
The fouth line uses the result of the first sim (random) as deck seed.
Climb forts tries to find the best fortresses, it's result is used in the following line "yf @4@" and the original passed deck (@0@) is used as starting deck.
|
|
|
metadata
> *Originally posted by **[Monkey_k](/forums/2468/topics/920187?page=15#13390316)**:*
> I have an idea for a new sim mode that takes advantage of the cool modes already created to speed up sims for a very large gauntlet.
>
> Derived Genetic
> * take 3 samples of a gauntlet (say at 10% or 20 decks, whichever is greater)
> * sim each of these using a fast mode (say anneal 50 10 .001)
> * perform a genetic sim of the 3 results vs the full gauntlet
>
> I've tried this out manually with a huge GT and net sim time ran around 60% of simming the full GT anneal 50 10 .001
>
>
So now you should be able to do this with a file like:
```
brawl enemy:deck small_gauntlet
anneal 50 10 0.001 deck @0@
anneal 50 10 0.001 deck @0@
anneal 50 10 0.001 deck @0@
genetic 100 deck "@1@;@2@;@3@" enemy:deck big_gauntlet
```
Until this is confirmed stable, better keep an eye open for bugs (eg. with funds).
|
|
|
metadata
Wow, that's a crazy feature!
I even did not imagine that `sim 100 debug 5 climb 4` worked before ))
|
|
|
metadata
this looks really cool.
I think that it has problems parsing parameters though.
I found that if I do not specify the owned cards parameter (or parameters), It will run OK
> tuoparms.txt
> pvp enemy:deck "Carnifex-25" yf LC#2
> random climb 1000
> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox" -p ./tuoparms.txt
that works, with a comment line of
> ///////////////
> Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox
> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox" "pvp" "enemy:deck" "Carnifex-25" "yf" "LC#2" "random" "climb" "1000"
> ///////////////
but if I delete ownedcards and run an alternate file
> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox"
> -o="./data/cards/_mj_monkeyk.txt" -p ./tuoparms.tx
I get warnings that the cards are not in my inventory
WARNING: Need extra 1 Nexor the Farseer to build your initial deck: adding to owned card list.
WARNING: Need extra 2 Obsidian to build your initial deck: adding to owned card list.
...
and the comment lines show
> ///////////////
> Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox
> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox"
> "-o=./data/cards/_mj_monkeyk.txt" "pvp" "enemy:deck" "Carnifex-25" "yf" "LC#2" "random" "climb" "1000"
> ///////////////
since ./data/cards/_mj_monkeyk.txt does exist, I'm thinking that the "-o" parameter does not process correctly in quotes?
|
|
|
metadata
Finally, great job! I think I finally found a way how to find global maximum (the best possible deck from your cardlist) but it takes a lot of time since I have to go through several stages of annealing + genetic. This makes it much more easier.
Also I have a question about disallowed_candidates.txt (d_can.txt) - Let's say my d_can.txt has 1000 cards. And let's say that my 5th card on that list doesn't exist (typo, Wironak instead of Vironak for example). Does TUO correctly ignore my first 4 cards in d_can.txt and everything else after that typo is allowed for sims? I'm asking this because sims with TUO always started that I have a typo in Cairnreaver (Cairreaver) so I thought that it's just 1 small mistake and everything else on that d_can.txt list is correct. But when I fixed that typo, several others showed up but TUO sims only showed me exactly 1 mistake so I was thinking that TUO maybe does not allow all cards before the typo but everything after the typo is allowed.
|
|
|
metadata
@Monkey_k
v4.0.4+ could fix that, but i couldn't reproduce the error.
The quotes arent real, I only print them to separate blocks with eventual spaces in it.
Running the quoted version should work too though.
|
|
|
metadata
> *Originally posted by **[razor15](/forums/2468/topics/920187?page=15#13391187)**:*
> Also I have a question about disallowed_candidates.txt (d_can.txt) - Let's say my d_can.txt has 1000 cards. And let's say that my 5th card on that list doesn't exist (typo, Wironak instead of Vironak for example). Does TUO correctly ignore my first 4 cards in d_can.txt and everything else after that typo is allowed for sims? I'm asking this because sims with TUO always started that I have a typo in Cairnreaver (Cairreaver) so I thought that it's just 1 small mistake and everything else on that d_can.txt list is correct. But when I fixed that typo, several others showed up but TUO sims only showed me exactly 1 mistake so I was thinking that TUO maybe does not allow all cards before the typo but everything after the typo is allowed.
Yup, I'll figure that out.
|
|
|
metadata
> *Originally posted by **[DR_F3LL](/forums/2468/topics/920187?page=15#13391214)**:*
> > *Originally posted by **[razor15](/forums/2468/topics/920187?page=15#13391187)**:*
> > Also I have a question about disallowed_candidates.txt (d_can.txt) - Let's say my d_can.txt has 1000 cards. And let's say that my 5th card on that list doesn't exist (typo, Wironak instead of Vironak for example). Does TUO correctly ignore my first 4 cards in d_can.txt and everything else after that typo is allowed for sims? I'm asking this because sims with TUO always started that I have a typo in Cairnreaver (Cairreaver) so I thought that it's just 1 small mistake and everything else on that d_can.txt list is correct. But when I fixed that typo, several others showed up but TUO sims only showed me exactly 1 mistake so I was thinking that TUO maybe does not allow all cards before the typo but everything after the typo is allowed.
>
> Yup, I'll figure that out.
>
Should be fixed with v4.0.6
|
|
|
metadata
> *Originally posted by **[DR_F3LL](/forums/2468/topics/920187?page=15#13391208)**:*
> @Monkey_k
> v4.0.4+ could fix that, but i couldn't reproduce the error.
> The quotes arent real, I only print them to separate blocks with eventual spaces in it.
> Running the quoted version should work too though.
>
Maybe I am not understanding how to get syntax for tuoparms right.
My current best guess is that tuo somehow is order sensitive to the parameters and that the way I've written my parms file makes it process parameters in the wrong order
tuo run with -p produces comment line:
> ///////////////
> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox" "-o=./data/cards/_mj_monkey_k.txt" "climb" "1000" "pvp" "random" "enemy:deck" "Carnifex-25" "yf" "LC#2"
> ///////////////
parameters in the order presented does not find my inventory
>C:\Users\mkaer\Documents\tuo\ptuo\tuoAll> tuo.exe "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark, Mystic Gatekeeper, Midnight Grayfox" -o="./data/cards/_mj_monkey_k.txt" "climb" "1000" "pvp" "random" "enemy:deck" "Carnifex-25" "yf" "LC#2"
>WARNING: There are multiple cards named Quartermaster XKR-2 in cards.xml. [48083] is used.
>WARNING: There are multiple cards named Erebus Lookout in cards.xml. [38209] is used.
>WARNING: Need extra 1 Nexor the Farseer to build your initial deck: adding to owned card list.
>WARNING: Need extra 2 Obsidian to build your initial deck: adding to owned card list.
>WARNING: Need extra 1 Midnight Grayfox to build your initial deck: adding to owned card list.
>WARNING: Need extra 2 Virklaw to build your initial deck: adding to owned card list.
>WARNING: Need extra 1 Maculakornos to build your initial deck: adding to owned card list.
>WARNING: Need extra 1 Kinaxa Soulspark to build your initial deck: adding to owned card list.
>WARNING: Need extra 1 Mystic Gatekeeper to build your initial deck: adding to owned card list.
>WARNING: Need extra 2 Bonecrown Drakuzoid to build your initial deck: adding to owned card list.
>Your Deck:1:...
while reordering those parms finds most cards in my inventory (I probalby only have one Obsidian)
> C:\Users\mkaer\Documents\tuo\ptuo\tuoAll>tuo "Nexor the Farseer-1, Broodmother's Nexus, Obsidian #2, Virklaw #2, Bonecrown Drakuzoid #2, Maculakornos, Kinaxa Soulspark,
> Mystic Gatekeeper, Midnight Grayfox" "pvp" "random" "climb" "1000" "-o=./data/cards/_mj_monkey_k.txt" "enemy:deck" "Carnifex-25" "yf" "LC#2"
>WARNING: There are multiple cards named Quartermaster XKR-2 in cards.xml. [48083] is used.
>WARNING: There are multiple cards named Erebus Lookout in cards.xml. [38209] is used.
>WARNING: Need extra 1 Obsidian to build your initial deck: adding to owned card list.
>Your Deck:1: Deck:...
|
|
|
metadata
Yes, now I see the problem.
TUO by default assumes the first and second parameter to be your deck and the enemy deck.
If you pass your '-o=".."' as second it gets discarded/overwriten by the enemy:deck.
Currently therefore using "" as second parameter or anything useless would work.
I might rework this interaction.
|
|
|
metadata
Yes. That fixes it.
Now my command line looks like
> tuo.exe "<my deck>" "dummy enemy" -o="ownedcards location" -p ./tuoparms.txt
|
|
|
metadata
### v4.1.0
Add "$X$" external parameters to parameter files.
With this variable you can pass parameters to the parameters file.
```
// 0.017*60 = 1 minute
timeout 0.017 anneal $1$ 100 0.01 random
deck @0@
deck @0@
deck @0@
deck @0@
deck @0@
genetic $2$ deck "@1@;@2@;@3@;@4@;@5@" timeout 0
```
Called via e.g.:
```
./tuo "Krellus,Obsidian Overlord" "TUTitan_Def" -p "params/train" 100 100000 -t 16
```
$1$ is 100 and $2$ is 100000.
$0$ is the path name of the file after '-p' if you need that for some reason.
You can also use gauntlets/modes/orders/etc. as $X$ passed variable.
I hope this overall allows for enough customization.
If someone has an interesting setup we could include that in the default tuo in e.g. a "params" folder or alternatively keep them stored in a separate forums post.
|
|
|
metadata
Is there anywhere I can find more info on using param files?
|
|
|
metadata
> *Originally posted by **[breezue89](/forums/2468/topics/920187?page=15#13392167)**:*
> Is there anywhere I can find more info on using param files?
No (not yet?), but I can anwser specific questions.
Some add'l general notes:
Each line besides the first gets executed.
The actual tuo command gets printed between the //////-blocks.
A command like ./tuo A -p file B will overwrite B-type-parameters of the param file with B, whilst A gets overwritten by the params file (or later B). It is general behaviour for tuo that later parameters will overwrite previous ones.
|