|
|
|||||
Регистрация: Aug 2010
Сообщений: 18
|
Оптимизация алгоритма игры Реверси
Здравствуйте, пишу игру Реверси с возможностью игры против компьютера. Возникла след. сложность в алгоритме оценки возможных вариантов хода : необходимо вычислить ценность текущего хода в зависимости от того, какие ячейки занимают белые и черные фишки. Текущий ход записан как Vector.<int>(64), в котором 0 - пустая ячейка, 1 - белая фишка и 2 - черная фишка. Есть еще один Vector.<int>(64) - который хранит ценность каждой ячейки. Оценка происходит при помощи след. метода
// grid - поле с фишками // _cost - ценность каждой ячейки // id1 - id белых фишек // id2 - id черных фишек public function calc(grid:Vector.<int>, id1:int, id2:int):int { var eval:int = 0; for (var i:int = 0, l:int = grid.length; i < l; i++) { switch(grid[i]) { case id1: eval += _cost[i]; break; case id2: eval -= _cost[i]; break; } } return eval; } Всем спасибо! |
|
|||||
Регистрация: Aug 2015
Сообщений: 26
|
А этот метод долго отрабатывает?
Если не нравится именно switch, то можно сделать фишки 1 - белые, а черные не 2, а -1, тогда switch заменится на eval += grid[i] * _cost[i] Но, возможно, я не совсем разобрался в алгоритме: зачем в метод передавать Id1 и id2, если они всегда одинаковы, и почему оценка именно так складывается? |
|
|||||
Регистрация: Aug 2010
Сообщений: 18
|
Цитата:
Цитата:
Цитата:
Не совсем понял вопроса о подсчете оценки, но опишу ее логику : В игре угловые клетки самые важные, т.к. их нельзя отобрать у противника, соседние с ними клетки наоборот повышают вероятность захвата углов противника и т.д. Соотв. я дал каждой клетке свой вес, после чего я к весу хода добавляю вес клетки если там мои фишки и отнимаю вес клетки если там фишка противника. Так получаю вес хода, чтобы его можно было сравнить с остальными ходами. Последний раз редактировалось Samuel_D; 11.12.2016 в 23:53. |
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Цитата:
Добавлено через 18 минут 60К ходов в секунду будет достаточно всем и каждому © имхо.Или планируется параллельная игра со всем китаем?) Последний раз редактировалось undefined; 11.12.2016 в 21:21. |
|
|||||
Регистрация: Aug 2010
Сообщений: 18
|
Цитата:
|
|
|||||
Регистрация: Oct 2006
Сообщений: 2,281
|
Это другое дело.Особо оптимизировать тут нечего.Единственное я бы попробовал свич заменить на
Последний раз редактировалось undefined; 12.12.2016 в 12:31. |
|
|||||
Modus ponens
|
Да в этой функции ничего особо не улучшить... это линейное время, и суммировать массив чисел за меньше чем линейное время не получится, ну не во Флеше, так это точно. Может можно попытаться поэксперементировать с байткодом, удалить какие-нибудь проверки и т.д. Но принципиальной разницы в производительности теоретически добиться нельзя.
Если прям такая жестокая необходимость ускорить: можно посмотреть на Хекс и попытаться воспользоваться его АПИ для быстрого доступа к памяти (с его помощю можно снизить затраты на доступ к элементам массива). Или можно попробовать шейдеры: там, как правило, возможно добиться параллельного выполнения (и тогда суммирование массива чисел можно сделать за логарифмическое время, если чисел не очень много.
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 21:25. |
|
« Предыдущая тема | Следующая тема » |
|
|