Complete.Org: Mailing Lists: Archives: freeciv-dev: January 2002:
[Freeciv-Dev] Re: auto settlers rework
Home

[Freeciv-Dev] Re: auto settlers rework

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
To: Ashley Penney <ashp@xxxxxxxxxxx>
Cc: freeciv-dev@xxxxxxxxxxx
Subject: [Freeciv-Dev] Re: auto settlers rework
From: Raimar Falke <hawk@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Mon, 21 Jan 2002 20:13:28 +0100
Reply-to: rf13@xxxxxxxxxxxxxxxxxxxxxx

On Mon, Jan 21, 2002 at 01:05:10PM -0500, Ashley Penney wrote:
> On Mon, Jan 21, 2002 at 11:54:27AM -0500, pc-freeciv1@xxxxxxxxxxxxxx said:
> > In playing Freeciv, I've run into one thing that I think really should be
> > reworked: The auto-settler code.  Looking at the current code, each settler
> > looks for work to do.  I think that it would make more sense to instead
> > have each city create a list of work that needs to be done, and the
> > settlers could seek a city that has work to be done.
> > 
> > So each city would have a map of what its terrain should look like, given
> > unlimited settler time.  It could then assign a value to each change.  The
> > overall value for the city would be largest such individual value.  This
> > value would need to be recomputed anytime a settler begins work in the
> > city.
> > 
> > Similarly, there would be a value for connecting a city to its neighbors
> > with roads or railroads.
> > 
> > Once the initial change has been made, a new tab could be added to the city
> > window showing the goals for the city.  This would be a view of the city
> > with all worklist items completed, all settler activity completed, and the
> > population maximized (up to a zero or negative one food value).  From here,
> > the player could make changes to the goals.  For example, a plains could be
> > changed to a grassland to stabilize the population (food value of zero at
> > max population), avoid pollution from overproduction, or such.  If the
> > worklist includes the construction of units, those units could be given
> > orders to sentry, fortify, or auto-attack.
> > 
> > Eventually, default goals could be created, much like worklists today.  The
> > default goals would include things like what to do with swamps (irrigate to
> > grasslands or transform to ocean), taking into account specails, such as
> > never transforming an oasis.
> > 
> > The goal should be to be able to create a city and never have to look at it
> > again, provided that it is not involved in combat, and yet have the city do
> > pretty much exactly what you want it to do.
> 
> One thing to also add is to take in account the distance the settler has to
> travel in order to perform the work.  Nothing like a new city requiring some
> work half way across the map, then having the settler move all the way back.

The current server auto-settler code and also the
settler-management-agent (SMA) takes this into account.

> Trouble with that is that settlers are liable to get stuck in small sections
> of the map, due to the distance required to travel elsewhere. :/ 

The only way AFAIK is to increase the time horizon of the
calculation. The current server auto-settler code is based on 24 turns
(the famous MORT constant). This means that the action which would
yield the most benefit in the next 24 turns is considered.

Example:
 build a rail at the current tile:
   - time to move to the target: 0 turns
   - time to create the improvement: 3 turns
   - benefit per turn: 1 trade
   - number of effective turns: 24-0-3=21
   - total benefit: 21*1 trade=21 trades

 build a mine some distance away:
   - time to move to the target: 10 turns
   - time to create the improvement: 10 turns
   - benefit per turn: 3 shields
   - number of effective turns: 24-10-10=4
   - total benefit: 4*3 shield=12 shields

So the total benefit of the second will increase with a larger time
horizon.

        Raimar

-- 
 email: rf13@xxxxxxxxxxxxxxxxx
 "Your mail could not be delivered to the following Address:
  VTCMC.VTLPR@xxxxxxxxxxxxx        ** Unassigned error message **"


[Prev in Thread] Current Thread [Next in Thread]