Re[9]: Честное время
От: elmal  
Дата: 19.07.21 17:57
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Железо будет недоиспользоваться. Задавили один из AI и всё — его физическое железо простаивает...

Зато будет достаточно честный бенчмарк. Я собственно не очень понимаю зачем гарантированно ставить различные AI в равные условия кроме именно соревновательных. Если мы возьмем именно игры, то если мы заморачиваться не будем, то в среднем каждый поток один черт будет примерно в равных условиях, естественно при условиях что число потоков меньше чем количество ядер процессора. Да и даже если какой AI получит преимущество не честно, ну и хрен с ним. Тебе нужно то сделать чтоб игроку было интересно. Или у тебя игра программисткая, соответственно игрок кодит эти AI и далее они сравниваются кто лучше накодил?
Re[10]: Честное время
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 19.07.21 18:27
Оценка:
E> если какой AI получит преимущество не честно, ну и хрен с ним.

Нет, тогда не будет соревновательной мотивации для написания новых AI.
Re[4]: Честное время
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 19.07.21 18:34
Оценка:
A> вопрос, хватит ли людям 4 мин макс на адекватную реакцию на изменения в мире

Вот это вообще не вопрос. Можно ведь сделать завершение хода по мере готовности человека.
Если ему понадобится пять минут, ну значит AI тогда получат эту дополнительную минуту, так как думают в то же время.
Re: Честное время
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.07.21 16:36
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Как в дотнете организовать многопоточное приложение таким образом, чтобы нити, выполняющие расчёты за разных AI-игроков, получали одинаковое количество процессорных ресурсов в час (или в другой промежуток времени)?

https://stackoverflow.com/questions/1829223/limiting-thread-execution-processor-cycles-in-java
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Честное время
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 27.07.21 18:36
Оценка:
S>https://stackoverflow.com/questions/1829223/limiting-thread-execution-processor-cycles-in-java

Хорошего ответа я оттуда вычитать не смог.
Re[3]: Честное время
От: Воронков Василий Россия  
Дата: 28.07.21 09:54
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

E>> каждый worker ограничен не по времени, в по числу итераций.

ЭФ>Я ничего не понял. Что такое итерация? Ты мне предлагаешь делать виртуальный процессор и считать виртуальные инструкции вручную?
ЭФ>Просто представь, что алгоритмы AI разные, и работу за один условный ход они проделывают разную.

Нужно опираться не на реальное время, а на внутриигровые такты. Такт — это атомарное действие в рамках игры. Скажем, игрок 1 делает шаг на север — это отнимает один такт. Далее всем игрокам выдаётся одинаковое количество тактов.
Re[4]: Честное время
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 28.07.21 09:57
Оценка:
ВВ>Нужно опираться не на реальное время, а на внутриигровые такты. Такт — это атомарное действие в рамках игры. Скажем, игрок 1 делает шаг на север — это отнимает один такт. Далее всем игрокам выдаётся одинаковое количество тактов.

Проблема моей игры в том, что там надо мало двигаться и много думать. И кто больше думает — быстрее выигрывает.
Что толку, если они будут двигаться одинаково, но при этом один из них будет это делать на пару порядков умнее?
Re[5]: Честное время
От: akasoft Россия  
Дата: 28.07.21 10:43
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Проблема моей игры в том, что там надо мало двигаться и много думать. И кто больше думает — быстрее выигрывает.

Поэтому я предложил тебе сначала измерить, кто сколько времени "думает" и на какие думы он это время тратит, что позволит разбить одну думу на стадии и выявить наличие узких мест.
Возможно, что все укладываются в 4 мин, и ещё 2/3 времени бездействуют.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: Честное время
От: Воронков Василий Россия  
Дата: 28.07.21 11:29
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ВВ>>Нужно опираться не на реальное время, а на внутриигровые такты. Такт — это атомарное действие в рамках игры. Скажем, игрок 1 делает шаг на север — это отнимает один такт. Далее всем игрокам выдаётся одинаковое количество тактов.


ЭФ>Проблема моей игры в том, что там надо мало двигаться и много думать. И кто больше думает — быстрее выигрывает.

ЭФ>Что толку, если они будут двигаться одинаково, но при этом один из них будет это делать на пару порядков умнее?

То есть надо, чтобы процессорных ресурсов каждому такому "игроку" выделялось абсолютно одинаковое количество? Мне кажется, тут такое "в лоб" решить не получится. Зависит от того, как AI "думает". Если это можно представить в виде оп-кодов для виртуальной машины, то тогда и исполнять последовательно — оп-код одного "игрока", затем "другого". Да и то возникает вопрос в равноценности разных оп-кодов. Это уже надо смотреть более предметно.
Re[6]: Честное время
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 28.07.21 12:22
Оценка:
ВВ> исполнять последовательно — оп-код одного "игрока", затем "другого"

Чисто теоретически это необязательно (переключаться через каждый опкод).
Можно выполнять по N опкодов подряд и затем переключаться.
Будет погрешность, но она будет контролируемая.
Re: Честное время
От: Xander Zerge Россия www.zerge.com
Дата: 28.07.21 12:37
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Как в дотнете организовать многопоточное приложение таким образом, чтобы нити, выполняющие расчёты за разных AI-игроков, получали одинаковое количество процессорных ресурсов в час (или в другой промежуток времени)?


Для винды можно использовать WinAPI: GetThreadTimes, SuspendThread, ResumeThread.
То есть запустить каждого AI-игрока в отдельном потоке, а ещё одним управляющим потоком периодически замерять время, потраченное потоками игроков, и те потоки, которые потратили времени больше других, ставить на паузу соответствующей продолжительности.
Серёжа Новиков,
программист
Re[7]: Честное время
От: Воронков Василий Россия  
Дата: 28.07.21 13:18
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ВВ>> исполнять последовательно — оп-код одного "игрока", затем "другого"

ЭФ>Чисто теоретически это необязательно (переключаться через каждый опкод).
ЭФ>Можно выполнять по N опкодов подряд и затем переключаться.
ЭФ>Будет погрешность, но она будет контролируемая.

А вам исполнение нескольких оп-кодов подряд никаких преимуществ не даст, только усложнение реализации. Впрочем, это уже детали, смотрите сами.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.