mirror of
https://github.com/wesnoth/wesnoth
synced 2025-04-28 17:32:01 +00:00
Change behavior of aspect recruitment_diversity.
This commit is contained in:
parent
7ad252e814
commit
b08afe2f1a
@ -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} }
|
||||
|
@ -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]
|
||||
|
@ -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<data>* 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<data>* leader_data) const {
|
||||
void recruitment::do_randomness(std::vector<data>* 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<double>(rand()) / RAND_MAX) * get_recruitment_randomness();
|
||||
}
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ private:
|
||||
void update_state();
|
||||
|
||||
// Other
|
||||
void do_diversity_and_randomness_balancing(std::vector<data>* leader_data) const;
|
||||
void do_randomness(std::vector<data>* leader_data) const;
|
||||
void do_similarity_penalty(std::vector<data>* leader_data) const;
|
||||
int get_cheapest_unit_cost_for_leader(const unit_map::const_iterator& leader);
|
||||
void handle_recruitment_more(std::vector<data>* leader_data) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user