SlowGuess/NeurIPS_2023_OCR huggingface dataset:
True if all subjects are alive.  
np.count_nonzero(subject.health > 0) == len(subject)
Computes the maximum l-inf distance between teammates current_dist = max(subject.row.max()-subject.row.min(), subject.col.max()-subject.col.min())
# Tracks hits scored with a specific combat style
hits = subject.event.SCORE_HIT.combat_style == combat_style.SKILL_ID
Computes the summed gold of all teammates subject.gold.sum()
Evalutaes to >= 1 if the current game tick is >= the specified tick gs.current Tick / num Tick
B Predicates
B.1 Example 1
# Signature for predicates
def predicate(gs: GameState, subject: Group, **kwargs) -> float:
    def DistanceTraveled(gs: GameState, subject: Group, dist: int):
        '''True if the summed l-inf distance between each agent's current pos and spawn pos is greater than or equal to the specified_dist.''''if not any(subject.health > 0):
    return 0
    r, c = subject.row, subject.col
    dists = utils+linf(list(zip(r, c)), [gs.spawn_pos[id_]
                    for id_in subject(entity.id])
    return max(min(dists.sum() / dist, 1.0), 0.0)
B.2 Example 2
def FullyArmed(gs: GameState, subject: Group,
	combat_style: nmmo_scrill.CombatSkill,
	 level: int, num_agent: int):
	""True if the number of fully equipped agents >= _num_agent
To determine fully equipped, we compare the levels of
the hat, top, bottom, weapon, ammo to_level.〞〞
WEAPON_IDS = \{
	^nmmo_scrill.Mlee: \{'weapon':5, 'ammo':13\}, # Spear, Whetstone
	^nmmo_scrill.Range: \{'weapon':6, 'ammo':14\}, # Bow, Arrows
	^nmmo_scrill.Mage: \{'weapon':7, 'ammo':15\} # Wand, Runes
\}
item_ids = \{ 'hat':2, 'top':3, 'bottom':4 \}
item_ids.update(WEAPON_IDS[combat_style])
lvlFLT = (subject.item.level >= level) & (subject.item.equipped > 0)
type FLT = np.isin(subject.item.type_id, list(item_ids.values))
_, equipmentNumbers = np.unique(
		subject.item owner_id[lvlFLT & typeFLT], return_counts=True)
if num_agent == 0:
	return 1.0
return max(min((equipmentnumbers >= len(   item_ids.items()))).sum() / num_agent, 1.0), 0.0)
C Tasks
def KillPredicate(gs: GameState, subject: Group):
    '''The progress, the max of which is 1, should
        * increase small for each player kill
        * increase big for the 1st and 3rd kills
        * reach 1 with 10 kills''''
    num_kills = len(subject.event.PLAYER_KILL)
    progress = num_kills * 0.06
    if num_kills >= 1:
        progress += .1
    if num_kills >= 3:
        progress += .3
    return min(progress, 1.0)
This predicate can be turned into a task like this.
from nmmo.task import predicate_api  
from nmmo.task.group import Group
Create a Predicate class with interfaces to GameState and Group  
pred_cls = predicate_api.make_predicate(KillPredicate)
Create a task for each agent  
task_list = []  
for agent_id in agent_list:  
    task_list.append(pred_cls(subject=Group(agent_id)).create_task())
Create a task that evaluates and rewards a whole team together team_task = pred_cls(subject=Group(agent_list)).create_task()
Make a task that agent 1 gets rewarded for the agent 2's evaluation  
pred_CLs = predicate_api.make_predicate(AllDead)  
task_for_agent_1 = pred_CLs(
    subject=Group(agent_2)).create_task(assignee=agent_1)
(a) Do the main claims made in the abstract and introduction accurately reflect the paper's contributions and scope? [Yes] We claim only a release of the platform with new features and improvements. These are available for download now.
(b) Did you describe the limitations of your work? [Yes] See Discussion and Limitations: comparable game mechanics to 1.x
(c) Did you discuss any potential negative societal impacts of your work? [Yes] See Ethics and Responsible Use. This is a simulated game with no personal information that is substantially abstracted from real world capabilities.
(d) Have you read the ethics review guidelines and ensured that your paper conforms to them? [Yes] No concerns for our work. The only portions of our work that are not currently open source are a set of held-out tasks. These will be released following the competition.
(a) Did you include the code, data, and instructions needed to reproduce the main experimental results (either in the supplemental material or as a URL)? [Yes] The baselines repository is available as part of our release
(b) Did you specify all the training details (e.g., data splits, hyperparameters, how they were chosen)? [Yes] Included in our training scripts. Tables to be included with the competition summary instead of in this manuscript.
(c) Did you report error bars (e.g., with respect to the random seed after running experiments multiple times)? [N/A] To appear as part of the post-competition analysis of models
(d) Did you include the total amount of compute and the type of resources used (e.g., type of GPUs, internal cluster, or cloud provider)? [Yes] Individual models are trainable in 8 A100 hours. Desktop-grade GPUs are also fine.
(a) If your work uses existing assets, did you cite the creators? [Yes] Contributors are displayed prominently on our homepage. Our baseline is built on CleanRL, cited in this paper, and PufferLib, currently unpublished
(b) Did you mention the license of the assets? [Yes] Everything is MIT
(c) Did you include any new assets either in the supplemental material or as a URL? [No]
(d) Did you discuss whether and how consent was obtained from people whose data you're using/curating? [N/A] No human data
(e) Did you discuss whether the data you are using/curating contains personally identifiable information or offensive content? [Yes] No PII
(a) Did you include the full text of instructions given to participants and screenshots, if applicable? [N/A] This publication covers the environment release, not the associated competition
(b) Did you describe any potential participant risks, with links to Institutional Review Board (IRB) approvals, if applicable? [N/A]
(c) Did you include the estimated hourly wage paid to participants and the total amount spent on participant compensation? [N/A]