Логин:   Пароль:    

Форум

Алгоритм автодележки

На страницу Пред.  1, 2, 3  След. [Сообщений: 41]
Сообщение
19 сен 2016, 02:33
Аватар пользователя
В сети
В личку Артуру пиши.
02:23:13 TK_Truenerevar: БГ НУБЫ РАКИ ПАВЕЗЛО Изображение
Сообщение
19 сен 2016, 23:36
Аватар пользователя
Не в сети
Если хотите поменять систему рейтинга, надо из уважения к dfs'у, который её кропотливо создавал и дорабатывал на протяжение нескольких лет, не молча сменить её, а побить его в Бо и тогда иметь полное моральное право что-то сносить и ставить новое.

Крче, качайте Hearthstone и раскидывайте картишки, посоны. 11
All men are not created equal!
Inequality is not wrong — equality is!
Сообщение
20 сен 2016, 00:20
Аватар пользователя
В сети
мне дфс бо21 должен, ток он не будет играть
02:23:13 TK_Truenerevar: БГ НУБЫ РАКИ ПАВЕЗЛО Изображение
Сообщение
20 сен 2016, 00:26
Аватар пользователя
Не в сети
А ты апнул 2к в HD?
All men are not created equal!
Inequality is not wrong — equality is!
Сообщение
20 сен 2016, 10:53
Аватар пользователя
В сети
2к1 года два назад ещё)
02:23:13 TK_Truenerevar: БГ НУБЫ РАКИ ПАВЕЗЛО Изображение
Сообщение
21 сен 2016, 23:23
Аватар пользователя
Не в сети
Также есть мысли на эту тему. Насколько я смог определить, сейчас дележка идет через нахождение минимальной разницы суммарных рейтов команд среди всех возможных вариантов. Могу предложить свой вариант, немного более хитрый.
Игру, о которой говорил топикстартер, моим алгоритмом делит так:
team1: VIK_Dench(1666), nagibator(1178), Maryan(1134) AndreI(1192),
team2: classicpro(1526), MacInbird_(1414), Bosfort(1253), Vishenka(964).
Если кто из админов заинтересуется, пишите в ЛС. Могу набросать код на С.
Сообщение
22 сен 2016, 02:24
Администратор
Аватар пользователя
Не в сети
Могу скинуть в личку наш код на php, он вроде не сильно отличается от C..
Особый взлёт свободной мысли позволяет увидеть всю красоту жизни
Сообщение
22 сен 2016, 03:05
Редактор новостей
Аватар пользователя
Не в сети
Corn писал(а):
Также есть мысли на эту тему. Насколько я смог определить, сейчас дележка идет через нахождение минимальной разницы суммарных рейтов команд среди всех возможных вариантов. Могу предложить свой вариант, немного более хитрый.
Игру, о которой говорил топикстартер, моим алгоритмом делит так:
team1: VIK_Dench(1666), nagibator(1178), Maryan(1134) AndreI(1192),
team2: classicpro(1526), MacInbird_(1414), Bosfort(1253), Vishenka(964).
Если кто из админов заинтересуется, пишите в ЛС. Могу набросать код на С.


Делёжка идёт совсем не через нахождение минимальной разницы суммарных рейтов. Такой вариант был бы как-раз самым адекватным, как мне кажется)
Сообщение
22 сен 2016, 09:37
Аватар пользователя
Забанен
Не в сети
Кидай.
Сообщение
22 сен 2016, 10:53
Редактор новостей
Аватар пользователя
Не в сети
Мне тоже, если не жалко)
Делёж, который скинул Corn самый ровный по рейту, мой алгоритм тоже выдаёт его как наилучший (1289 - 1292).
А делёж, который был в самой игре, мой алгоритм вообще не рассматривает как дисбалансный, кстати :D

-- 22 сен 2016, 10:09 --

P.S. Если делить строго по среднему, не будет такого рандома в делёжке и рейты станут намного адекватнее, т.к. от них будет напрямую зависеть делёжка. Берём делёж из примера. Разница 123 очка. То есть алгоритму, по сути, пофигу, Банан там (1178), или Денчик (1666), может поделить и так, и так. Лучше установить прямую зависимость делёжки от рейта.
Поначалу будут кривые делёжки, потому что некоторые 1100 играют на уровне с 1250+ игроками, но потом рейты быстро придут в норму.
Сообщение
22 сен 2016, 11:39
Аватар пользователя
Забанен
Не в сети
Потратил 20 минут, тоже написал код:)
Код:
package ru.rusaoc.console;

import java.util.ArrayList;
import java.util.List;

public class Main {
    private static int getSumRating(List<Player> team) {
        int result = 0;
        for (Player player : team) {
            result += player.getRating();
        }

        return result;
    }

    public static void main(String[] args) {
        List<Player> players = new ArrayList<>();
        players.add(new Player("VIK_Dench", 1666));
        players.add(new Player("Bosfot", 1253));
        players.add(new Player("Vishenka", 964));
        players.add(new Player("classicpro", 1526));
        players.add(new Player("MacInbird_", 1414));
        players.add(new Player("AndreI", 1192));
        players.add(new Player("nagibator", 1178));
        players.add(new Player("Maryan", 1134));

        for (Player player : players) {
            System.out.println("Player: " + player);
        }

        int n = 0;
        int minDiff = Integer.MAX_VALUE;
        List<Player> bestTeam1 = null;
        List<Player> bestTeam2 = null;

        long time1 = System.currentTimeMillis();
        for (int i1 = 0; i1 < 5; i1++) {
            for (int i2 = i1 + 1; i2 < 6; i2++) {
                for (int i3 = i2 + 1; i3 < 7; i3++) {
                    for (int i4 = i3 + 1; i4 < 8; i4++) {
                        List<Player> team1 = new ArrayList<>();
                        List<Player> team2 = new ArrayList<>(players);

                        team1.add(players.get(i1));
                        team1.add(players.get(i2));
                        team1.add(players.get(i3));
                        team1.add(players.get(i4));

                        team2.removeAll(team1);

                        int teamRating1 = getSumRating(team1);
                        int teamRating2 = getSumRating(team2);

                        int diff = Math.abs(teamRating1 - teamRating2);
                        if (diff < minDiff) {
                            minDiff = diff;
                            bestTeam1 = team1;
                            bestTeam2 = team2;
                        }

                        System.out.println("team1: " + team1);
                        System.out.println("team2: " + team2);
                        System.out.println("diff: " + diff);

                        n++;
                    }
                }
            }
        }
        long time2 = System.currentTimeMillis();
        long time = time2 - time1;

        System.out.println(String.format("time: %dms", time));
        System.out.println("n = " + n);

        System.out.println("minDiff: " + minDiff);
        System.out.println("Best team1(" + getSumRating(bestTeam1) + "): " + bestTeam1);
        System.out.println("Best team2(" + getSumRating(bestTeam2) + "): " + bestTeam2);
    }

    public static class Player {
        private String name;
        private int rating;

        public Player() {
        }

        public Player(String name, int rating) {
            this.name = name;
            this.rating = rating;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getRating() {
            return rating;
        }

        public void setRating(int rating) {
            this.rating = rating;
        }

        @Override
        public String toString() {
            final StringBuilder sb = new StringBuilder("Player{");
            sb.append("name='").append(name).append('\'');
            sb.append(", rating=").append(rating);
            sb.append('}');
            return sb.toString();
        }
    }
}


Результат:
Код:
time: 7ms
n = 70
minDiff: 13
Best team1(5170): [Player{name='VIK_Dench', rating=1666}, Player{name='AndreI', rating=1192}, Player{name='nagibator', rating=1178}, Player{name='Maryan', rating=1134}]
Best team2(5157): [Player{name='Bosfot', rating=1253}, Player{name='Vishenka', rating=964}, Player{name='classicpro', rating=1526}, Player{name='MacInbird_', rating=1414}]
Сообщение
22 сен 2016, 12:57
Администратор
Аватар пользователя
Не в сети
svinosovetnik писал(а):
Кидай.

Скинул.
Особый взлёт свободной мысли позволяет увидеть всю красоту жизни
Сообщение
22 сен 2016, 17:08
Редактор новостей
Аватар пользователя
Не в сети
А мне можно?)
Сообщение
22 сен 2016, 17:48
Аватар пользователя
Забанен
Не в сети
Я уже запилил и отправил только что.
Сообщение
22 сен 2016, 17:53
Аватар пользователя
В сети
банан проведи турнир 1x1 арабию лучше.. о победителе в газете своей напишешь ..ты мужчина серьезный
00:27:50 <Всем>_CJIOH_: 11 makin kak dela?
01:02:29 <Всем>_CJIOH_: nravitsja?
00:23:11 _CJIOH_: banan s@k@!
00:24:36 _CJIOH_: ignore
Сообщение
22 сен 2016, 17:57
Редактор новостей
Аватар пользователя
Не в сети
svinosovetnik писал(а):
Я уже запилил и отправил только что.

Мне просто интересно посмотреть старый. Скинь, если не жалко)
Сообщение
22 сен 2016, 18:31
Аватар пользователя
Забанен
Не в сети
Мне не жалко, но пусть лучше Артур сам кидает.

Старый считает не по рейту, а по десятичному логарифму от рейта - 900(видимо, забыли до 1090 поднять).

Сам алгоритм, вроде как, тоже по минимальной разницы среднего рейта работает. Но я чо-то сначала проверил, подумал, что неправильно работает, а так-то вроде и правильно.

В принципе можно 1 строчку поменять и будет делить нормально.
Сообщение
23 сен 2016, 10:40
Редактор новостей
Аватар пользователя
Не в сети
Ну поздравляем всех с нововведением)
Сообщение
23 сен 2016, 15:15
Аватар пользователя
Не в сети
Я вчера с таким нововведением из 4 тг 4 слил, чёт пока не очень!!!!
Ну когда вс Классика на фланге на аре играю, то я делаю др+фк 32+2-7 (с) TK_Fred
Сообщение
23 сен 2016, 15:29
Аватар пользователя
В сети
11 ну фред говорит что реит в норму потом придет, кто на че играет то у того и будет
00:27:50 <Всем>_CJIOH_: 11 makin kak dela?
01:02:29 <Всем>_CJIOH_: nravitsja?
00:23:11 _CJIOH_: banan s@k@!
00:24:36 _CJIOH_: ignore
На страницу Пред.  1, 2, 3  След. [Сообщений: 41]

Перейти:  

Сейчас посетителей на форуме: 3, из них зарегистрированных: 0, 0 скрытых и гостей: 3 | Больше всего посетителей (834) на форуме было 12 май 2015, 16:08
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Яндекс.Метрика