Могу ли я извлечь производительность, изменяя представление игровых связей из классов на Typedarrays в решателе JavaScriJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Могу ли я извлечь производительность, изменяя представление игровых связей из классов на Typedarrays в решателе JavaScri

Сообщение Anonymous »

контекст: < /strong>
Я делаю решатель для настольной игры в JavaScript. Игра установлена ​​на сетке с фиксированным размером с 5 роботами, а некоторые ячейки отмечены как цели. Игрок должен найти минимальное количество движений , чтобы достичь установленной цели с одним из роботов. Мой решатель использует первый поиск в широте, потому что я хочу найти лучшее решение. Основной цикл - это очередь для удержания игровых центров, на которые необходимо просмотреть. Я пытаюсь оптимизировать свой код, чтобы получить производительность.
Что я уже сделал:


Я изменил большинство массивов на тип -кар /> Я искал некоторый вычислитель вне основного цикла для данных, которые необходимы очень часто, как расстояния от стен. Из того, что я понимаю, это класс Gamestate , который очень медленный. Честно говоря, я создаю довольно много из них, но я чувствую, что смогу получить от изменения структуры данных здесь. Кроме того, основные функции в моем решателе довольно быстры в сравнении (solve, который является основным циклом, Move , который вычисляет новый Gamestate после воспроизведения Move and Checkwin , который проверяет, является ли игровой центр действительным решением)
my GameState Class содержит 2 поля:

robots, что есть uint8 (10). /> Moves, который представляет собой Uint32Array (32) < /li>
< /ul>
Я использую дата низкого уровня, такие как цифры и типичные арары, чтобы представлять позиции, движения, цвета роботов и в основном все, что мне нужно для чтения /записи во время решения. Единственное осталось немного высокого уровня, - это класс Gamestate , а также массив Todostates , используемый в качестве основной очереди для BFS (см. Ниже).
Мои вопросы:

Я получу производительность. ? < /li>
Есть ли лучший способ написать очередь в JavaScript?export function solve(board, startingState, goal, maxDepth){
board = preComputeBoard(board);
let seenStates = new Map();
let todoStates = [startingState];
let checks = 0;
let stateId = -1;
let numOfStates = 1;
let startTime = Date.now();

while(stateId + 1 < numOfStates){
stateId++;
let state = todoStates[stateId];

if(state.moves[0] > maxDepth){continue;}

let stateKey = EncodeRobots(state.robots);
if(seenStates.has(stateKey)){continue;}
seenStates.set(stateKey, true);

checks++;
if(state.CheckWin(board, goal)){
console.log("checks", checks);
console.log("loops", stateId);
console.log("time", Date.now() - startTime);
return state;
}

for(let move = 0; move < 20; move++){
let newGameState = new GameState(state);
newGameState.Move(board, 1

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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