Bouwtijden

DeletedUser78358

Guest
Iemand enig idee hoe de bouwtijden worden berekend op wereld 54 (speelsnelheid 1,5) ? Uit forumberichten van 2009 (https://forum.tribalwars.net/index.php?threads/specific-build-times-for-troops-and-buildings.114207/) rolden onderstaande formules maar mijn berekende waarden komen niet overeen met de werkelijke tijden. Ik neem aan dat deze formules verouderd zijn, kan er iemand mij de huidige berekeningswijze geven?

actual build time = [duration of creation]*1.05^(-[level of the village headquarters])
duration of creation, for lvl 1 and 2 = [build_time]*1.18*[build_time_factor]^(-13)
duration of creation, for lvl 3+ = [build_time]*1.18*[build_time_factor]^(level - 1 - 14/(level-1))
 

DeletedUser78358

Guest
Voorlopig geldt in mijn dorp:
*Hoofdgebouw lvl 8
*Kazerne lvl 3
*Wereldsnelheid 1,5
*Geen bonussen of vlaggen actief
*Bouwtijd om kazerne te uppen: 6:46 = 406 seconden

Mijn berekeningen:
*bouwtijd voor kazerne te uppen=1200*1.18*1.2^(3-14/3)*1.05^(-8)/1.5 =471,5 seconden

Waar zit mijn fout?
 

Bijlagen

  • Bouwtijd.PNG
    Bouwtijd.PNG
    25,1 KB · Weergaven: 23

DeletedUser56689

Guest
Ik heb het even voor je nagerekend (je fout zat hem erin dat het level van je kazerne geen 4 is, maar 3).

kazerne lv 3
time_cost = 1200
time_factor = 1.2
time_for_upgrade = [build_time]*1.18*[build_time_factor]^(level - 1 - 14/(level-1)) = 1200 * 1.18 * 1.2^(2 - 14/2) = 474.215534979

hoofdgebouw lv8
time_adjustment_factor = 1.05^(-[level of the village headquarters]) = 0.67683936202

Wereld
speed = 1.5

Totaal
actual_build_time = time_for_upgrade * time_adjustment_factor / speed = 569.058641975 * 0.67683936202 / 1.5 = 256.774192124

Mmm. Weird. Lijkt erop dat je toch gelijk had. Om de nieuwe formules uit te vinden heb je de volgende gegevens nodig: zoveel mogelijk bouwetijden met een constant level van hoofdgebouw.


Edit: Je zal het dan moeten zoeken in de factor 1.18 en de exponent van de build_time_factor. De rest kan je redelijk direct uitlezen uit de get_building_info.
 
Laatst bewerkt door een moderator:

DeletedUser78358

Guest
De formule zelf opstellen lijkt me geen eenvoudige klus maar moeilijk gaat ook. Bij Hoofdgebouw level 16 vind ik:
Schuilplaats naar 4 duurt 4:35 = 275 sec
Schuilplaats naar 5 duurt 8:46 = 526 sec
Schuilplaats naar 6 duurt 13:49 = 829 sec
build time = 1200 sec
time adjustment factor = 1,05^(-16) = 0,458111522
Als we aannemen dat de time adjustment factor en de build time correct zijn, dan kunnen we de effectieve bouwtijd per level delen door deze waarden en ik vind:
275/(1200*0,458111522) = 0,5002420932
526/(1200*0,458111522) = 0,9568266946
829/(1200*0,458111522) = 1,508002528​

Ik zie tussen deze drie getallen geen verband dat ik kan linken aan 1,18 of 1,2 of het desbetreffende level. Iemand die hier wel een oplossing voor heeft?
 

DeletedUser56689

Guest
Ik heb om te beginnen nagerekend of de formule voor tijdsfactor van het hoofdgebouw klopt. Daarvoor heb ik de volgende observaties gebruikt.
bwtA1rN.png


Vervolgens heb ik de upgrade van 3->4 en de upgrade van 4->5 even geplot. Je ziet hier helaas geen duidelijk exponentieel verband in, maar we weten dat dat wel zo is, omdat dat overal in tw zo is!
Z8lhmJZ.png


Om je even te herinneren, de getallen die hier zijn gevonden worden beïnvloed door drie verschillende getallen:
  1. De build_time van de upgrade van de schuilplaats van 3->4, resp 4->5
  2. De world_speed
  3. De tijdsfactor gegeven door het hoofdgebouw (main_factor)
Aangezien build_time en world_speed voor de twee groepen observaties constant zijn, moet ieder verschil dus uit de tijdsfactor van het hoofdgebouw komen. Om dit uit te reken gebruiken we de excel functie LOGEST. Deze schat de parameters van de functie a * b^x met behulp van OLS. Omdat OLS normaal gesproken alleen werkt voor lineaire verbanden, transformeert excel de y- en x-waarden tot ze lineair zijn (door de log te nemen, immers y = a * b^x <=> log(y) = log(a) + x log(b)). Dit resulteert in de volgende waarden voor de twee groepen:

t88mN3E.png

Belangrijk bij deze tabel is het volgende: de a-waarden zijn de factor van het hoofdgebouw. Zoals je kan zien is deze bij beide observaties vrijwel gelijk. De b-waarden is de constante van
build_time * world_speed en dient dus ook daadwerkelijk te verschillen tussen deze waarden (want de build_time is anders voor andere upgrades). Dat gebeurt hier ook. De overige waarden zijn enkele statistische analyses om te kijken in hoeverre dit een nuttig en waardevol resultaat is. De uitleg volgt hieronder:
  • se_a en se_b zijn de zogenaamde standard error. Dit is min of meer de foutmarge van het getal dat erboven staat. Een lagere waarde hier is beter.
  • r2 is de mate waarin de geschatte waardes (dus de waardes die je krijgt als je de formule invult) kloppen met de gegeven waardes. Hoe dichter deze getallen bij de 1 zitten, hoe beter. In het algemeen geldt dat iedere waarde groter dan 0.7 een sterk positief verband verband aangeeft.
  • F is een statistische test waarvan df de parameter is (voor de wiskunde nerds: ik weet ook niet waarom excel alleen df1 rapporteert, i.p.v. df1, df2). df staat voor degrees of freedom, F staat voor de F statistic (= het resultaat van de F-test. Er bestaan tabellen waarin je op kan zoeken wat de kans is dat het model dat wij geschat hebben beter is dan het 0-model (= model zonder schattingen <=> y = 1*1^x). Een hogere F waarde is beter (hoeveel beter is afhankelijk van het aantal degrees of freedom. Hoe meer df je hebt, hoe minder F je nodig hebt voor een significant resultaat)
  • Ten slotte, ssreg is een getal dat aangeeft welk deel van de totale afwijking van de getallen van het gemiddelde verklaard wordt door de functie die wij hebben gekozen. ssres is een getal dat aangeeft welk deel van de totale afwijking van het gemiddelde niet verklaard wordt door de gekozen functie. Het zijn absolute getallen (= ze worden allebei groter als je meer data toevoegt), dus het getal zelf is niet zo belangrijk. Het is beter als ssreg groot is in verhouding tot ssres., want dan verklaart de functie een groot deel van de gevonden data.
Kortom: het getal a geeft aan wat de invloed is van één level hoofdgebouw. Het getal b geeft de constante aan die het product is van build_time en world_speed (= build_time * world_speed). De getallen daaronder geven aan hoe precies het resultaat is (in ons geval: ontzettend precies. De enige afwijking ontstaat door het afronden van getallen binnen Tribal Wars. Voorbeeld: als het bouwen eigenlijk 5:54.654 duurt, maakt tw er 5:55 van).

Conclusie: het hoofdgebouw met één niveau verhogen, zorgt ervoor dat de bouwtijd vermenigvuldigd wordt met ongeveer
(0.952642268 + 0.952377081) / 2 = 0.952509675. Laat dit nou toevallig min of meer gelijk zijn aan 1.05^-1 = 1/1.05 = 0.952380952.

Conclusie: de invloed van het hoofdgebouw is correct. Voor ieder extra level van het hoofdgebouw (incl. 0), neemt de bouwtijd af met een factor 1.05^-1. De formule voor main_factor is dus ook main_factor = 1.05^(-level hoofdgebouw).

===========================================================================

Volgende keer: we gaan kijken naar de invloed van de andere factoren!


Te lang; niet gelezen: de formule voor hoofdgebouw tijdsfactor is correct.

P.S. Correcties en aanvulling zijn welkom!
 
Laatst bewerkt door een moderator:

DeletedUser78358

Guest
Aangezien ik op zoek ben achter de exacte formule en de tijden die we vinden in het hoofdgebouw telkens afgerond zijn heb ik zoveel mogelijk verschillende bouwtijden genoteerd en vooral gebruik gemaakt van grote bouwtijden. Ik neem aan dat enkel aan dit stuk van de formule "1.18*1,2^(level - 1 - 14/(level-1))" is gesleuteld. Aangezien deze factor onafhankelijk is van gebouwtype of hoofdgebouw-level heb ik een tabel gemaakt waarin deze factor voor elk level wordt berekend:

LfNMzOo.png


In excel vond ik hiervoor echter géén enkele benaderende exponentiële functie. Wanneer ik echter enkel rekening hield met gebouwlevels 16,17,18,19,20,21 en 22 vond ik in excel een macht met als grondtal e^0,1838=1,201775. Ik vermoed dus dat er nog steeds gewerkt wordt met dezelfde build time factor 1,2 als in de oorspronkelijke formule.

Vervolgens heb ik 1.18*1,2^(level - 1 - 14/(level-1)) vervangen door X*1,2^(level - 1 - Y/(level-1)) met X en Y de te zoeken onbekenden. Ik heb dit stelsel opgelost maar helaas heb ik ondervonden dat er géén enkele X of Y bestaat waarvoor de bovenstaande formule een benadering geeft die bij meer dan 3 gebouwlevels een bijna identieke waarde uitkomt.

Conclusie: De oorspronkelijk formule is toch nog meer verandert dan verwacht. Ik vraag me af of de exponent van 1,2 in de oorspronkelijke functie niet volledig is vervangen. Maar helaas heb ik dus géén idee hoe ik dit probleem verder zou kunnen oplossen. Wel kan ik nu de bouwtijden berekenen voor de levels in de bovenstaande tabel door de gevonden waarde te vermenigvuldigen met de build time en de time adjustment factor.
 

DeletedUser56689

Guest
-snip-
In excel vond ik hiervoor echter géén enkele benaderende exponentiële functie. Wanneer ik echter enkel rekening hield met gebouwlevels 16,17,18,19,20,21 en 22 vond ik in excel een macht met als grondtal e^0,1838=1,201775. Ik vermoed dus dat er nog steeds gewerkt wordt met dezelfde build time factor 1,2 als in de oorspronkelijke formule.
-snip-
Lijkt erop dat er een knik zit tussen 1-15 en 16-30, dit klinkt ook logisch (precies halverwege). Heb je een formule gevonden die voor 1-15 (of misschien 5-15) geldt?
 

DeletedUser78358

Guest
Hepla ik heb de oplossing gevonden na veel rekenen en gebruik van excel. In ging ervan uit dat de formule er als volgt zou uitzien:

time_for_upgrade = [build_time]*1.05^(-[level of the village headquarters])*X*Y^(level - 1 - Z/(level-1)) waarbij X, Y en Z onbekenden zijn

Vervolgens heb ik dit stelsel meermaals ingevuld voor verschillende levels en verschillende tijden en ik kwam uit voor X=2.1 , Y=1.18 en Z=35. Ik heb deze formule reeds uitgeprobeerd voor waarden van 1 tot en met 22 en ze klopt elke keer. Voor de lage levels heb ik wel weinig data dus als er iemand hier een fout vindt laat het me aub weten. Het cijfer 35 lijkt echt super willekeurig gekozen maar het lijkt allemaal te kloppen tot nu toe. De algemene formule wordt dus:

time_for_upgrade = [build_time]*1.05^(-[level of the village headquarters])*2,1*1,18^(level - 1 - 35/(level-1))

.Sadye: bedankt voor de hulp
 

Deleted User - 24028

Guest
Ik heb de formule hier boven net even getest om werkplaats 10 -> 11 te doen met HQ 20. Hij klopt perfect bij mij :) Nice work !

Misschien moet je het nog wat uitschrijven en een topic maken ergens (bv bij tools en projecten) om allemaal formules te verzamelen zoals deze. Ze zijn altijd handig om te gebruiken in scripts en zo kan iedereen ze gemakkelijk terugvinden ipv volledig uitzoeken zelf :p
 
Bovenaan