Да, рандом-локации - корень зла, кмк. Я бы предложила такие варианты оптимизации:
- локация выбирается после подсчета голосов, при этом удачной или неудачной она считается в зависимости от того, сколько баллов по нужным для этой локации характеристикам набрал персонаж (т.е. оценка идет изначально без привязки к локации). Удачная - значит, + 10 баллов от общего количества. Неудачная - значит, - 10 баллов. А затем сравнить результаты бойцов;
или
- локация задаётся перед поединком, одна на обоих поединщиков. Задача голосующего - грамотно расписать, почему она хороша для одного и плоха для другого. Каждый "обоснуй" - это, соответственно, плюс или минус к удачности локации. А удачность или неудачность локации скажется на общем количестве баллов, как и в пункте выше.
Принцип определения локации может быть разным - тот же ГСЧ, или, допустим, зашифровать локации цифрами и дать время на их выбор. Все участники голосования выберут какую-либо цифру, затем организаторы огласят, какая локация под ней скрывалась. При этом задана будет та локация, которую выбрали наибольшее количество человек. Можно сделать то же самое открытым голосованием, т.е. перед началом турнира выбрать локации для каждой пары.