Getting started with implementing an explicit AI, based on the Essentials one.
All checks were successful
Build / Build (push) Successful in 1m2s

This commit is contained in:
2025-07-11 17:03:08 +02:00
parent 084ae84130
commit a3a4993407
56 changed files with 2687 additions and 1274 deletions

View File

@@ -2,6 +2,8 @@
using System.CommandLine.Parsing;
using System.Reflection;
using PkmnLib.Dynamic.AI;
using PkmnLib.Dynamic.Libraries;
using PkmnLib.Plugin.Gen7;
using Serilog;
namespace AIRunner;
@@ -14,9 +16,11 @@ internal static class Program
{
Log.Logger = new LoggerConfiguration().MinimumLevel.Information().WriteTo.Console().CreateLogger();
Log.Information("Starting AI Runner...");
_availableAIs = AppDomain.CurrentDomain.GetAssemblies().SelectMany(assembly => assembly.GetTypes())
.Where(type => type.IsSubclassOf(typeof(PokemonAI)) && !type.IsAbstract).Select(Activator.CreateInstance)
.Cast<PokemonAI>().ToList();
AILogging.LogHandler = Log.Debug;
var library = DynamicLibraryImpl.Create([
new Gen7Plugin(),
]);
_availableAIs = PokemonAI.InstantiateAis(library);
var testCommand = new Command("test", "Run two AIs against each other")
{
@@ -58,7 +62,7 @@ internal static class Program
var ai2 = _availableAIs!.First(a =>
string.Equals(a.Name, ai2Name, StringComparison.InvariantCultureIgnoreCase));
return TestCommandRunner.RunTestCommand(ai1, ai2, result.GetRequiredValue<int>("--battles"));
return TestCommandRunner.RunTestCommand(library, ai1, ai2, result.GetRequiredValue<int>("--battles"));
});
var rootCommand = new RootCommand("PkmnLib.NET AI Runner")

View File

@@ -13,12 +13,9 @@ namespace AIRunner;
public static class TestCommandRunner
{
internal static async Task RunTestCommand(PokemonAI ai1, PokemonAI ai2, int battles)
internal static async Task RunTestCommand(IDynamicLibrary library, PokemonAI ai1, PokemonAI ai2, int battles)
{
var t1 = DateTime.UtcNow;
var library = DynamicLibraryImpl.Create([
new Gen7Plugin(),
]);
const int maxTasks = 10;
Log.Information("Running {Battles} battles between {AI1} and {AI2}", battles, ai1.Name, ai2.Name);