Re: AI personalities
Per Inge Mathisen <per-0/[email protected]> Sat, 5 Nov 2005 21:58:27 +0000 (GMT)
| Newsgroups | gmane.games.freeciv.ai |
|---|---|
| Message-ID | <[email protected]> |
Hi Gregory! Good to see you are still alive and kicking ;) On Mon, 31 Oct 2005, Gregory Berkolaiko wrote: > I was actually thinking about it lately. In the building system overhaul > which I never finished, I was trying to implement tags for proposed > builds. They were something like: > 1. EMERGENCY_MILITARY(emergency defence) > 2. EMERGENCY_CIVIL(temples) > 3. MILITARY (aggressive units) > 4. EXPANSION (settlers) > 5. CIVIL (development like banks) > > Then to compare them, I wanted to implement the following simple rules: > 1 trumps all others > 2 trumps all but 1 > 3, 4 and 5 have certain weights and the comparison is done on numerical > basis > > Changing these weights would allow cheap implementation of three traits. This seems like a good idea. I have thought along the same lines, too. However, there is something that has been bugging me lately with the design of the AI. It is connected to my attempts to introduce a bit more fake intelligence and emotion into the AI's diplomacy. I think the fundamental mistake is that the AI is outcome oriented, rather than historically oriented. Currently the AI attempts to recalculate pretty much the entire state every turn, and figure out what to do based on what would generate the most beneficial outcome, city by city, unit by unit. The problem with this is that the lack of memory makes it unable to learn from mistakes and set goals for itself. When I designed the AI diplomacy code, I made it create values like 'AI love' and act on abstracts like that and 'war fear' and 'war desire'. Now I think that was a fundamental mistake (but one that matched well with how the rest of the AI is written). These abstractions should be the main motivators for the AI, but be mere tools for finding goals. When the game begins, the AI should set itself the goal of expanding horizontally. It should attempt to stick to this goal until it is frustrated, either by lack of good expansions, enemy aggression or anti-smallpox factors. Only then should it start to look at other goals. (Except: If it finds opportunities too good to pass up. If we find one of the enemy's three cities is undefended and we can snatch it, we should do so (if we have the personality for it). Currently the AI leaves such fantastic opportunities alone.) Now the AI can set a new goal for itself - to expand in depth (buildings), to attack an enemy, or to race ahead to launch a spaceship. When it decides to attack an enemy, it should decide on a tactic and a ground zero for its attacks. If this goal is frustrated, it should eventually drop it, but also remember it so it does not try it again if there are other goals to be pursued instead. When it comes to AI diplomacy, the 'AI love' is quite information poor. It tells us little about how trustworthy another player is, since it is composed of so many factors. Instead, we should have a memory of past events - has this player broken treaties with us in the past, has he given us gifts, has he rejected previous offers, and so on. Same with the anti-spam controls - now we just keep a counter ticking. What we should do instead is remember past rejections, and either "arrogantly" keep away from suggesting treaties, or increase the offer each time from what was offered last time. I've started in a small way already. In the previous rewrite of the AI diplomacy, I added a temporary goal mechanism for declaring war, whereby the AI would decide on a target and a 'reason for war' which we would announce to the victim when a counter ran out. I would like to make such goals a lot more central to the whole AI, though. - Per