ManyWorlds: Training and meso-making tool

kebraga

New member
Jan 23, 2019
5
2
3
#1
I've written this program to calculate which mobs give the most experience and mesos per hit.

Here's what it looks like:


As another example, here's what ManyWorlds suggests for my own level 37 assassin:


Unlike typical training guides, ManyWorlds tells you exactly which mob gives you the most exp per hit at any level.

Few things to note:
1. Program takes longer to run the higher your level is
2. Program takes longer to run the weaker you are for your level
3. You don't need to input all parameters, just the ones relevant to your skill
4. All formulae from https://ayumilovemaple.wordpress.com/2009/09/06/maplestory-formula-compilation/
5. ManyWorlds runs an ensemble average over all possible ways to kill mobs, and so it gives the exact result using a recursion relation developed in the theory. NO APPROXIMATIONS.
6. If you want more information regarding the theory behind the calculations, check out the paper I wrote. Sections 3 and on are outdated. The program now uses an exact algorithm which is way more efficient than the one presented in the paper.

You can download the program here:
http://www.mediafire.com/file/5d9q6gb9ibopoy1/ManyWorlds.rar/file
I put it here and not on the forum so I can keep track of how many people download.

To launch the program, extract the .rar file into its own folder, and double-click on "application" file or "executable" (.exe).

If you're feeling generous, here's my Patreon:
https://www.patreon.com/meaninglesslife

I'm open to suggestions and collaborators!
 
Last edited:

Boned

New member
Feb 10, 2019
12
1
3
#2
Heyho, first of all thx for the tool.
But im suprised that the tool need so long time to calculate the result.
Where do u take the informations from? Do you read the informations from monster over an api or did u enter them manualy? Ok, found the json file :-D

Regards
 

kebraga

New member
Jan 23, 2019
5
2
3
#3
Heyho, first of all thx for the tool.
But im suprised that the tool need so long time to calculate the result.
Thanks for checking it out!
But yeah, it can take a while because all possible ways of killing a monster are considered. For example, if the monster HP is 5 and you're a beginner with an attack range of 1-3, then the possible ways of killing the monster are:
1, 1, 1, 1, 1
1,1,1,2
1,1,2,1
1,1,2,3
and so forth...

You can see how this can get computationally stressful at high HP* and with a large attack range. Also, critical hits make the attack range artificially larger, so they increase computation time.
 
Last edited:

Boned

New member
Feb 10, 2019
12
1
3
#4
But why should the program calculate all possibilities to kill the monster?
It would be better when you try to use a formula instead.
Let me explain it in an example:
Min Damage = 2, Max Damage = 5, Snail HP = 8, Snail EXP = 3.
average DMG = (min DMG + max DMG) / 2 = (2+5)/2 = 3,5
average Hits until Dead = 8 / 3,5 = 2,29
Exp per Hit = Snail EXP / average HITS = 3 / 2,29 = 1,31 EXP per Hit

Example with Mage and higher Mons:
Magic = 273, Luk = 11, Spell Magic Att = 80, Skill Mastery = 60%, Robo Monster HP = 2000, Robo Monster EXP = 99.
Min Damage = ((273*0,8)+(11/4)) / 18 * 80 * 60% = 589
Max Damage = ((273*0,8)+(11/4)) / 18 * 80 = 982
average Damage = 785,5
average Hits until Dead = 2000 / 785,5 = 2,55
EXP per HIT = 99 / 2,55 = 38,82 EXP per Hit.

Furthermore you have not all Skills from the mage in your program. Maybe you will update some more skills and weakness from monster :) So it will be very usefull for many ppl.
 

kebraga

New member
Jan 23, 2019
5
2
3
#5
But why should the program calculate all possibilities to kill the monster?
It would be better when you try to use a formula instead.
It's just inaccurate to use an arithmetic average of the attack range to compute average hits. In your calculation, you get an average of 2.29 hits per kill, but that is not accurate. If you plug in the values you gave (min=2, max=5) into ManyWorlds, the actual result is 2.69 hits per kill. There might not be a big difference in this case, but if you're grinding for hours on the same mob, the difference accumulates.

Also, to see why an arithmetic mean doesn't work, here's a quick counterexample to its usefulness:
Assume Min damage = 1, Max damage = 3, and monster HP = 4
Then the average damage is (1+3)/2 = 2
With this, we see that on average, it takes 2 hits to kill the monster. That's way off the mark. It should take at least 2 hits to kill, and it can take as many as 4 hits to kill. Using a proper ensemble average, the average hits to kill would be >2 by a reasonable amount.

If you want a more in-depth answer to your question, check out the paper I wrote. The first two sections should answer your question thoroughly, and there are diagrams too!:) Ignore sections 3 and on; I fixed the algorithm, and it works way better now-- no need for approximations.

I wish I could add more stuff to the program, such as weaknesses and so forth, but I don't have much time these days :(
 

eCownomist

New member
May 21, 2019
1
0
1
#6
I believe a multiple regression model is more appropriate for this scenario. I noticed you used a linear regression model to predict the outcome however you had some issues due to "inability to capture nonlinear behavior like the one present at around 60 HP" resulting in multicollinearity based on your min and max hits which are related.

Based on your information provided you would need to predict the dependent variable "Amount of Hits to Kill" based on your independent variables "HP(monster HP)" and "TotalDamage(what your character hits)".
 

kebraga

New member
Jan 23, 2019
5
2
3
#7
I believe a multiple regression model is more appropriate for this scenario. I noticed you used a linear regression model to predict the outcome however you had some issues due to "inability to capture nonlinear behavior like the one present at around 60 HP" resulting in multicollinearity based on your min and max hits which are related.
Nice suggestion, but in my new code, there's no approximation necessary at all! All results are exact and given in reasonable computation time.
 
Jan 23, 2019
5
2
3
#11
Do you have source available? I'm finding this problem really interesting to think about and would interested to see what exactly the new algorithm you use is.
Yeah, you should be able to open main.py with a text editor to see it.
The new algorithm is pretty much just a dynamic method. It computes the multiplicity list for HP starting at 1 and ending at the monster's actual HP. In this way, there is a multiplicity list for every HP value between 1 and the target HP. These lists can be called on instead of explicitly computed each time a certain HP appears in the hit tree. In fact, there's a matrix whose columns are the HP value and rows are the multiplicity values for number of hits to kill.
For example, the 5th column would be the test-case where the monster HP is 5. Going down this column, the first row shows the number of kill routes that terminate after one hit, the second row shows the number of kill routes that terminate after two hits, and so forth. Sorry for the jargon, but this would otherwise take forever to explain. LMK if you need further clarification. If you take a while to read the code, it should be pretty clear-- although there's no annotation whatsoever.