Создание команды Fantasy Cricket с использованием JavaAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Создание команды Fantasy Cricket с использованием Java

Сообщение Anonymous »

Я немного новичок в Android и Java и пытаюсь создать функцию, которая генерирует случайную команду по крикету из 11 игроков с капитаном и вице-капитаном, соблюдая строгие правила, такие как
  • < li>минимальное и максимальное количество игроков на каждую роль,
  • максимальное количество игроков из одной команды
  • если соревнование небольшое, 80% игроков должны быть последовательными, а 20% – рискованными. игроков, а если соревнование мега-, 60% игроков будут стабильными, а 40% - рискованными игроками.
  • все команды должны быть уникальными
  • случайная комбинация игроков на основе команды, например 7-4,4-7,5-6 и 6-5 и т. д.
Теперь я сделал такую ​​функцию:

Код: Выделить всё

private void generateTeams(List
 captains, List viceCaptains) {
if (!canGenerateTeams()) {
showErrorDialog(getString(R.string.error), getString(R.string.unable_to_generate_teams));
return;
}

int consistentRatio = contestType == 2 ? 80 : 60; // Small contest: 80-20, Mega contest: 60-40

// Prepare player pools
List allPlayers = new ArrayList(PlayersViewModelCricketAI.getBothTeamsPlayers().getValue());
allPlayers.removeAll(selectedPlayerOut); // Remove locked-out players

// Sort players by credits (higher credits first for consistent players)
allPlayers.sort((p1, p2) -> Double.compare(p2.getPlayerCredit(), p1.getPlayerCredit()));

// Divide players into consistent and risky groups
int splitIndex = (consistentRatio * allPlayers.size()) / 100;
List consistentPlayers = new ArrayList(allPlayers.subList(0, splitIndex));
List riskyPlayers = new ArrayList(allPlayers.subList(splitIndex, allPlayers.size()));

// Initialize team generation parameters
List generatedTeams = new ArrayList();
Set generatedTeamSignatures = new HashSet();
int maxPlayersFromOneTeam = MAX_PLAYERS_ONE_TEAM;

int requiredTeams = totalTeamsToCreate;
int attempts = 0;
int maxAttempts = (requiredTeams * 50);

Random random = new Random();

while (generatedTeams.size() < requiredTeams && attempts < maxAttempts) {
attempts++;

List teamPlayers = new ArrayList();
Set teamPlayerIds = new HashSet();
int team1Count = 0, team2Count = 0;

// Randomly choose a valid team combination (e.g., 7-4, 6-5, 5-6)
int team1Limit = 4 + random.nextInt(4); // Adjust range as needed
int team2Limit = TOTAL_PLAYERS - team1Limit;

// Add locked-in players
for (Player player : selectedPlayerIn) {
if (teamPlayers.size() < TOTAL_PLAYERS && !teamPlayerIds.contains(player.getPlayerId())) {
if (validatePositionConstraints(player, teamPlayers)) {
teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());

if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}
}

// Add captain and vice-captain
Player captain = captains.get(random.nextInt(captains.size()));
Player viceCaptain = viceCaptains.get(random.nextInt(viceCaptains.size()));

// Ensure captain and vice-captain are not the same
if (captain.getPlayerId() != viceCaptain.getPlayerId()) {
if (!teamPlayerIds.contains(captain.getPlayerId()) && validatePositionConstraints(captain, teamPlayers)) {
teamPlayers.add(captain);
teamPlayerIds.add(captain.getPlayerId());
if (captain.getPlayerTeamNumber() == 1) team1Count++;
if (captain.getPlayerTeamNumber() == 2) team2Count++;
}

if (!teamPlayerIds.contains(viceCaptain.getPlayerId()) && validatePositionConstraints(viceCaptain, teamPlayers)) {
teamPlayers.add(viceCaptain);
teamPlayerIds.add(viceCaptain.getPlayerId());
if (viceCaptain.getPlayerTeamNumber() == 1) team1Count++;
if (viceCaptain.getPlayerTeamNumber() == 2) team2Count++;
}
}else{
continue;
}

// Fill remaining slots with consistent players
for (Player player : consistentPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;

if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 &&  team2Count >= team2Limit) continue;

teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}

// Fill remaining slots with risky players
for (Player player : riskyPlayers) {
if (teamPlayers.size() >= TOTAL_PLAYERS) break;

if (!teamPlayerIds.contains(player.getPlayerId()) && validatePositionConstraints(player, teamPlayers)) {
if (player.getPlayerTeamNumber() == 1 && team1Count >= team1Limit) continue;
if (player.getPlayerTeamNumber() == 2 && team2Count >= team2Limit) continue;

teamPlayers.add(player);
teamPlayerIds.add(player.getPlayerId());
if (player.getPlayerTeamNumber() == 1) team1Count++;
if (player.getPlayerTeamNumber() == 2) team2Count++;
}
}

if (validateTeam(teamPlayers, maxPlayersFromOneTeam)) {
List playerIds = new ArrayList();
for (Player p : teamPlayers) {
playerIds.add(p.getPlayerId());
}
Collections.sort(playerIds);
String teamSignature = playerIds + "-" + captain.getPlayerId() + "-" + viceCaptain.getPlayerId();

// Check uniqueness
if (!generatedTeamSignatures.contains(teamSignature)) {
Team team = new Team();
team.players = new ArrayList(teamPlayers);
team.captainId = captain.getPlayerId();
team.viceCaptainId = viceCaptain.getPlayerId();
generatedTeams.add(team);
generatedTeamSignatures.add(teamSignature); // Track this team
}
}
}

Log.e("RESULTS","REQUIRED TEAMS: "+ totalTeamsToCreate +" GENERATED TEAMS: "+ generatedTeams.size()+"  ATTEMPTS:"+attempts);

String content = getResources().getString(R.string.teams_count_confirmation, generatedTeams.size());
showSuccessDialog(content, generatedTeams);
}
и результат журнала такой

Код: Выделить всё

2024-12-01 09:51:07.597 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:30
2024-12-01 09:51:11.173 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:40
2024-12-01 09:51:14.302 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:16.138 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:17.869 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:28
2024-12-01 09:51:19.641 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:37
2024-12-01 09:51:21.848 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:35
2024-12-01 09:51:23.616 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:33
2024-12-01 09:51:25.495 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:48
2024-12-01 09:51:27.400 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
2024-12-01 09:51:30.288 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:34
2024-12-01 09:51:32.172 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:32
2024-12-01 09:51:33.722 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:36.133 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:25
2024-12-01 09:51:37.877 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:29
2024-12-01 09:51:39.724 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 20 ATTEMPTS:39
2024-12-01 09:51:42.020 25080-25080 RESULTS                 com.example.teams                   E  REQUIRED TEAMS: 20 GENERATED TEAMS: 16 ATTEMPTS:1000
как вы можете видеть, иногда он генерирует необходимые команды за меньшее количество попыток, а иногда даже за 1000 попыток не генерируется достаточно требуемых команд, игроков достаточно, но они делают случайные вещи, вызывающие дублирование команд и попытка терпит неудачу, поэтому я хочу улучшить свой код, чтобы он мог генерировать необходимые случайные вещи, строго следуя моим правилам. Дайте мне знать, если кто-нибудь здесь может мне помочь в том же вопросе.
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/792 ... using-java
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Создание команды Fantasy Cricket с использованием Java
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Веб-скрапинг в ESPN NBA Fantasy Ошибка входа в систему
    Гость » » в форуме Python
    0 Ответы
    39 Просмотры
    Последнее сообщение Гость
  • Как отслеживать отбивающих и их пробежки в приложении Cricket
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Yahoo! Максимальное количество Fantasy API?
    Anonymous » » в форуме Python
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Когда я нажимаю API игрока на API Rounaz Cricket, он отправляет мне ответ «Доступ запрещен».
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»