Loading...
  OR  Zero-K Name:    Password:   

Post edit history

Overdrive, Underdrive and Quantum Mechanics

To display differences between versions, select one or more edits in the list using checkboxes and click "diff selected"
Post edit history
Date Editor Before After
12/23/2020 12:21:22 AMDErankBrackman before revert after revert
1/5/2015 2:00:07 AMDErankBrackman before revert after revert
1/4/2015 4:13:24 AMDErankBrackman before revert after revert
1/4/2015 12:14:38 AMDErankBrackman before revert after revert
1/4/2015 12:13:48 AMDErankBrackman before revert after revert
Before After
1 In [url=http://zero-k.info/Forum/Thread/7478]this thread[/url] it has been revealed by @Skasi (actually already 2011) and proven by mostly @TheEloIsALie that current overdrive energy distribution is not ideal. Currently OD energy is distributed proportional to squared mex rates as far as the grid allows it. Connecting mexes can reduce total metal rate, which should actually be avoided by the system in any case. 1 In [url=http://zero-k.info/Forum/Thread/7478]this thread[/url] it has been revealed by @Skasi (actually already 2011) and proven by mostly @TheEloIsALie that current overdrive energy distribution is not ideal. Currently OD energy is distributed proportional to squared mex rates as far as the grid allows it. Connecting mexes can reduce total metal rate, which should actually be avoided by the system in any case.
2 \n 2 \n
3 [color=green][b]1. Ideal Solution[/b][/color] 3 [color=green][b]1. Ideal Solution[/b][/color]
4 \n 4 \n
5 @TheEloIsALie calculated the ideal distribution of OD energies (e_1,...,e_n) in a grid with n mexes with base rates (m_1,...,m_n) and OD energy E. (I use the same variables as @TheEloIsALie and add some more.) Total mex rates are M_i=gamma(e_i)*m_i with the "Lorentz-factor" gamma(e_i)=sqrt(1+e_i/4). 5 @TheEloIsALie calculated the ideal distribution of OD energies (e_1,...,e_n) in a grid with n mexes with base rates (m_1,...,m_n) and OD energy E. (I use the same variables as @TheEloIsALie and add some more.) Total mex rates are M_i=gamma(e_i)*m_i with the "Lorentz-factor" gamma(e_i)=sqrt(1+e_i/4).
6 Current distribution is e_i=E*m_i²/p, where p=sum_i( m_i²) . If the grid doesn't provide as much energy as it "wants", it gets its maximum and the rest has to be recalculated. 6 Current distribution is{ { { e_i=E*m_i²/p, where p=sum_i( m_i²) . } } } If the grid doesn't provide as much energy as it "wants", it gets its maximum and the rest has to be recalculated.
7 The easiest representation of @TheEloIsALie's ideal solution is e_i = m_i²*q/p - 4, where q = E + 4n. I have proven that it is correct, so if you want to [url=http://zero-k. info/Forum/Thread/7478#114117]see a proof. . [/url] The problem is now that it can produce negative e_i. Those e_i have to be set to 0 and the rest must be recalculated. Thanks to @TheEloIsALie the recalculation is not needed, when "you go through the mexes in ascending order of base income and ( . . . ) ( i) f that e_i is negative, you subtract m_i² from p and 4 from q and continue. " If a mex' e_i is not negative, you can be sure that all following mexes' e_i are not negative, too. The current recalculation when grid is maxed is also needed. Former concerns about the algorithmic efficiency of the ideal solution because of many square roots or recalculations have been eliminated. 7 The easiest representation of @TheEloIsALie's ideal solution is{ { { e_i = m_i²*q/p - 4, where q = E + 4n. } } } I have proven that it is correct, so if you want to [url=http://zero-k. info/Forum/Thread/7478#114117]see a proof. . [/url] The problem is now that it can produce negative e_i. Those e_i have to be set to 0 and the rest must be recalculated. Thanks to @TheEloIsALie the recalculation is not needed, when "you go through the mexes in ascending order of base income and ( . . . ) ( i) f that e_i is negative, you subtract m_i² from p and 4 from q and continue. " If a mex' e_i is not negative, you can be sure that all following mexes' e_i are not negative, too. The current recalculation when grid is maxed is also needed. Former concerns about the algorithmic efficiency of the ideal solution because of many square roots or recalculations have been eliminated.
8 \n 8 \n
9 I had a look at [url=https://github. com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Gadgets/unit_mex_overdrive. lua#L689]the source code[/url] and it seems as if overdrive does obey emp and disarm, but not slow dmg. Something like "orgMetal*=spGetUnitRulesParam( unitID, "slowRate") " or else should be written there in line 725 and 755 and maybe others. How can allyTeamMexes be sorted by orgMetal after emp, disarm and slow have been applied and then used in another for-structure? Then you only need to replace current "mexE = allyE*( orgMetal * orgMetal) / allyMetalSquared" by the ideal solution and check if you have to change p and q. Maybe you can save a little if you first check if orgMetal of current mex = orgMetal of previous mex, because this will often be true. Then you can just use e_i of previous mex and if it's 0, change p and q. 9 I had a look at [url=https://github. com/ZeroK-RTS/Zero-K/blob/master/LuaRules/Gadgets/unit_mex_overdrive. lua#L689]the source code[/url] and it seems as if overdrive does obey emp and disarm, but not slow dmg. Something like "orgMetal*=spGetUnitRulesParam( unitID, "slowRate") " or else should be written there in line 725 and 755 and maybe others. How can allyTeamMexes be sorted by orgMetal after emp, disarm and slow have been applied and then used in another for-structure? Then you only need to replace current{ { { "mexE = allyE*( orgMetal * orgMetal) / allyMetalSquared"} } } by the ideal solution and check if you have to change p and q. Maybe you can save a little if you first check if orgMetal of current mex = orgMetal of previous mex, because this will often be true. Then you can just use e_i of previous mex and if it's 0, change p and q.
10 (Btw why is there "1+mexE/5" instead of "energyToExtraM(mexE)" in lines 761 and 795?) 10 (Btw why is there "1+mexE/5" instead of "energyToExtraM(mexE)" in lines 761 and 795?)
11 \n 11 \n
12 [color=green][b]2. Underdrive[/b][/color] 12 [color=green][b]2. Underdrive[/b][/color]
13 \n 13 \n
14 When I thought about how to reduce recalculations and sortings due to negative OD energies e_i in @TheEloIsALie's solution, a really crazy idea came to my mind: Why not leave negative e_i as it is? Call it underdrive. This would only require replacing 14 When I thought about how to reduce recalculations and sortings due to negative OD energies e_i in @TheEloIsALie's solution, a really crazy idea came to my mind: Why not leave negative e_i as it is? Call it underdrive. This would only require replacing{ { { "mexE = allyE*( orgMetal * orgMetal) / allyMetalSquared" by
15 "mexE = allyE*( orgMetal * orgMetal) / allyMetalSquared" by 15 "mexE = ( allyE+4*allyTeamMexes. number( ) ) *( orgMetal * orgMetal) / allyMetalSquared - 4" ( not sure about . number( ) ) } } } In most cases it would make no difference. Only when small and big mexes are connected in a grid with low energy, small mexes would be underdriven to provide a little OD energy for the big mexes. The theoretical maximum for the underdrive energy a mex can provide is 4, but usually it will be lower. This could give pylons a little more use, but building generators instead will still be better.
16 "mexE = (allyE+4*allyTeamMexes.number())*(orgMetal * orgMetal)/ allyMetalSquared - 4" (not sure about .number())
17 In most cases it would make no difference. Only when small and big mexes are connected in a grid with low energy, small mexes would be underdriven to provide a little OD energy for the big mexes. The theoretical maximum for the underdrive energy a mex can provide is 4, but usually it will be lower. This could give pylons a little more use, but building generators instead will still be better.
18 \n 16 \n
19 [color=green][b]3. Symmetrization[/b][/color] 17 [color=green][b]3. Symmetrization[/b][/color]
20 \n 18 \n
21 Negative e_i is only possible, because negativity of e_i is not equivalent to negativity of the OD Lorentz-factor's radicand gamma(e_i)=sqrt(1+e_i/4). This can be changed with a symmetrization of the OD function gamma_b(e_i):=1+b*sqrt(e_i), where b is a constant factor that determines the effectivity of OD, for example b=0.3. I found the ideal solution for this and it is exactly the currently implemented solution independently of b! So you would only have to change 19 Negative e_i is only possible, because negativity of e_i is not equivalent to negativity of the OD Lorentz-factor's radicand gamma(e_i)=sqrt(1+e_i/4). This can be changed with a symmetrization of the OD function gamma_b(e_i):=1+b*sqrt(e_i), where b is a constant factor that determines the effectivity of OD, for example b=0.3. I found the ideal solution for this and it is exactly the currently implemented solution independently of b! So you would only have to change
22 "return -1+sqrt(1+(energy*0.25))" in line 256 to 20 "return -1+sqrt(1+(energy*0.25))" in line 256 to
23 "return b*sqrt(energy)" with a certain b. 21 "return b*sqrt(energy)" with a certain b.
24 This would also solve the problem of extreme OD being too effective atm as it would make low OD more effective and high OD less effective than currently without introducing more complex functions than sqrt (like log). b could also be changed at any time for balance reasons. The break even point of energy, where current OD becomes equally efficient as symmetric OD for a single mex, is at e_i= 4b²/(b²-1/4)² or b=(sqrt(1+e_i/4)-1)/sqrt(e_i). 22 This would also solve the problem of extreme OD being too effective atm as it would make low OD more effective and high OD less effective than currently without introducing more complex functions than sqrt (like log). b could also be changed at any time for balance reasons. The break even point of energy, where current OD becomes equally efficient as symmetric OD for a single mex, is at e_i= 4b²/(b²-1/4)² or b=(sqrt(1+e_i/4)-1)/sqrt(e_i).
25 \n 23 \n
26 [color=green][b]4. Quantum Mechanics[/b][/color] 24 [color=green][b]4. Quantum Mechanics[/b][/color]
27 \n 25 \n
28 The whole calculation and especially how adding an assymetry term to the energy (which means the existence of mass in a relativistic sense) creates antimatter (underdrive) reminds me a lot of relativistic quantum mechanics. In the early times of quantum mechanics people also struggled a lot for eliminating the negative energy (underdrive) until they finally had to accept that antimatter exists. The symmetrization is the non-relativistic approximation. It is interesting that the current solution solves the "non-relativistic" approx. 26 The whole calculation and especially how adding an assymetry term to the energy (which means the existence of mass in a relativistic sense) creates antimatter (underdrive) reminds me a lot of relativistic quantum mechanics. In the early times of quantum mechanics people also struggled a lot for eliminating the negative energy (underdrive) until they finally had to accept that antimatter exists. The symmetrization is the non-relativistic approximation. It is interesting that the current solution solves the "non-relativistic" approx.
29 \n 27 \n
30 So which of the 3 systems do you prefer? The lower a system's number, the less elegant and more difficult to implement (if not too much) it is, but closer to the current system. 28 So which of the 3 systems do you prefer? The lower a system's number, the less elegant and more difficult to implement (if not too much) it is, but closer to the current system.