.NET core bots are not working in the Early Bird tournament

Reading the match logs, my bot is submitting no move when uploaded into the player portal.

I downloaded the logs and the playerCommand.txt file in each round for my bot contains the following for 13 moves in a row:

Command: No Command
Execution time: 0ms
Exception: null

But It WoRkS oN mY MaChInE.

How do I debug what has gone wrong?

“Exception: null” seems weird.

FYI the compilation was successful. Compile logs:

INFO:main:Bot Json Path : /home/PythonScripts/temp/207c9421-3d6f-463a-810b-3d22292c9564/dotnetcore - HomieTrainedBot
INFO:BotCompilers:Starting compilation for dotnet project
INFO:BotCompilers:Executing compiler command : dotnet publish --output /TrainedBot/bin/Debug/netcoreapp2.0
INFO:BotCompilers:Done Executing compiler command
INFO:BotCompilers:Compilation Exited with Code 0
INFO:BotCompilers:Bot file found. Ending Compilation.

Here is the part of the match log that looks suspect. A NULL pointer exception in the game runner. Not sure if this helps identify what I’ve done wrong??

=======================================
Starting round: 1

My Player:H=450 S=150 W=1 X,Y=24,29
Player 2 :H=450 S=150

No command provided by bot. Falling back to default no command
java.lang.NullPointerException: null
at za.co.entelect.challenge.player.TournamentPlayer.setExecutionResult(TournamentPlayer.java:81) ~[game-runner.jar:?]
at za.co.entelect.challenge.player.entity.BasePlayer.executeBot(BasePlayer.java:79) ~[game-runner.jar:?]
at za.co.entelect.challenge.engine.runner.GameEngineRunner.lambda$onProcessRound$1(GameEngineRunner.java:121) ~[game-runner.jar:?]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
GameError - Player 1, worm 1, round 1: Unknown command No

Completed round: 1

Same here, mine is a Javascript bot.

first move

Command: No Command
Execution time: 1001ms
Exception: /home/PythonScripts/temp/BotFiles/48fcaa20-9840-4425-aebf-9d07cf3e22e8/02bfe02c-09e8-4d0f-bd21-bd55ab2e4e52/StarterBot.js:129

console.log(`C;${roundNumber};${command}`);

                                ^

ReferenceError: command is not defined

at executeRound (/home/PythonScripts/temp/BotFiles/48fcaa20-9840-4425-aebf-9d07cf3e22e8/02bfe02c-09e8-4d0f-bd21-bd55ab2e4e52/StarterBot.js:129:37)

at Interface.consoleReader.on (/home/PythonScripts/temp/BotFiles/48fcaa20-9840-4425-aebf-9d07cf3e22e8/02bfe02c-09e8-4d0f-bd21-bd55ab2e4e52/StarterBot.js:97:5)

at Interface.emit (events.js:198:13)

at Interface._onLine (readline.js:308:10)

at Interface._normalWrite (readline.js:451:12)

at Socket.ondata (readline.js:165:10)

at Socket.emit (events.js:198:13)

at addChunk (_stream_readable.js:288:12)

at readableAddChunk (_stream_readable.js:269:11)

at Socket.Readable.push (_stream_readable.js:224:10)

Talking to other people I know who entered and have the same exception. It looks like all .NET Core bots have an issue

If it is a system error I am find if the bots get entered into the event. Even if it would meant worse placement. Just my opinion here. if it is a system error.

One of the reasons I like non compiling languages.

Hi Everyone,

The tournament has a verification phase where will check any matches that exhibited odd behaviour. We will probably have picked up the. Net core issue during that phase :wink:. Thanks for letting us know about this though.

We will have a look and rerun any matches that failed as a result of an error on our side.

I use a DotNetCore bot and my bot is performing as expected.

Ok thanks good to know. At least then we can figure out if its something we did wrong in our submission

1 Like

My dotnetCore bot is working fine. I did reintroduce a bug that causes invalid moves just before I submitted, but that is my own problem.

@RHL @kuifie was your bot.json configured for /Release or /Debug folder path?

The bot.json for the netcore starterbot comes configured for Debug path, but now looking at the Readme.md it says to make it Release.

Wondering if my issue is because I left it the same way that it was in the repo?

Here is my bot.json, excluding author and email:

{
“nickName”: “Kuifie V1”,
“botLocation”: “/KuifieBot/bin/Debug/netcoreapp2.0”,
“botFileName”: “KuifieV1.dll”,
“botLanguage”: “dotnetcore”
}

hmmm thanks. Thats not it. Mine looks the same
{
“nickName”: “TrainedBot”,
“botLocation”: “/TrainedBot/bin/Debug/netcoreapp2.0”,
“botFileName”: “TrainedBot.dll”,
“botLanguage”: “dotnetcore”
}

Another clue
Adding more info to try to debug the situation

Locally it looks like my bot submits invalid commands. e.g. moving to an illegal square:

But in the tournament it falls over:

Hi everyone,

We tracked down the issue regarding most of the dotnet bots.
What is happening is that any dotnet bot that has any Nuget Package referenced and does not have the CopyLocalLockFileAssemblies property set in the .csproj PropertyGroup section, will not be pulling any of the dependencies into the output directory.

The other problem was that we were not forcing that property on our side when compiling, which we will be doing in the future. We also updated the submission reference matches to show a fail status if the bot failed to execute as expected, hopefully making it easier to pick up these kinds of issues in future.

Since this is an issue that is also prevalent in the ReferenceMatches, we will unfortunately not be re-running the tournament matches as this issue could have been raised sooner.

This issue will be solved in the next tournaments, even if you don’t explicitly set that property, so please don’t be discouraged from entering in the future.

Sorry to all that have been affected by this.

1 Like

@GeelKanarie tried a new upload and can confirm this now works. Thanks to you guys for spending the time figuring this out.

Invalid moves now also cause a Match Status failure. e.g. moving to a cell too far away

Will the bot still go into the tournament in this scenario? My AI could potentially submit an invalid move. So I hope that even if it does that it will still be submitted into the tournaments?

Hi @K290,

Thank you for the feedback.

We will be tuning our referee to be a bit less strict, and we’re rather going to flag matches that have excessive invalid moves as having a warning instead of outright failing them, meaning they will be entered into the tournament.

Somehow I don’t feel like this is fair, my actual .Net bot runs without errors. Why can’t we rerun the tournament and let the best bot win. Your system said that my submission was successful and I left the site only to discover that it had misinformed me, in this forum. Nothing is more heartbreaking than my hard work being discarded like this.

2 Likes

They did initially say they would “rerun any matches due to an error on their side”.
This sounds like an error on their side since the .net core instructions did not specify to add that flag to the csproj. The instructions were here: https://github.com/EntelectChallenge/2019-Worms/tree/develop/starter-bots/dotnetcore . There is no real way to know how Entelect was going to do their build process so we couldn’t have foreseen this any better than they could.

I didn’t mind since my bot was untrained so far. I just wanted to test if it would work in a tournament.

But if yours had a fighting chance at winning the golden ticket I completely agree that the matches involving .net bots with 3rd party libraries should be rerun.

@Theomatikalli you shouldn’t have been essentially disqualified for us not reporting a bug soon enough. I did report it the night before the tournament started, so it is subjective what qualifies as soon enough.

Hi all,

We agree that the information the contestants received was a bit deceiving and we are working on improving the feedback from the player portal. We have improved the checks on the reference matches to indicate if there are any issues more clearly.

Unfortunately, because we support so many languages for the challenge we cannot verify in detail that every bot runs as expected and it is on each contestant to check the reference match logs that their bot runs correctly before the tournament deadline.

The entire goal of the reference match is so contestants can see if their bot works on our environment. If they have any runtime exceptions or if there are some config issues, then they can see what is wrong and fix it before it is too late.

I also want to include that the team making the challenge possible is using their own free time to make this happen and we do make mistakes. That is why we encourage the community to get involved and help us to find issues that could lead to a scenario like this. There was a couple of people that indicated some other issues with bot uploads when it opened and they were fixed well before the tournament.

In regards to the NuGet package manager issue, it is clearly not an unavoidable issue since the starter bot and dotnet bots from other contestants ran correctly. We are working on giving everyone clearer feedback in regards to issues like this.

This was only the first tournament and there are two more chances to get into the finals. We encourage contestants to help us improve the system to the point where everyone has a fair chance to compete. Thanks for the feedback so far and good luck with the upcoming tournaments.

6 Likes

I guess that makes sense.

How much lead time before a tournament starts is suggested for bug reporting so that Entelect has an opportunity to look into it?
What is the suggested “soft” deadline?

The reason I ask is because this bug was raised before the deadline based on the reference match logs.