Skip to content

Commit

Permalink
Merge pull request #14 from Des-/meanValueDrawing
Browse files Browse the repository at this point in the history
Mean value drawing
  • Loading branch information
Seltsamsel committed Dec 3, 2018
2 parents c67c317 + 7d13ab0 commit c62b047
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 6 deletions.
2 changes: 2 additions & 0 deletions acp/main_module.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ public function draw(bool $submit): void
config::set(config::draw_team_extra_civs_2vs2, (int)$request->variable('nczone_draw_team_extra_civs_2vs2', config::default(config::draw_team_extra_civs_2vs2)));
config::set(config::draw_team_extra_civs_3vs3, (int)$request->variable('nczone_draw_team_extra_civs_3vs3', config::default(config::draw_team_extra_civs_3vs3)));
config::set(config::draw_team_extra_civs_4vs4, (int)$request->variable('nczone_draw_team_extra_civs_4vs4', config::default(config::draw_team_extra_civs_4vs4)));
config::set(config::draw_factor, $request->variable('nczone_draw_factor', config::default(config::draw_factor)));
$player_num_civs_1vs1 = (int)$request->variable('nczone_draw_player_num_civs_1vs1', config::default(config::draw_player_num_civs_1vs1));
$player_num_civs_2vs2 = (int)$request->variable('nczone_draw_player_num_civs_2vs2', config::default(config::draw_player_num_civs_2vs2));
$player_num_civs_3vs3 = (int)$request->variable('nczone_draw_player_num_civs_3vs3', config::default(config::draw_player_num_civs_3vs3));
Expand Down Expand Up @@ -104,6 +105,7 @@ public function draw(bool $submit): void
'nczone_draw_player_num_civs_2vs2' => config::get(config::draw_player_num_civs_2vs2),
'nczone_draw_player_num_civs_3vs3' => config::get(config::draw_player_num_civs_3vs3),
'nczone_draw_player_num_civs_4vs4' => config::get(config::draw_player_num_civs_4vs4),
'nczone_draw_factor' => config::get(config::draw_factor),
));
}

Expand Down
11 changes: 10 additions & 1 deletion adm/style/acp_nczone_draw.html
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,15 @@
<input type="number" name="nczone_draw_player_num_civs_4vs4" value="{{ nczone_draw_player_num_civs_4vs4 }}" />
</dd>
</dl>
<dl>
<dt>
<label for="nczone_draw_factor">{{ lang('NCZONE_DRAW_FACTOR') }}{{ lang('COLON') }}</label><br />
<span>{{ lang('NCZONE_DRAW_FACTOR_DESCR') }}</span>
</dt>
<dd>
<input type="number" step="0.01" min="0.00" max="1.00" name="nczone_draw_factor" value="{{ nczone_draw_factor }}" />
</dd>
</dl>
</fieldset>

{% endblock %}
{% endblock %}
3 changes: 3 additions & 0 deletions config/config.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ final class config
public const draw_player_num_civs_2vs2 = 'nczone_draw_player_num_civs_2vs2';
public const draw_player_num_civs_3vs3 = 'nczone_draw_player_num_civs_3vs3';
public const draw_player_num_civs_4vs4 = 'nczone_draw_player_num_civs_4vs4';
public const draw_factor = 'nczone_draw_factor';

public const ACL_CONFIG_KEYS = [
self::rules_post_id,
Expand Down Expand Up @@ -74,6 +75,7 @@ final class config
self::draw_player_num_civs_2vs2,
self::draw_player_num_civs_3vs3,
self::draw_player_num_civs_4vs4,
self::draw_factor,
];

private static $defaults = [
Expand Down Expand Up @@ -109,6 +111,7 @@ final class config
self::draw_player_num_civs_2vs2 => 5,
self::draw_player_num_civs_3vs3 => 4,
self::draw_player_num_civs_4vs4 => 3,
self::draw_factor => 0.4,
];

public static function get(string $key, $default = null)
Expand Down
1 change: 1 addition & 0 deletions tests/unit/config/config_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ public function module_data_provider()
['config.add', [config::draw_player_num_civs_2vs2, config::default(config::draw_player_num_civs_2vs2)]],
['config.add', [config::draw_player_num_civs_3vs3, config::default(config::draw_player_num_civs_3vs3)]],
['config.add', [config::draw_player_num_civs_4vs4, config::default(config::draw_player_num_civs_4vs4)]],
['config.add', [config::draw_factor, config::default(config::draw_factor)]],
]],
[config::CRON_CONFIG_KEYS, [
['config.add', ['nczone_activity_cron', config::default('nczone_activity_cron')]],
Expand Down
17 changes: 12 additions & 5 deletions zone/draw_teams.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/

namespace eru\nczone\zone;
use eru\nczone\config\config;

/**
* Class to make teams (not maps or civs!)
Expand Down Expand Up @@ -202,17 +203,24 @@ public function make_matches(entity\match_players_list $player_list): array
$best_teams = [];

foreach ($permutes as $permute) {
$curr_value = 0;
$curr_rating_diff = 0;
$curr_variance = 0;
$curr_teams = [];

$offset = 0;
foreach ($permute as $match_size) {
$result = $this->_make_match($sorted_player_list->slice($offset, $match_size * 2));
$offset += $match_size * 2;
$curr_value += $result['value'];
$curr_rating_diff += $result['rating_diff'];
$curr_teams[] = $result['teams'];
$curr_variance += entity\match_players_list::get_abs_rating_variance($sorted_player_list->slice($offset, $match_size * 2));
$offset += $match_size * 2;
}

$factor = config::get(config::draw_factor);
if ($factor < 0 || $factor >1) {
$factor = 0; //Wenn faktor komisch, nimm alten Algo
}
$curr_value = $factor * $curr_variance + (1-$factor) * $curr_rating_diff;
if ($best_value < 0.0 || $curr_value < $best_value) {
$best_value = $curr_value;
$best_teams = $curr_teams;
Expand Down Expand Up @@ -242,7 +250,6 @@ private function make_match_with_team_def(array $team_def, entity\match_players_
foreach ($team_def as $teams) {
$team1 = $players->pick_indexes(...$teams[0]);
$team2 = $players->pick_indexes(...$teams[1]);

$value = $team1->get_abs_rating_difference($team2);
if ($best_value < 0.0 || $value < $best_value) {
$best_value = $value;
Expand All @@ -252,7 +259,7 @@ private function make_match_with_team_def(array $team_def, entity\match_players_

return [
'teams' => $best_teams,
'value' => $best_value,
'rating_diff' => $best_value,
];
}
}
24 changes: 24 additions & 0 deletions zone/entity/match_players_list.php
Original file line number Diff line number Diff line change
Expand Up @@ -182,4 +182,28 @@ private static function get_min_rating_of_all(match_players_list ...$players_lis
return $list->get_min_rating();
}, $players_lists));
}

private static function get_mean_rating(match_players_list ...$players_lists): int
{
$value = 0;
$number = 0;
foreach ($players_lists as $list) {
$value += $list->get_total_rating();
$number += $list->length();
}
return $value/$number;
}

public static function get_abs_rating_variance(match_players_list ...$players_lists): int
{
$mean = self::get_mean_rating(...$players_lists);
$value = 0;
foreach ($players_lists as $list) {
$player_array = $list->items();
foreach ($player_array as $player) {
$value += \abs($mean - $player->get_rating());
}
}
return $value;
}
}

0 comments on commit c62b047

Please sign in to comment.