From b08afe2f1a7296d87e9a85c8ded6f255551cf14c Mon Sep 17 00:00:00 2001 From: flix Date: Thu, 26 Sep 2013 16:02:56 +0200 Subject: [PATCH] Change behavior of aspect recruitment_diversity. --- data/ai/ais/ai_default_rca_strong.cfg | 2 +- data/ai/utils/default_config.cfg | 2 +- src/ai/recruitment/recruitment.cpp | 23 +++++++++-------------- src/ai/recruitment/recruitment.hpp | 2 +- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/data/ai/ais/ai_default_rca_strong.cfg b/data/ai/ais/ai_default_rca_strong.cfg index 742a3023a31..983782a563d 100644 --- a/data/ai/ais/ai_default_rca_strong.cfg +++ b/data/ai/ais/ai_default_rca_strong.cfg @@ -21,7 +21,7 @@ ### Aspects for a strong AI ### - {AI_SIMPLE_ALWAYS_ASPECT recruitment_diversity 0} + {AI_SIMPLE_ALWAYS_ASPECT recruitment_diversity 0.8} {AI_SIMPLE_ALWAYS_ASPECT recruitment_randomness 0} {AI_SIMPLE_ALWAYS_ASPECT villages_per_scout 0} {AI_ASPECT recruitment_save_gold {AI_DEACTIVATE_SAVE_GOLD} } diff --git a/data/ai/utils/default_config.cfg b/data/ai/utils/default_config.cfg index 84d9b15b733..cda568fe07c 100644 --- a/data/ai/utils/default_config.cfg +++ b/data/ai/utils/default_config.cfg @@ -77,7 +77,7 @@ [/value] [/default] [/aspect] -{DEFAULT_ASPECT_VALUE recruitment_diversity 1.0} +{DEFAULT_ASPECT_VALUE recruitment_diversity 2.0} {DEFAULT_ASPECT_VALUE recruitment_ignore_bad_combat no} {DEFAULT_ASPECT_VALUE recruitment_ignore_bad_movement no} [aspect] diff --git a/src/ai/recruitment/recruitment.cpp b/src/ai/recruitment/recruitment.cpp index 5941042e839..12241968699 100644 --- a/src/ai/recruitment/recruitment.cpp +++ b/src/ai/recruitment/recruitment.cpp @@ -96,13 +96,6 @@ const static int MAP_VILLAGE_SURROUNDING = 1; // stronger favored compared to just *good* units. const static double COMBAT_SCORE_POWER = 1.; -// Determines a kind of *lower threshold* for combat scores. -// A smaller value means that combat analysis will give more 0 scores. -// 0 means that only the best unit gets a 100 score and all other a 0 score. -// 1 means that all units which are worse than average will get a 0 score. -// Formula: zero_threshold = max_score - (COMBAT_SCORE_THRESHOLD * (max_score - average_score)); -const static double COMBAT_SCORE_THRESHOLD = 1.5; - // A cache is used to store the simulation results. // This value determines how much the average defenses of the important hexes can differ // until the simulation will run again. @@ -320,7 +313,7 @@ void recruitment::execute() { } do_similarity_penalty(&leader_data); - do_diversity_and_randomness_balancing(&leader_data); + do_randomness(&leader_data); handle_recruitment_more(&leader_data); LOG_AI_RECRUITMENT << "Scores after extra treatments:\n"; @@ -997,9 +990,12 @@ void recruitment::do_combat_analysis(std::vector* leader_data) { // What we do now is a linear transformation. // We want to map the scores in temp_scores to something between 0 and 100. // The max score shall always be 100. - // The min score depends on parameters. + // The min score depends on the aspect "recruitment_diversity". double new_100 = max; - double score_threshold = (COMBAT_SCORE_THRESHOLD > 0) ? COMBAT_SCORE_THRESHOLD : 0.000001; + double score_threshold = get_recruitment_diversity(); + if (score_threshold <= 0) { + score_threshold = 0.0001; + } double new_0 = max - (score_threshold * (max - average)); if (new_100 == new_0) { // This can happen if max == average. (E.g. only one possible recruit) @@ -1521,17 +1517,16 @@ void recruitment::update_state() { } /** - * Will add a offset (DIVERSITY_WEIGHT * 50) to all scores so - * overall recruitment will be more diverse. + * Will add a random value between 0 and "recruitment_randomness" + * to all recruits */ -void recruitment::do_diversity_and_randomness_balancing(std::vector* leader_data) const { +void recruitment::do_randomness(std::vector* leader_data) const { if (!leader_data) { return; } BOOST_FOREACH(data& data, *leader_data) { BOOST_FOREACH(score_map::value_type& entry, data.scores) { double& score = entry.second; - score += get_recruitment_diversity() * 25; score += (static_cast(rand()) / RAND_MAX) * get_recruitment_randomness(); } } diff --git a/src/ai/recruitment/recruitment.hpp b/src/ai/recruitment/recruitment.hpp index 3ef0e33beb3..2c4e60f5054 100644 --- a/src/ai/recruitment/recruitment.hpp +++ b/src/ai/recruitment/recruitment.hpp @@ -175,7 +175,7 @@ private: void update_state(); // Other - void do_diversity_and_randomness_balancing(std::vector* leader_data) const; + void do_randomness(std::vector* leader_data) const; void do_similarity_penalty(std::vector* leader_data) const; int get_cheapest_unit_cost_for_leader(const unit_map::const_iterator& leader); void handle_recruitment_more(std::vector* leader_data) const;