ExpAI recruiting: make high_level_fraction parameter configurable
This also sets its default value to zero, in order to have consistent default behavior with versions from before this parameter was introduced. It also provides a macro so that the ExpAI can be used with custom parameters in a scenario config, and adds high_level_fraction as an optional parameter to the Recruit Rushers Micro AI.
This commit is contained in:
parent
b8d1ef94f0
commit
6dc199d4f8
5 changed files with 76 additions and 2 deletions
|
@ -35,6 +35,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(dummy_engine, params)
|
||||||
local ca_recruit_rushers = {}
|
local ca_recruit_rushers = {}
|
||||||
|
|
||||||
function ca_recruit_rushers:evaluation(cfg, data)
|
function ca_recruit_rushers:evaluation(cfg, data)
|
||||||
|
params.high_level_fraction = cfg.high_level_fraction
|
||||||
return dummy_engine:recruit_rushers_eval()
|
return dummy_engine:recruit_rushers_eval()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -785,7 +785,7 @@ return {
|
||||||
local randomness = params.randomness or 0.1
|
local randomness = params.randomness or 0.1
|
||||||
|
|
||||||
-- Bonus for higher-level units, as unit cost is penalized otherwise
|
-- Bonus for higher-level units, as unit cost is penalized otherwise
|
||||||
local high_level_fraction = 0.33
|
local high_level_fraction = params.high_level_fraction or 0
|
||||||
local all_units = AH.get_live_units {
|
local all_units = AH.get_live_units {
|
||||||
side = wesnoth.current.side,
|
side = wesnoth.current.side,
|
||||||
{ "not", { canrecruit = "yes" }}
|
{ "not", { canrecruit = "yes" }}
|
||||||
|
|
|
@ -9,6 +9,7 @@ wesnoth.require("ai/lua/generic_recruit_engine.lua").init(internal_recruit_cas,
|
||||||
local ca_recruit_rushers = {}
|
local ca_recruit_rushers = {}
|
||||||
|
|
||||||
function ca_recruit_rushers:evaluation(cfg)
|
function ca_recruit_rushers:evaluation(cfg)
|
||||||
|
internal_params.high_level_fraction = cfg.high_level_fraction
|
||||||
internal_params.randomness = cfg.randomness
|
internal_params.randomness = cfg.randomness
|
||||||
internal_params.score_function = function() return cfg.ca_score end
|
internal_params.score_function = function() return cfg.ca_score end
|
||||||
return internal_recruit_cas:recruit_rushers_eval()
|
return internal_recruit_cas:recruit_rushers_eval()
|
||||||
|
|
|
@ -18,7 +18,7 @@ local function handle_default_recruitment(cfg)
|
||||||
end
|
end
|
||||||
|
|
||||||
function wesnoth.micro_ais.recruit_rushers(cfg)
|
function wesnoth.micro_ais.recruit_rushers(cfg)
|
||||||
local optional_keys = { "randomness" }
|
local optional_keys = { "high_level_fraction", "randomness" }
|
||||||
local CA_parms = {
|
local CA_parms = {
|
||||||
ai_id = 'mai_rusher_recruit',
|
ai_id = 'mai_rusher_recruit',
|
||||||
{ ca_id = "move", location = 'ca_recruit_rushers.lua', score = cfg.ca_score or 180000 }
|
{ ca_id = "move", location = 'ca_recruit_rushers.lua', score = cfg.ca_score or 180000 }
|
||||||
|
|
|
@ -590,3 +590,75 @@
|
||||||
[/candidate_action]
|
[/candidate_action]
|
||||||
[/stage]
|
[/stage]
|
||||||
#enddef
|
#enddef
|
||||||
|
|
||||||
|
#define CUSTOMIZABLE_EXPERIMENTAL_AI ARGS
|
||||||
|
# Use the Experimental AI with custom parameter setting
|
||||||
|
# Put this into the [side][ai] tag.
|
||||||
|
# Does not work in [modify_side][ai] or [modify_ai] at the moment.
|
||||||
|
[stage]
|
||||||
|
id=main_loop
|
||||||
|
name=ai_default_rca::candidate_action_evaluation_loop
|
||||||
|
{AI_CA_GOTO}
|
||||||
|
#{AI_CA_RECRUITMENT}
|
||||||
|
{AI_CA_MOVE_LEADER_TO_GOALS}
|
||||||
|
{AI_CA_MOVE_LEADER_TO_KEEP}
|
||||||
|
{AI_CA_HIGH_XP_ATTACK}
|
||||||
|
{AI_CA_COMBAT}
|
||||||
|
{AI_CA_HEALING}
|
||||||
|
{AI_CA_VILLAGES}
|
||||||
|
{AI_CA_RETREAT}
|
||||||
|
{AI_CA_MOVE_TO_TARGETS}
|
||||||
|
{AI_CA_LEADER_SHARES_KEEP}
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=recruit_rushers
|
||||||
|
max_score=300000
|
||||||
|
location="ai/lua/ca_recruit_rushers.lua"
|
||||||
|
[args]
|
||||||
|
{ARGS}
|
||||||
|
[/args]
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=switch_castle
|
||||||
|
max_score=290000
|
||||||
|
location="ai/lua/ca_castle_switch.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=retreat_injured
|
||||||
|
max_score=205000
|
||||||
|
location="ai/lua/ca_retreat_injured.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=grab_villages
|
||||||
|
max_score=200000
|
||||||
|
location="ai/lua/ca_grab_villages.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=spread_poison
|
||||||
|
max_score=190000
|
||||||
|
location="ai/lua/ca_spread_poison.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=place_healers
|
||||||
|
max_score=95000
|
||||||
|
location="ai/lua/ca_place_healers.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=village_hunt
|
||||||
|
max_score=30000
|
||||||
|
location="ai/lua/ca_village_hunt.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[candidate_action]
|
||||||
|
engine=lua
|
||||||
|
name=move_to_any_enemy
|
||||||
|
max_score=1
|
||||||
|
location="ai/lua/ca_move_to_any_enemy.lua"
|
||||||
|
[/candidate_action]
|
||||||
|
[/stage]
|
||||||
|
#enddef
|
||||||
|
|
Loading…
Add table
Reference in a new issue