On Sep 12, 2007, at 5:36 PM, Morton Goldberg wrote:

> I ran the script for three iterations. I'm not sure how to  
> interpret the results. I'm not even sure it the loop is converging.  
> I leave it to you to work that out. It may be working as you expect  
> it to, it may be that your scoring function needs adjustment, or  
> may be that there's a bug in my code. One thought that occurs to  
> me: would it be better to start out with a random distribution of  
> housing and green space?

Well, I made some minor changes so I test for convergence, and I  
found that it does converge and fairly quickly at that. I reach a  
fixed point in on the 7th iteration. Here is the modified code and  
the results. Hope it's what you expected.

<code>
limit = 10
limit.times do |n|
    swaps = 0
    grid.each_with_remaining do |cell, other|
       next if cell.cell_type == other.cell_type
       cn, on = neighbors(cell), neighbors(other)
       before_score = score(cell.cell_type, cn) +
                      score(other.cell_type, on)
       after_score = score(other.cell_type, cn) +
                     score(cell.cell_type, on)
       if after_score < before_score # <-- note change from <= to <
          cell.cell_type, other.cell_type =
             other.cell_type, cell.cell_type
          swaps += 1
       end
    end
    puts "Iteration no. #{n+1}"
    grid.print_field_values
    puts
    break if swaps == 0
end
</code>

<results>
Iteration no. 7
02 02 02 02 02 02 02 03 02 01 02 03 02 03 02 03 02 03 02 01
02 03 03 03 03 03 02 03 02 01 02 02 02 02 02 02 02 02 02 01
02 02 02 02 02 02 02 03 02 01 03 03 03 03 03 03 03 03 03 01
03 03 03 03 03 03 02 03 02 01 02 02 02 02 02 02 02 02 02 01
02 02 02 02 02 02 02 03 02 01 03 02 03 02 03 02 03 03 03 01
03 03 03 03 03 03 02 03 02 01 03 02 03 02 03 02 02 02 02 01
02 02 02 02 02 02 02 03 02 01 02 02 03 02 03 02 03 02 03 01
03 03 03 03 03 03 02 03 02 01 03 02 03 02 03 02 03 02 02 01
02 02 02 02 02 02 02 03 02 01 02 02 03 02 03 02 02 02 02 01
01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
02 02 02 02 02 02 03 02 02 01 02 03 02 03 02 03 02 03 02 01
03 02 03 02 03 02 03 02 03 01 02 03 02 03 02 03 02 03 02 01
02 02 03 02 03 02 03 02 02 01 02 03 02 03 02 03 02 03 02 01
03 02 03 02 03 02 03 02 03 01 02 03 02 03 02 03 02 03 02 01
02 02 03 02 03 02 03 02 02 01 02 03 02 03 02 03 02 03 02 01
<results>

Regards, Morton