TripleA Logo TripleA Forum
    • TripleA Website
    • Categories
    • Recent
    • Popular
    • Users
    • Groups
    • Tags
    • Register
    • Login

    AI Development Discussion and Feedback

    Scheduled Pinned Locked Moved AI
    316 Posts 32 Posters 431.5k Views 30 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Captain CrunchC Offline
      Captain Crunch Banned
      last edited by

      @zlefin hey! Cool! I suggested literally years ago that when the AI is officially done that maybe we can make a thread for an "AI tweak challenge" where someone tweaks the AI and challenges us to beat the AI twice (once as Axis and once as Allies etc.) and then we can see who submits the hardest most unbeatable AI!

      Ya, I was testing the current AI as it went from easy to currently very tough but the AI has now been at its current state for literally 2 years now so I haven't hadto test it and I have been waiting for "tactical AI" updates until then but I think I'm basically waiting for the official final release to test.

      Great posts though and I hope you submit tweaked AI's (I only play the WWII Classic map though) to battle and test to see if they are actually better than the current AI ... just an interesting idea and could lead to years and years of tough, challenging battles to post about in some thread eventually!

      C 1 Reply Last reply Reply Quote 0
      • Z Offline
        zlefin Moderators @redrum
        last edited by zlefin

        @redrum
        ok; I dug a little more: i'm still getting the error when I use the .9687 installation I have in a separate folder. If I use 7621, the most recent stable, I don't get the error.

        her'es the error (very long indeed):

        TripleA engine version 1.9.0.0.9687
        Loading map: big_world_2, from: C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip
        Loading resources from the following paths: [C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip, C:\Program Files\TripleA2\assets]
        Loading map: big_world_2, from: C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip
        Loading resources from the following paths: [C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip, C:\Program Files\TripleA2\assets]
        Loading map: big_world_2, from: C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip
        Loading resources from the following paths: [C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip, C:\Program Files\TripleA2\assets]
        Loading map: big_world_2, from: C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip
        Loading resources from the following paths: [C:\Users\Tom\triplea\downloadedMaps\big_world_2-master.zip, C:\Program Files\TripleA2\assets]
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Warning: serialization de-serialization error, m_name in DefaultNamed.java is null.
        Error: java.lang.NullPointerException
        java.lang.NullPointerException
        at games.strategy.engine.data.DefaultNamed.equals(DefaultNamed.java:33)
        at java.base/java.util.HashMap.putVal(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.ArrayList.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.GeneratedMethodAccessor20.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at java.base/java.util.HashMap.readObject(Unknown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at com.google.common.collect.ImmutableListMultimap.readObject(ImmutableListMultimap.java:486)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadFields(Unknown Source)
        at java.base/java.io.ObjectInputStream.defaultReadObject(Unknown Source)
        at games.strategy.engine.data.GameData.readObject(GameData.java:122)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at java.base/java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
        at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
        at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
        at games.strategy.engine.framework.GameDataManager.loadGame(GameDataManager.java:108)
        at games.strategy.io.IoUtils.readFromMemory(IoUtils.java:60)
        at games.strategy.engine.framework.GameDataUtils.cloneGameData(GameDataUtils.java:29)
        at games.strategy.engine.framework.GameDataUtils.cloneGameData(GameDataUtils.java:19)
        at games.strategy.triplea.ui.TripleAFrame.showHistory(TripleAFrame.java:1657)
        at games.strategy.triplea.ui.TripleAFrame.updateStep(TripleAFrame.java:1465)
        at games.strategy.ui.SwingAction.lambda$invokeAndWait$0(SwingAction.java:86)
        at games.strategy.ui.SwingAction.lambda$invokeAndWaitResult$1(SwingAction.java:114)
        at java.desktop/java.awt.event.InvocationEvent.dispatch(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.desktop/java.awt.EventQueue.access$500(Unknown Source)
        at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
        at java.desktop/java.awt.EventQueue$3.run(Unknown Source)
        at java.base/java.security.AccessController.doPrivileged(Native Method)
        at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
        at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

        1 Reply Last reply Reply Quote 0
        • Z Offline
          zlefin Moderators
          last edited by

          I'm gonna just test with 7621 for awhile; and see how the ai plays here. I think the .8304 (or whatever it was I previously had had) version had some weird bugs in it anyways; in particular in it I think the enemytuvswing for the check the enemy counterattack to see if it can hold captured territories was generating some very erroneous values (like 2E9; which is obviously absurd), which caused the ai to do some dumb things. but that doesn't seem to be occurring in 7621, and it was consistently doing so in that other version for some of the opening moves. right now I don' tfeel like trying to dig it out again and see if the behavior consistently recurs in that version; especially sinc eit may well relate to since-fixed bugs, and i've had too much drama today.

          redrumR 1 Reply Last reply Reply Quote 0
          • redrumR Offline
            redrum Admin @zlefin
            last edited by redrum

            @zlefin That's fine. Looks like the error occurs when you are trying to load a save game. Do you know what version you created that save game with and can you upload the save game here so I can try to reproduce it?

            It appears either the save game data is messed up or something has changed in the engine causing it to not be able to load the old save game.

            TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

            Z 1 Reply Last reply Reply Quote 0
            • C Online
              Cernel Moderators @Captain Crunch
              last edited by

              @captain-crunch Yah, if an AI thing for tuning the algorithm values per game (not per map) would be eventually made, I think there should be a way to determine what gets accepted, in case anybody wants to submit one for any not actively owned maps (of course, maps with an active owner, the owner decides).
              Maybe running AI vs AI somewhat officially monitored battles, in case, like, several people offer an AI configuration for WW2 Classic or whatever (you also have to consider that proposals might be worse than default, so some reasonably quick way to test would be in order, unless restricting the feature to actively owned maps only).

              1 Reply Last reply Reply Quote 3
              • Z Offline
                zlefin Moderators @redrum
                last edited by

                @redrum
                but that error didn' toccur when I was trying to load a save game; it was starting a new game.
                I opened that copy of triplea (which is on a separate installation as to not interfere), did select map for another map to make sure it clears it. did select map again to select bigworld2 BOP, set Russia to Hard AI; and click play to start the game. then it generates that error within a second or so. and it still consistently does that if I repeat the process using the 9687 installation.

                maybe it's a side effect of it being a different installation?

                1 Reply Last reply Reply Quote 0
                • Z Offline
                  zlefin Moderators
                  last edited by

                  were there any known bugs in the ai's calculations in 7621?

                  redrumR 1 Reply Last reply Reply Quote 0
                  • redrumR Offline
                    redrum Admin @zlefin
                    last edited by

                    @zlefin Not that I can think of. If there were any they were very minor.

                    I'm guessing your error on the pre-release has nothing to do with the AI though. You can probably start the game up with all human and see the same error.

                    TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                    Z 1 Reply Last reply Reply Quote 0
                    • Z Offline
                      zlefin Moderators @redrum
                      last edited by

                      @redrum
                      if I start with all human I don' tget any errors; and can go through russia's first turn without any issues. so whatever it is, it's affected by me setting russia to ai.

                      redrumR 1 Reply Last reply Reply Quote 0
                      • redrumR Offline
                        redrum Admin @zlefin
                        last edited by

                        @zlefin Try doing "Show History". I think that is what is triggering the error.

                        TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                        Z 1 Reply Last reply Reply Quote 0
                        • Z Offline
                          zlefin Moderators @redrum
                          last edited by zlefin

                          @redrum
                          yep; that did it. doing show history even in an all human game caused the nullpointerexception.

                          back to dealing with the ai stuff! so when it's at: "Check if we should try to hold attack territories"
                          where does it derive the "enemyattackers" value from? what assumptions does it make when it does that derivation?
                          oh and I note there's two different times it does that check; one early on, and one somewhat later on with what looks like a smaller list of targets, which looks like a list culled down to the best targets.

                          redrumR 1 Reply Last reply Reply Quote 0
                          • redrumR Offline
                            redrum Admin @zlefin
                            last edited by

                            @zlefin Weird. I think you have some kind of messed up install. I'd recommend wiping all your TripleA installs and map directories then reinstalling at some point.

                            For enemyAttackers, it tries to calculate how many units each of its enemies could potentially attack the given territory with and then selects the group of enemy units that it believes has the most "power" which it then considers the the max enemy attackers that it could face in a counter attack. It tends to be extra conservative around this if there are potential can openers.

                            TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                            Z 1 Reply Last reply Reply Quote 1
                            • Z Offline
                              zlefin Moderators @redrum
                              last edited by

                              @redrum
                              some of the numbers i've seen for the enemyattackers value look like it's underestimating the size of the counterattack. in particular it looks like it's not counting counterattackers who would come from another territory it's considering attacking.
                              I've a save I could put up to better show the point; or I could just copy part of the logs and explain the situation, whihc would be best?

                              redrumR HeppsH 2 Replies Last reply Reply Quote 1
                              • redrumR Offline
                                redrum Admin @zlefin
                                last edited by

                                @zlefin Correct, it tries to ignore enemy counter attackers from territories that it is planning to attack since it assumes those units will die. My guess is there are some cases that it must decide not to attack one of those territories and isn't taking the additional enemy counterattack units into account. Save games are definitely better especially right before it makes the moves and if it makes those moves almost everytime.

                                TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                                Z 1 Reply Last reply Reply Quote 1
                                • HeppsH Offline
                                  Hepps Moderators @zlefin
                                  last edited by

                                  @zlefin Nice to see another contributor.... thanks for jumping in @zlefin.

                                  "A joyous heart sours with the burden of expectation"
                                  Hepster

                                  1 Reply Last reply Reply Quote 2
                                  • Z Offline
                                    zlefin Moderators @redrum
                                    last edited by

                                    @redrum

                                    ok, hopefully that uploads right. it's right before germany's turn which is set to be hard ai. made in 7621
                                    0_1520785568570_AIgermancountermoves.tsvg

                                    while the ai's moves are reasonable; i'm just trying to understand how it's gettin some of its numbers here; like in the first section of its can it hold the territories checks I see this: (using finer logging setting)

                                    Western Russia, value=51.35751298216039, averageAttackFromValue=20.57303311797783, MyAttackers=14, RemainingUnits=9
                                    Western Russia, CanHold=true, MyDefenders=9, EnemyAttackers=1, win%=0.0, EnemyTUVSwing=-10.09375, hasLandUnitRemaining=false
                                    SZ 10 North Sea, value=15.82651924854822, averageAttackFromValue=6.364376154510273, MyAttackers=16, RemainingUnits=8
                                    SZ 10 North Sea, CanHold=true, MyDefenders=8, EnemyAttackers=12, win%=30.434782608695656, EnemyTUVSwing=-1.4891304347826022, hasLandUnitRemaining=false
                                    Northern Russia, value=57.61767455300545, averageAttackFromValue=21.22610523348412, MyAttackers=9, RemainingUnits=4
                                    Northern Russia, CanHold=true, MyDefenders=4, EnemyAttackers=1, win%=0.0, EnemyTUVSwing=-10.03125, hasLandUnitRemaining=false

                                    but western and northern russia are both next to moscow, which is/will be intact and has a bunch of units. a bit above that in the logs there was
                                    Removing territory that we can't successfully attack: Moscow, maxWin%=0.0, maxAttackers=2
                                    so it should know that moscow will be intact and its troops available for counters.

                                    other oddities are
                                    Leningrad, value=30.751588092760592, averageAttackFromValue=21.22610523348412, MyAttackers=15, RemainingUnits=3
                                    Leningrad, CanHold=true, MyDefenders=3, EnemyAttackers=1, win%=0.0, EnemyTUVSwing=-9.25, hasLandUnitRemaining=false
                                    where, again at the least the air attackers from moscow are missing; as it has 4 air that would be in range to counterattack if the ai took leningrad.

                                    and
                                    Finland, value=16.73492259416393, averageAttackFromValue=6.142684580406411, MyAttackers=14, RemainingUnits=7
                                    Finland, CanHold=true, MyDefenders=7, EnemyAttackers=3, win%=0.0, EnemyTUVSwing=-26.875, hasLandUnitRemaining=false
                                    where I don't see which 3 attackers it could possibly be coming up with; as it's clearly using some air, but not all of the air if it's takin gfrom russia, or maybe it's takin from britain and ignoring the russian counterattack, I don't know. but if the ai did a 14 attackers on attack on finland then it wouldn't have taken leningrad, which would leave the leningrad stack available to counter. It makes me wonder more generally what the logs would show if I setup a scenario wherein province A has 8 units, and is adjacent to provinces B/C, which are hostile, and each have 6 units (let's say all units have att/def 2 and i'ts LL, and all other units are too far away to be relevant). in such a scenario it would be capable of taking either province reliably, but not both, and would not be able to hold onto either of them. maybe later i'll setup a test for that.

                                    when it does the second round of its Check if it can hold territories checks, using the smaller list of targets it's selected, it's showin those same numbers again. I just don' tsee how it getting those values for EnemyAttackers in those cases.

                                    redrumR 1 Reply Last reply Reply Quote 0
                                    • redrumR Offline
                                      redrum Admin @zlefin
                                      last edited by

                                      @zlefin I think you've found a bug 🙂

                                      I did some quick debugging and saw the following:

                                      Germany Attack Options After Removing Can't Attack Territories:
                                      [Southern Russia, Western Russia, SZ 10 North Sea, Northern Russia, SZ 16 North Atlantic, SZ 18 West Atlantic, Sweden, SZ 4 Denmark Straight, SZ 9 North Atlantic, SZ 13 Gulf of St Lawrence, SZ 7 Barents Sea, Leningrad, Switzerland, Spain, SZ 23 West Mediterranean, SZ 2 Labrador Sea, SZ 37 Caribbean Sea, Finland, SZ 17 English Channel]

                                      Enemy Counter Attacks on Western Russia: [bomber owned by British]

                                      I think what is happening is the British counter attack is overriding the Russian counter attack that is why you see the 1 unit instead of this:
                                      [armour owned by Russians, armour owned by Russians, armour owned by Russians, infantry owned by Russians, infantry owned by Russians, infantry owned by Russians, infantry owned by Russians, armour owned by Russians, armour owned by Russians, tactical_bomber owned by Russians, bomber owned by Russians, fighter owned by Russians, tactical_bomber owned by Russians, fighter owned by Russians]

                                      Enemy Turn Order was one of the last things I added to the AI which I think caused a bug. Here was the PR: https://github.com/triplea-game/triplea/pull/282

                                      I'll need to look more into this but its probably either a bug in this method or the data being passed into it:
                                      https://github.com/triplea-game/triplea/blob/master/game-core/src/main/java/games/strategy/triplea/ai/pro/data/ProTerritoryManager.java#L440

                                      TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                                      1 Reply Last reply Reply Quote 2
                                      • Z Offline
                                        zlefin Moderators
                                        last edited by

                                        Ok;
                                        looking at another case to understand stuff generally, using finest logs (same savegame), I think I figured out wha'ts going on in this one and it's fine; it adjusted the enemy attackers up because it removed an unprofitable attack on caucasus from it's possible attacks stream, thus meaning those 3 inf can join in a counterattack on southern russia, right?:

                                        in the section:
                                        Determine units to attack each territory with
                                        Territory=Southern Russia, CanHold=false, MyDefenders=2, EnemyAttackers=22, win%=100.0, EnemyTUVSwing=3.9375, hasLandUnitRemaining=true
                                        territory=Southern Russia, win%=100.0, TUVSwing=4.34375, hasRemainingLandUnit=true, attackValue=5.71875, territoryValue=4.0, allUnitsCanAttackOtherTerritory=true with attackers=[infantry owned by Germans, infantry owned by Germans, infantry owned by Germans, tactical_bomber owned by Germans]

                                        which shows the 22 enemy counterattackers; but earlier in the phase
                                        Check if we should try to hold attack territories
                                        Southern Russia, value=61.00113178010893, averageAttackFromValue=20.92354576175239, MyAttackers=16, RemainingUnits=10
                                        Southern Russia, CanHold=false, MyDefenders=10, EnemyAttackers=19, win%=100.0, EnemyTUVSwing=23.534090909090907, hasLandUnitRemaining=true

                                        with a lower number of enemy attackers;

                                        unrelated question: how does the ai decide whether or not to submerge submarines?

                                        redrumR 2 Replies Last reply Reply Quote 0
                                        • redrumR Offline
                                          redrum Admin @zlefin
                                          last edited by redrum

                                          @zlefin Correct, at a high level it first goes through an iteration of determining which territories to attack then updates enemy counter attacks based on that reduced list of territories then decides which units to actually use for each attack (and potentially removes some more attacks).

                                          If I recall correctly, submerge is treated essentially just like any other retreat where it tries to determine if it has positive TUV for the remaining battle and if not then submerge.

                                          Oh and I just ran a quick test to validate my theory by removing the UK bomber which then gives these results:

                                          Germany Attack Options After Removing Can't Attack Territories:
                                          [Southern Russia, Western Russia, SZ 10 North Sea, Northern Russia, SZ 16 North Atlantic, SZ 18 West Atlantic, Sweden, SZ 4 Denmark Straight, SZ 9 North Atlantic, SZ 13 Gulf of St Lawrence, SZ 7 Barents Sea, Leningrad, Switzerland, Spain, Caucasus, SZ 23 West Mediterranean, SZ 2 Labrador Sea, SZ 37 Caribbean Sea, Finland, SZ 17 English Channel]

                                          Enemy Counter Attacks on Western Russia: [armour owned by Russians, armour owned by Russians, armour owned by Russians, infantry owned by Russians, infantry owned by Russians, infantry owned by Russians, infantry owned by Russians, tactical_bomber owned by Russians, bomber owned by Russians, fighter owned by Russians, tactical_bomber owned by Russians, fighter owned by Russians]

                                          German attacks after removing the UK bomber:
                                          0_1520798479041_797fcfb8-27a6-4eb2-83fc-9af44a09ed80-image.png

                                          TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                                          1 Reply Last reply Reply Quote 0
                                          • redrumR Offline
                                            redrum Admin @zlefin
                                            last edited by redrum

                                            @zlefin I looked at the code and I think after the enemy turn order changes I mentioned above, the territoriesToCheck needs to be set to ensure the potential territories to attack are all checked for all enemies. I did some testing and updating that seemed to fix the max enemy attackers issue and not cause any side effects. Here is the PR: https://github.com/triplea-game/triplea/pull/3271

                                            This can be tested with the latest pre-release: https://github.com/triplea-game/triplea/releases/tag/1.9.0.0.9743

                                            TripleA Developer with a Passion for AI: https://forums.triplea-game.org/topic/105/ai-development-discussion-and-feedback

                                            1 Reply Last reply Reply Quote 1

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 9
                                            • 10
                                            • 11
                                            • 12
                                            • 13
                                            • 14
                                            • 15
                                            • 16
                                            • 11 / 16
                                            • First post
                                              Last post
                                            Copyright © 2016-2018 TripleA-Devs | Powered by NodeBB Forums