Skip to content

Bug in FruitBot: COMPLETION_BONUS can be awarded twice within one game step #105

@tabula-rosa

Description

@tabula-rosa

Hello! Thank you for your efforts in open-sourcing Procgen. I wanted to bring to your attention an implementation bug that I have encountered.

In FruitBot, once the agent makes contact with the finish line, there is a possibility that COMPLETION_BONUS is awarded twice. This is because sometimes the agent makes contact with two PRESENT objects simultaneously, and the code that prevents multiple awards of COMPLETION_BONUS appears to have an implementation bug.

This code in handle_agent_collision appears to be the source of the issue:

        } else if (obj->type == PRESENT) {
            if (!step_data.done) {
            }
            step_data.reward += COMPLETION_BONUS;
            step_data.done = true;
            step_data.level_complete = true;
        }

As you can see, no action is taken when (!step_data.done), which I believe is not intended. Therefore, multiple calls to handle_agent_collision when the agent simultaneously collides with multiple presents (usually 2) lead to multiple awards of COMPLETION_BONUS.

Based on my testing, I believe this fixes the issue and should be the correct implementation:

        } else if (obj->type == PRESENT) {
            if (!step_data.done) {
                step_data.reward += COMPLETION_BONUS;
                step_data.done = true;
                step_data.level_complete = true;
            }
        }

Thank you! If it helps, I can make a PR if you have interest in merging in a fix.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions