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

Post edit history

some questions about the AI

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
3/23/2020 12:24:30 AMUAranklamer before revert after revert
3/23/2020 12:21:02 AMUAranklamer before revert after revert
Before After
1 Hi 1 Hi
2 \n 2 \n
3 behaviour.json config: 3 behaviour.json config:
4 1) [b]economy.build_delay[/b] - when constructor (mobile or factory) finished building it will wait doing nothing for [b]economy.build_delay[/b] seconds before another construction order issued (on per-unit basis, not per-faction). 4 1) [b]economy.build_delay[/b] - when constructor (mobile or factory) finished building it will wait doing nothing for [b]economy.build_delay[/b] seconds before another construction order issued (on per-unit basis, not per-faction).
5 I don't know in what order difficulties should align, can't say if there's an error about [b]economy.build_delay[/b] for novice or easy. 5 I don't know in what order difficulties should align, can't say if there's an error about [b]economy.build_delay[/b] for novice or easy.
6 \n 6 \n
7 2) Regular attackers has 2 phases: 7 2) Regular attackers has 2 phases:
8 a) Defence: AI accumulates units at own base until sum_group_power >= [b]quota.thr_mod.defence[/b] * nearest_enemy_cluster_threat. Lowering [b]quota.thr_mod.defence[/b] should result in more frequent attacks with smaller groups. Also [b]quota.thr_mod.defence: [<min>, <max>][/b] is internally a single value equal to random(<min>, <max>) just to randomize behaviour a bit. 8 a) Defence: AI accumulates units at own base until sum_group_power >= [b]quota.thr_mod.defence[/b] * nearest_enemy_cluster_threat. Lowering [b]quota.thr_mod.defence[/b] should result in more frequent attacks with smaller groups. Also [b]quota.thr_mod.defence: [<min>, <max>][/b] is internally a single value equal to random(<min>, <max>) just to randomize behaviour a bit.
9 b) Attack: [b]quota.thr_mod.attack: [<min>, <max>][/b] - again random(<min>, <max>) - this value multiplies enemy threat (it actually divides AttackGroup power) during target selection, so the lower this value the more AttackGroup will be eager to suicide. 9 b) Attack: [b]quota.thr_mod.attack: [<min>, <max>][/b] - again random(<min>, <max>) - this value multiplies enemy threat (it actually divides AttackGroup power) during target selection, so the lower this value the more AttackGroup will be eager to suicide.
10 \n 10 \n
11 3) [b]quota.raid: [<min>, <avg>][/b]. 11 3) [b]quota.raid: [<min>, <avg>][/b].
12 Threat (enemy) and power (own) is currently magic values calculated by AI code like 12 Threat (enemy) and power (own) is currently magic values calculated by AI code like
13 {{{threat = DPS^0.5 * alpha_damage^0.25 * (current_health + current_shield*2)^0.5 * const1}}} 13 {{{threat = DPS^0.5 * alpha_damage^0.25 * (current_health + current_shield*2)^0.5 * const1}}}
14 { { { DPS - damage per seconds ( with custom modifiers for status effects like stun or slow) ; 14 { { { DPS - damage per second ( with custom modifiers for status effects like stun or slow) ;
15 alphaDamage - single shot damage (with custom modifiers for status effects like stun or slow); 15 alphaDamage - single shot damage (with custom modifiers for status effects like stun or slow);
16 const1 - some precalculated constant to keep values small near 1.0 (instead of 100000.0)}}} 16 const1 - some precalculated constant to keep values small near 1.0 (instead of 100000.0)}}}
17 \n 17 \n
18 Currently the only way to read threat values for each unit is to recompile AI and manually print it. Few threat examples: 18 Currently the only way to read threat values for each unit is to recompile AI and manually print it. Few threat examples:
19 {{{Glaive (cloakraid) = 1.108003; 19 {{{Glaive (cloakraid) = 1.108003;
20 Duck (amphraid) = 2.12699; 20 Duck (amphraid) = 2.12699;
21 Detriment (striderdetriment) = 257.516357}}} 21 Detriment (striderdetriment) = 257.516357}}}
22 \n 22 \n
23 For [b]quota.raid=[6.0, 20.0][/b] - first value 6.0 controls minimum power of raid group; 6*cloakraid or 3*amphraid is enough to form a group and start raiding: 23 For [b]quota.raid=[6.0, 20.0][/b] - first value 6.0 controls minimum power of raid group; 6*cloakraid or 3*amphraid is enough to form a group and start raiding:
24 6*1.108003 >= 6.0 or 3*2.12699 >= 6.0 or any combination of raiders where total power sum >= 6.0. Second value 20.0 controls maximum number of raiders in a single group: if power of a group exceeds 20.0 another raider won't be assigned to this group. 24 6*1.108003 >= 6.0 or 3*2.12699 >= 6.0 or any combination of raiders where total power sum >= 6.0. Second value 20.0 controls maximum number of raiders in a single group: if power of a group exceeds 20.0 another raider won't be assigned to this group.
25 \n 25 \n
26 4) [b]retreat.builder[/b], [b]retreat.fighter[/b] - default percent of health at which unit will retreat to base (separate for builders and attackers). But per-unit config value overrides it, see [url=https://github.com/ZeroK-RTS/Chobby/blob/7aeee0295045e8f65421db15b13848a69ac7213e/LuaMenu/configs/gameConfig/zk/defaultSettings/AI/Skirmish/DevCircuitEconomist/stable/config/behaviour.json#L65]behaviour.cloakcon.retreat[/url] for example (also see [url=https://github.com/ZeroK-RTS/Zero-K/tree/master/units]Zero-K units[/url] for internal-name to human-readable translation, cloakcon==Conjurer). 26 4) [b]retreat.builder[/b], [b]retreat.fighter[/b] - default percent of health at which unit will retreat to base (separate for builders and attackers). But per-unit config value overrides it, see [url=https://github.com/ZeroK-RTS/Chobby/blob/7aeee0295045e8f65421db15b13848a69ac7213e/LuaMenu/configs/gameConfig/zk/defaultSettings/AI/Skirmish/DevCircuitEconomist/stable/config/behaviour.json#L65]behaviour.cloakcon.retreat[/url] for example (also see [url=https://github.com/ZeroK-RTS/Zero-K/tree/master/units]Zero-K units[/url] for internal-name to human-readable translation, cloakcon==Conjurer).
27 [b]retreat.shield: [<empty>, <full>][/b] - at <empty> percent of shield unit will retreat to base, when shield regenerates to <full> percent unit will return to battle (0.85 == 85%) 27 [b]retreat.shield: [<empty>, <full>][/b] - at <empty> percent of shield unit will retreat to base, when shield regenerates to <full> percent unit will return to battle (0.85 == 85%)