[freeciv-dev] Diplomacy Project: new map exchange policy

  • From: Free Willy <freewilly@xxxxxxxxxx>
  • To: freeciv-dev@xxxxxxxxxxxxx
  • Date: Wed, 11 Jan 2023 11:08:21 +0100

Hello

I designed a new policy for map exchange in the AI evaluation code of diplomatic trade. The current understanding, which is also documented in code comments like "we are omniscient, we don't need other's maps" etc., is false. The game should simulate for good a natural interest of all players, including AI players. So AI should be interested in purchasing maps from other players in a reasonable way and other players should be able to more easily obtain maps from AI players. Thus diplomacy and gameplay benefit and there are more options for human players to gain some Gold from AI players or insight into unexplored or outdated world view, while I think it is or can be made non-exploitable.

New Policy:

--    DS_ALLIANCE and DS_TEAM relations always render maps for free
--    DS_WAR, DS_CEASEFIRE and DS_NO_CONTACT make map trade unavailable
--    love-for other-player below -MAX_AI_LOVE/2 or "sharing vision" make map trade unavailable
--    recent map trade w/ other-player <= 7 days make map trade unavailable
      (discriminates giving and receiving maps)
otherwise map trade is enabled

Map value calculation:

Basic Map Value: 10 * map-scale, w/ min 25 and max 120
(map-scale is for now the number of cities of the giving player)
-- added 1/3 of that for each of the following conditions:
   -- dipl.-state other than DS_PEACE
   -- love-for below -MAX_AI_LOVE/4
   -- other-player is dangerous
   -- other-player is rich (> 500)
   -- other-player is super rich (> 1200)

Time related deductions:

Of the basic map value are subtracted time or event related parts of the value.
-- a general deduction for game age (ratio of turn per 600)
-- a rebate for map trade events in the past w/ other-player (0..60 %)
    (discriminates giving and receiving maps)
-- full reduction (value 0) in the first 20 days after having received a map from other-player
-- linear sinking deduction in the days 21..32 after receiving a map from other-player

Requirements:

--    4 int values to be serialised into the save-game in the frame of 'struct ai_dip_intel'.

I confess I have implemented this on 3.0.4 when I had some time for it and the tests and corrections I performed recently are running well and looking good to me.

I put this of course to open discussion to the developers here.

Regards, Free Willy





Other related posts: