Complete.Org: Mailing Lists: Archives: freeciv-dev: April 2005:
[Freeciv-Dev] Re: (PR#12833) consider_settler_action simplification (rev
Home

[Freeciv-Dev] Re: (PR#12833) consider_settler_action simplification (rev

[Top] [All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index] [Thread Index]
Subject: [Freeciv-Dev] Re: (PR#12833) consider_settler_action simplification (rev.)
From: "Brian Dunstan" <bdunstan149@xxxxxxxxx>
Date: Tue, 19 Apr 2005 15:50:22 -0700
Reply-to: bugs@xxxxxxxxxxx

<URL: http://bugs.freeciv.org/Ticket/Display.html?id=12833 >

--- Peter Schaefer <peter.schaefer@xxxxxxxxx> wrote:
> 
> <URL:
> http://bugs.freeciv.org/Ticket/Display.html?id=12833
> >
> 
> Well I trust you will tell me when I get on your
> nerves:
> 
>  I looked at the source and it seems to me it 
> 1)iterates over all cities, all tiles, and there is
> no break or return
> to return early
> 2)higher value of newtiles is good
> If I go wrong in the above, I'm probably wrong in my
> ideas below.
> 
> Now, thinking aloud, if one had cache of     
> >int diff = new_tile_value - old_tile_value; 
> such that one could determine max over all tiles/all
> tiles within my
> borders on this continent of(diff), or if one would

I think this is a good idea. 
(new_tile_value-old_tile_value) does not depend on the
unit performing the activity, so it could be stored
with the city.  I think with that, and adding an
iterator over all the activities, we could get away
drastically reducing the size of
evaluate_improvements(), and doing away with
consider_settler_action() completely.

With a simpler setup, it might be easier to implement
a solution for the pollution cleanup problems, etc.

evaluate_improvements() (oversimplified) could look
like this: 

(attached)


                
__________________________________ 
Do you Yahoo!? 
Plan great trips with Yahoo! Travel: Now over 17,000 guides!
http://travel.yahoo.com/p-travelguide
evaluate_improvements(punit, best_act, best_tile) {

  city_list_iterate(pplayer, pcity) {
    city_map_iterate(pcity, ptile) {
      
      unit_activity_iterate(punit, activity) {
        if(we_can_do_this_activity()) {
          
          time = mv_turns + get_turns_for_activity();

          total_value = amortize(pcity->ai.value[activity], time);

          if(total_value > best_value) {
            best_value = total_value; 
            /* select this activity */
          }
        }
      } unit_activity_iterate_end;
    } city_map_iterate_end;
  } city_list_iterate_end;
}

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