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.
    • General_ZodG Offline
      General_Zod Moderators @redrum
      last edited by

      @redrum Does AI currently recognize that a canal with it ability to block an entire enemy fleet. Is a viable option worth looking at? When considering defense of it's fleets or coastal territories threatened by enemy fleet.

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

        @general_zod It doesn't consider conquering a land territory to close a canal in order to block enemy fleets. It does recognize whether canals are open/closed when calculating potential enemy attacks though. Considering canal 'value' is something that is on the list and I'll clarify that a bit.

        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
        • FrostionF Offline
          Frostion Admin
          last edited by

          If/when the AI begins valueing canal land territories, it will be a game changer for a map like Iron War. At that time I will have to play that map again and see if balancing or other changes are needed. @Black_Elk I'm glad you have not given up on Iron War and still play it. You might be the best qualified person to define what small changes would be fair after an AI update ☺

          Map maker of: Star Wars: Galactic War + Star Wars: Tatooine War + Caribbean Trade War + Dragon War + Age of Tribes + Star Trek: Dilithium War + Iron War + Iron War: Europe + Warcraft: War Heroes

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

            How accessible (in terms of ease of readability) is the ai code? and how well documented is it?
            been playing quite a few ai games lately on various maps; and while fun enough, it'd be nicer if I could make the ai smarter, so I wanted to look under the hood to see if I could tweak some values to tighten up the ai's play.
            or are there any particular sub-problems wherein it would be helpful to have more thinking on how to design the algorithms?
            (yes I'm in computer science and know how hard ai is)

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

              @zlefin Well, if you know Java well then it shouldn't be too difficult. I'd say the code is structured fairly well but definitely could use some refactoring in different areas. The first post of this thread lays out the high level flow and structure of the AI. I'd recommend pulling down the code and attempting to improve one specific thing. I'm glad to provide advice/assistance. There are tons of areas that could be improved in the AI including the list of things in the first post of this thread but also performance and even algorithms that are used. Really depends what you want to improve about it and what maps as really each map potentially has different priorities on the biggest weak points of the AI.

              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
              • General_ZodG Offline
                General_Zod Moderators @zlefin
                last edited by General_Zod

                @zlefin

                Thank you for being an active "TripleA" member (long timer), and for your contributions to our map depository. We hope you take advantage of the many new mapmaking features that are coming in our next official stable release. Although you can also use our current pre-releases in your map-making endeavors.

                https://github.com/triplea-game/triplea/releases

                The "TripleA" platform is currently entering it's new golden age. But we still have a lot of features and improvements on the backlogs. Which can really, even further propel, the quality of our existing games as well as those currently in development. "TripleA" is always in need of more assistance on the development team. Since you have experience with this sort of thing. Maybe consider joining the team and coordinating efforts on a higher level.

                But if not, even tinkering on your free time is also very beneficial to "TripleA". You may post anything you find, that can be improved at our GitHub link, where they speak technical jargon. Or post on this forum. Also here is a convenient link to our current public features request page, that are on our backlog.

                Best Regards, GZ

                https://github.com/triplea-game/triplea/issues

                https://forums.triplea-game.org/topic/182/guidelines-and-feature-request-list

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

                  @redrum
                  I can read java fine; but I'm quite rusty and haven't actually used dev tools in years. I think i'd like to use something like a debugger mode so I can go step by step and watch the ai perform it's calculations. that tends to be the easiest way to get a feel for how the ai is thinking; and to figure out exactly where to place a change to fix it. I looked through the ai files a bit with just a regular text editor; but it's so much easier when I have the right tools for the job, and a regular text editor isn't much of a specialized tool. any particular programs you recommend?

                  the most common annoyance is the ai leaving itself overly exposed to counterattacks; the ai sent in too many forces to an attack it had a good enough odds at with less. especially on low luck setting wherein it's easier to exploit those. I've been playing balance of power 2 lately; and the ai does that a fair bit. when a battlefield is a back and forth over the turns, this causes the ai to suffer higher attrition over time than I do.

                  while design is fun, coding is a chore, so mostly I'm looking for thinsg wherein a well-placed change can make a nice improvement without taking too long to write.

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

                    @zlefin Most of the developers use Eclipse but IntelliJ works as well. Here are the general recommendations for settings up the code base: https://github.com/triplea-game/triplea/tree/master/docs/dev

                    For observing how the AI is thinking, you can turn on AI logging at different levels by going to the top menu bar in game 'Debug' -> 'Show Hard AI Logs'. Its pretty rough as I'm really the only person that ever looks at it so lots of data and might take a bit of time to understand the context. Using that combined with searching through the code or using a debugger should give you a picture of what's going on.

                    On the AI using too many units on attack, this is a bit on purpose because ensuring that attacks are successful and leave at least 1 land unit helps minimize the chance that attacks fail and leave unexpected counterattacks open which can be hard to handle.

                    If you have some save games, I'm glad to help walk through a few scenarios with you so you can understand the decisions the AI is making and whether tweaking things could help. The other thing to realize is currently the AI isn't optimized for any particular maps and runs the exact same algorithms all on maps. Eventually I'd like to provide map makers with AI configuration so it can be more optimized for each map.

                    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 3
                    • Z Offline
                      zlefin Moderators
                      last edited by zlefin

                      ok; i'm gonna do some looking over for the results when Russia is set to hard ai for the opening move of Big world 2: balance of power.
                      The Canhold = X variable in the "Check if we should try to hold attack territories" section is supposed to measure whether the enemy would either be unable to recapture the territory, or it would be unprofitable for the enemy to recapture it, correct?

                      edit: bah; I downloaded the most recent pre-release engine version and now the map is giving errors; i'd wanted to use it in case there's bugs in the ai calcs that were fixed since the regular release. guess I need to revert to a more stable version; I shouldn't have told it to overwrite my installation 😛 which version would be best to revert to?

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

                        @zlefin If you are seeing errors in the latest pre-release then please let me know as we try to keep it stable. I'd rather try to fix any errors you see then revert. But there hasn't been very many AI changes recently so the regular stable should be fine (7621) if you want to test things out.

                        Yeah, the canHold is used to indicate whether the AI thinks it can hold or would be worth holding a territory it can attack. It uses this to determine whether to move minimal troops and prefer using air if canHold=false and move max attackers in to maximize its TUV trade if canHold=true.

                        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
                          was responded to before I finished edit(s), so discussion chain gets confused; just skip past this.
                          edit - rewriting for clarity, one moment;

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

                            @zlefin Ok, I'll take a look. In that case, please try this pre-release as I don't see any NPE when starting BW2 BoP: 1.9.0.0.9687

                            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
                            • Z Offline
                              zlefin Moderators
                              last edited by zlefin

                              I'm still gettin ga null pointer exception when starting that map with russia set to hard ai in version .9687; maybe the map xmls got corrupted or something; I forget what the issue was that affected the 270bc maps; but something similar here might've caused a problem.

                              I tried using triplea's remove map to remove Big world 2 then reinstall it; still gettin the nullpointerexception; where should I post the error log from the console? it looks really long; like it's stuck in a loop; I wonder why it's affecting my installation but not yours. bleh.

                              did a little more checking - i'm gettin the same error (or at least same name for the error) on a lot of different maps; and in both the .9687 and the .9713; I think something musta gotten screwed up with my overall triplea installations.

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

                                @zlefin I'd recommend clearing your map directory and redownload maps. You can just post the error here for now.

                                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
                                • 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 Offline
                                          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

                                            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
                                            • 12
                                            • 13
                                            • 14
                                            • 15
                                            • 16
                                            • 14 / 16
                                            • First post
                                              Last post
                                            Copyright © 2016-2018 TripleA-Devs | Powered by NodeBB Forums